HAL
input_dialog.cpp
Go to the documentation of this file.
2 
4 
5 #include<QDialogButtonBox>
6 
7 namespace hal
8 {
10  {
11  init();
12  }
13 
14  InputDialog::InputDialog(const QString& window_title, const QString& info_text, const QString& input_text, QWidget* parent, Qt::WindowFlags f) : QDialog(parent, f)
15  {
16  init();
17 
18  setWindowTitle(window_title);
19  setInfoText(info_text);
20  setInputText(input_text);
21  }
22 
23  void InputDialog::init()
24  {
25  mLabelInfoText = new QLabel();
26  mLabelWarningText = new QLabel();
27  mInputTextEdit = new QLineEdit();
28 
30  mOkButton = button_box->button(QDialogButtonBox::Ok);
31 
32  mLayout = new QVBoxLayout(this);
33  mLayout->addWidget(mLabelInfoText);
34  mLayout->addWidget(mInputTextEdit);
35  mLayout->addWidget(mLabelWarningText);
36  mLayout->addWidget(button_box);
37 
38 
39  mLabelInfoText->setStyleSheet("font-weight: bold");
40  mLabelInfoText->setContentsMargins(0, 0, 0, 15);
41 
42  mOkButton->setDisabled(true);
43 
44  mLabelWarningText->setStyleSheet("color: red");
45  mLabelWarningText->setAlignment(Qt::AlignHCenter);
46  mLabelWarningText->setContentsMargins(0, 0, 0, 3);
47 
48  mLayout->setContentsMargins(15, 15, 15, 10);
49 
50 
51  mValidator = StackedValidator();
52 
53  connect(button_box, &QDialogButtonBox::accepted, this, &InputDialog::handleOkClicked);
54  connect(button_box, &QDialogButtonBox::rejected, this, &InputDialog::handleCancelClicked);
55  connect(mInputTextEdit, &QLineEdit::textChanged, this, &InputDialog::handleTextChanged);
56  }
57 
59  {
60  mLabelInfoText->setText(text);
61  }
62 
64  {
65  mInputTextEdit->setText(text.trimmed());
66  mInputTextEdit->selectAll();
67  }
68 
70  {
71  mWarningText = text;
72  }
73 
74  void InputDialog::showWarningText()
75  {
76  mLabelWarningText->setText(mWarningText);
77  }
78 
79  void InputDialog::hideWarningText()
80  {
81  mLabelWarningText->setText("");
82  }
83 
84  void InputDialog::enableProgression()
85  {
86  mOkButton->setDisabled(false);
87  hideWarningText();
88  }
89 
90  void InputDialog::disableProgression()
91  {
92  setWarningText(mValidator.failText());
93  mOkButton->setDisabled(true);
94  showWarningText();
95  }
96 
98  {
99  mValidator.addValidator(Validator);
100  }
101 
103  {
104  mValidator.removeValidator(Validator);
105  }
106 
108  {
109  mValidator.clearValidators();
110  }
111 
113  {
114  return mInputTextEdit->text().trimmed();
115  }
116 
117  void InputDialog::handleTextChanged(const QString& text)
118  {
119  if(!mValidator.validate(text.trimmed()))
120  disableProgression();
121  else
122  enableProgression();
123  }
124 
125  void InputDialog::handleOkClicked()
126  {
128  }
129 
130  void InputDialog::handleCancelClicked()
131  {
133  }
134 }
void setInfoText(const QString &text)
void setInputText(const QString &text)
void addValidator(Validator *Validator)
QString textValue() const
InputDialog(QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Definition: input_dialog.cpp:9
void setWarningText(const QString &text)
void removeValidator(Validator *Validator)
Combines different validators into one.
void removeValidator(Validator *v)
void addValidator(Validator *v)
bool validate(const QString &input)
Base class for any string validator.
Definition: validator.h:41
QString failText() const
Definition: validator.cpp:10
void addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
virtual void done(int r)
QPushButton * button(QDialogButtonBox::StandardButton which) const const
void setAlignment(Qt::Alignment)
void setText(const QString &)
void setContentsMargins(int left, int top, int right, int bottom)
void selectAll()
void setText(const QString &)
void textChanged(const QString &text)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
QString trimmed() const const
AlignHCenter
typedef WindowFlags
void setContentsMargins(int left, int top, int right, int bottom)
void setDisabled(bool disable)
void setStyleSheet(const QString &styleSheet)
void setWindowTitle(const QString &)