4#pragma warning(disable : 4800)
5#pragma warning(disable : 4251)
6#pragma warning(disable : 4244)
12#include <QRegExpValidator>
17#include "../../global.hpp"
18#include "../../utilities/system_info.hpp"
30 class CustomLineEdit :
public QFrame
36 CustomLineEdit(QRegExp rx, QString separator,
int numLineEdits = 1,
int maxDigits = 4, QWidget *parent = 0)
38 , numLineEdits_(numLineEdits)
39 , maxDigits_(maxDigits)
41 setFrameShape(QFrame::Panel);
42 setFrameShadow(QFrame::Sunken);
44 auto layout =
new QHBoxLayout(
this);
45 layout->setContentsMargins(0, 0, 0, 0);
46 layout->setSpacing(0);
48 for (
int i = 0; i != numLineEdits_; ++i)
52 auto sep =
new QLabel(separator,
this);
53 sep->setStyleSheet(
"background: white");
54 layout->addWidget(sep);
55 layout->setStretch(layout->count(), 0);
58 auto edit =
new QLineEdit(
this);
59 edit->installEventFilter(
this);
61 layout->addWidget(edit);
62 layout->setStretch(layout->count(), 1);
64 edit->setFrame(
false);
65 edit->setAlignment(Qt::AlignCenter);
67 auto font = edit->font();
68 font.setStyleHint(QFont::Monospace);
69 font.setFixedPitch(
true);
72 auto validator =
new QRegExpValidator(rx, edit);
73 edit->setValidator(validator);
75 lineEdit_.append(edit);
77 QObject::connect(edit, &QLineEdit::editingFinished, [=]() {
78 for (
int i = 0; i < numLineEdits_; i++)
80 if (lineEdit_[i]->hasFocus())
87 setMaximumWidth(30 * numLineEdits);
90 void SetReadOnly(
bool readOnly)
92 for (
int i = 0; i < numLineEdits_; i++)
94 lineEdit_[i]->setReadOnly(readOnly);
98 void SetEnabled(
bool enabled)
100 for (
int i = 0; i < numLineEdits_; i++)
102 lineEdit_[i]->setEnabled(enabled);
107 bool eventFilter(QObject *obj, QEvent *event)
override
109 auto bRes = QFrame::eventFilter(obj, event);
111 if (event->type() == QEvent::KeyPress)
113 auto keyevent =
dynamic_cast<QKeyEvent *
>(event);
116 for (
int i = 0; i < numLineEdits_; ++i)
118 auto lineEdit = lineEdit_[i];
121 switch (keyevent->key())
124 if (lineEdit->cursorPosition() == 0)
132 if (lineEdit->text().isEmpty() || (lineEdit->text().size() == lineEdit->cursorPosition()))
140 if (lineEdit->text().isEmpty() || lineEdit->text() ==
"0")
142 lineEdit->setText(
"0");
148 case Qt::Key_Backspace:
149 if (lineEdit->text().isEmpty() || lineEdit->cursorPosition() == 0)
178 void TextChanged(
const QString &text);
181 void MoveNextLineEdit(
int i)
183 if (i + 1 != numLineEdits_)
185 lineEdit_[i + 1]->setFocus();
186 lineEdit_[i + 1]->setCursorPosition(0);
187 lineEdit_[i + 1]->selectAll();
191 void MovePrevLineEdit(
int i)
195 lineEdit_[i - 1]->setFocus();
196 lineEdit_[i - 1]->setCursorPosition(lineEdit_[i - 1]->text().size());
200 virtual QString Text()
const = 0;
201 virtual void SetText(
const QString &text) = 0;
206 QList<QLineEdit *> lineEdit_;
210 class IpLineEdit :
public CustomLineEdit
216 explicit IpLineEdit(QWidget *parent = 0)
217 : CustomLineEdit(QRegExp(
"^(0|[1-9]|[1-9][0-9]|1[0-9][0-9]|2([0-4][0-9]|5[0-5]))$"),
".", 4, 3, parent)
221 QString Text()
const override
223 auto value = QString(
"");
224 for (
int i = 0; i < numLineEdits_; i++)
226 value.append(lineEdit_[i]->text());
227 if (i < (numLineEdits_ - 1))
233 for (
int i = 0; i < numLineEdits_; ++i)
236 if (i < (numLineEdits_ - 1))
244 void SetText(
const QString &text)
override
246 auto ip = text.split(
".");
248 if (ip.size() != numLineEdits_)
251 for (
int i = 0; i < numLineEdits_; i++)
253 lineEdit_[i]->setText(ip.at(i));
259 class MacLineEdit :
public CustomLineEdit
265 explicit MacLineEdit(QWidget *parent = 0)
266 : CustomLineEdit(QRegExp(
"[0-9A-Fa-f]{2}"),
"-", 6, 2, parent)
270 QString Text()
const override
272 auto value = QString(
"");
273 for (
int i = 0; i < numLineEdits_; i++)
275 value.append(lineEdit_[i]->text());
276 if (i < (numLineEdits_ - 1))
281 return "00-00-00-00-00-00";
285 void SetText(
const QString &text)
override
287 auto mac = text.split(
"-");
289 if (mac.size() != numLineEdits_)
290 mac = text.split(
":");
292 if (mac.size() != numLineEdits_)
295 for (
int i = 0; i < numLineEdits_; i++)
297 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 c_bayer_to_rgb.h:17