4#pragma warning(disable : 4800)
5#pragma warning(disable : 4251)
6#pragma warning(disable : 4244)
12#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
13# include <QRegularExpressionValidator>
15# include <QRegExpValidator>
21#include "../../global.hpp"
22#include "../../utilities/system_info.hpp"
34#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
35 using RegExp = QRegularExpression;
36 using RegExpValidator = QRegularExpressionValidator;
38 using RegExp = QRegExp;
39 using RegExpValidator = QRegExpValidator;
42 class CustomLineEdit :
public QFrame
48 CustomLineEdit(RegExp rx, QString separator,
int numLineEdits = 1,
int maxDigits = 4, QWidget *parent = 0)
50 , numLineEdits_(numLineEdits)
51 , maxDigits_(maxDigits)
53 setFrameShape(QFrame::Panel);
54 setFrameShadow(QFrame::Sunken);
56 auto layout =
new QHBoxLayout(
this);
57 layout->setContentsMargins(0, 0, 0, 0);
58 layout->setSpacing(0);
60 for (
int i = 0; i != numLineEdits_; ++i)
64 auto sep =
new QLabel(separator,
this);
65 sep->setStyleSheet(
"background: white");
66 layout->addWidget(sep);
67 layout->setStretch(layout->count(), 0);
70 auto edit =
new QLineEdit(
this);
71 edit->installEventFilter(
this);
73 layout->addWidget(edit);
74 layout->setStretch(layout->count(), 1);
76 edit->setFrame(
false);
77 edit->setAlignment(Qt::AlignCenter);
79 auto font = edit->font();
80 font.setStyleHint(QFont::Monospace);
81 font.setFixedPitch(
true);
84 auto validator =
new RegExpValidator(rx, edit);
85 edit->setValidator(validator);
87 lineEdit_.append(edit);
89 QObject::connect(edit, &QLineEdit::editingFinished, [
this]() {
90 for (
int i = 0; i < numLineEdits_; i++)
92 if (lineEdit_[i]->hasFocus())
99 setMaximumWidth(30 * numLineEdits);
102 void SetReadOnly(
bool readOnly)
104 for (
int i = 0; i < numLineEdits_; i++)
106 lineEdit_[i]->setReadOnly(readOnly);
110 void SetEnabled(
bool enabled)
112 for (
int i = 0; i < numLineEdits_; i++)
114 lineEdit_[i]->setEnabled(enabled);
119 bool eventFilter(QObject *obj, QEvent *event)
override
121 auto bRes = QFrame::eventFilter(obj, event);
123 if (event->type() == QEvent::KeyPress)
125 auto keyevent =
dynamic_cast<QKeyEvent *
>(event);
128 for (
int i = 0; i < numLineEdits_; ++i)
130 auto lineEdit = lineEdit_[i];
133 switch (keyevent->key())
136 if (lineEdit->cursorPosition() == 0)
144 if (lineEdit->text().isEmpty() || (lineEdit->text().size() == lineEdit->cursorPosition()))
152 if (lineEdit->text().isEmpty() || lineEdit->text() ==
"0")
154 lineEdit->setText(
"0");
160 case Qt::Key_Backspace:
161 if (lineEdit->text().isEmpty() || lineEdit->cursorPosition() == 0)
190 void TextChanged(
const QString &text);
193 void MoveNextLineEdit(
int i)
195 if (i + 1 != numLineEdits_)
197 lineEdit_[i + 1]->setFocus();
198 lineEdit_[i + 1]->setCursorPosition(0);
199 lineEdit_[i + 1]->selectAll();
203 void MovePrevLineEdit(
int i)
207 lineEdit_[i - 1]->setFocus();
208 lineEdit_[i - 1]->setCursorPosition(
static_cast<int>(lineEdit_[i - 1]->text().size()));
212 virtual QString Text()
const = 0;
213 virtual void SetText(
const QString &text) = 0;
218 QList<QLineEdit *> lineEdit_;
222 class IpLineEdit :
public CustomLineEdit
228 explicit IpLineEdit(QWidget *parent = 0)
229 : CustomLineEdit(RegExp(
"^(0|[1-9]|[1-9][0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$"),
".", 4, 3, parent)
233 QString Text()
const override
235 auto value = QString(
"");
236 for (
int i = 0; i < numLineEdits_; i++)
238 value.append(lineEdit_[i]->text());
239 if (i < (numLineEdits_ - 1))
245 for (
int i = 0; i < numLineEdits_; ++i)
248 if (i < (numLineEdits_ - 1))
256 void SetText(
const QString &text)
override
258 auto ip = text.split(
".");
260 if (ip.size() != numLineEdits_)
263 for (
int i = 0; i < numLineEdits_; i++)
265 lineEdit_[i]->setText(ip.at(i));
271 class MacLineEdit :
public CustomLineEdit
277 explicit MacLineEdit(QWidget *parent = 0)
278 : CustomLineEdit(RegExp(
"[0-9A-Fa-f]{2}"),
"-", 6, 2, parent)
282 QString Text()
const override
284 auto value = QString(
"");
285 for (
int i = 0; i < numLineEdits_; i++)
287 value.append(lineEdit_[i]->text());
288 if (i < (numLineEdits_ - 1))
293 return "00-00-00-00-00-00";
297 void SetText(
const QString &text)
override
299 auto mac = text.split(
"-");
301 if (mac.size() != numLineEdits_)
302 mac = text.split(
":");
304 if (mac.size() != numLineEdits_)
307 for (
int i = 0; i < numLineEdits_; i++)
309 lineEdit_[i]->setText(mac.at(i));
Namespace for user interface components.
Definition decl_image_scene.hpp:39
Root namespace for the Image Manager interface.
Definition version.hpp:11