HAL
settings_widget.cpp
Go to the documentation of this file.
2 
3 #include <QBoxLayout>
4 #include <QLabel>
5 #include <QRegularExpression>
6 #include <QRegularExpressionMatch>
7 #include <QStyle>
9 
10 #include <QDebug>
11 
12 namespace hal
13 {
15  : QFrame(parent), m_layout(new QVBoxLayout()),
16  mContainer(new QBoxLayout(QBoxLayout::TopToBottom)), m_top_bar(new QHBoxLayout()),
17  mNameLabel(new QLabel(this)), mRevertButton(new QToolButton()),
18  mDefaultButton(new QToolButton()), mSettingsItem(item)
19  {
24  m_layout->setContentsMargins(0, 0, 0, 0);
25  m_layout->setSpacing(0);
26 
27  mNameLabel->setText(item->label());
28  mNameLabel->setObjectName("name-label");
29 
31 
32  mRevertButton->setText("Undo");
33  mRevertButton->setToolTip("Revert your last change");
34  mRevertButton->setVisible(false);
35  mRevertButton->setEnabled(false);
36  QSizePolicy sp_revert = mRevertButton->sizePolicy();
37  sp_revert.setRetainSizeWhenHidden(true);
38  mRevertButton->setSizePolicy(sp_revert);
40  mDefaultButton->setText("Default");
41  mDefaultButton->setToolTip("Load the default value");
42  mDefaultButton->setVisible(false);
44  QSizePolicy sp_default = mDefaultButton->sizePolicy();
45  sp_default.setRetainSizeWhenHidden(true);
46  mDefaultButton->setSizePolicy(sp_default);
54 
55  hide();
56  }
57 
59  {
60  for (QPair<QLabel*, QString>& pair : m_labels)
61  {
62  pair.first->setText(pair.second);
63  if (pair.second.isEmpty())
64  {
65  pair.first->hide();
66  }
67  else
68  {
69  pair.first->show();
70  }
71  }
72  }
73 
75  {
76  return mSettingsItem->label();
77  }
78 
80  {
81 
82  if (!mSettingsItem) return;
83  QVariant val = value();
84  setDirty(mSettingsItem->value() != val);
86  }
87 
89  {
90  Q_UNUSED(setAll);
91  if (!mSettingsItem) return;
94  }
95 
97  {
98  if (!mSettingsItem) return;
101  }
102 
104  {
105  mSettingsItem = nullptr;
107  close();
108  }
109 
110  void SettingsWidget::setDirty(bool dirty)
111  {
112  mDirty = dirty;
114 
115  QStyle* s = style();
116  s->unpolish(this);
117  s->polish(this);
118  }
119 
121  {
122  return mDirty;
123  }
124 
126  {
127  if (!mSettingsItem) return;
129  setDirty(false);
131  }
132 
134  {
135  Q_UNUSED(event);
136  mRevertButton->setVisible(true);
137  mDefaultButton->setVisible(true);
139  }
140 
142  {
143  Q_UNUSED(event);
144  mRevertButton->setVisible(false);
145  mDefaultButton->setVisible(false);
147  }
148 
150  {
151  if (!mSettingsItem) return;
153  setDirty(false);
154  }
155 
157  {
158  if (!mSettingsItem) return;
161  }
162 }
The interface for the logical part of a setting.
Definition: settings_item.h:46
virtual void setValue(const QVariant &v)=0
virtual QVariant value() const =0
virtual bool isDefaultValue() const
virtual QString label() const
virtual QVariant defaultValue() const =0
virtual void loadCurrentValue()
QToolButton * mRevertButton
void setDirty(bool dirty)
Sets the dirty state.
QHBoxLayout * m_top_bar
void leaveEvent(QEvent *event)
QVBoxLayout * m_layout
SettingsWidget(SettingsItem *item, QWidget *parent=nullptr)
QList< QPair< QLabel *, QString > > m_labels
void enterEvent(QEvent *event)
virtual void acceptValue()
QToolButton * mDefaultButton
virtual void handleSetDefaultValue(bool setAll=false)
SettingsItem * mSettingsItem
void triggerRemoveWidget(SettingsWidget *widget)
void triggerDescriptionUpdate(SettingsItem *item)
QBoxLayout * mContainer
virtual QVariant value()=0
virtual void handleRevertModification()
virtual void load(const QVariant &value)=0
void clicked(bool checked)
void setText(const QString &text)
void addLayout(QLayout *layout, int stretch)
void addStretch(int stretch)
void addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
void setSpacing(int spacing)
virtual bool event(QEvent *e) override
void setFrameStyle(int style)
void setText(const QString &)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
void setContentsMargins(int left, int top, int right, int bottom)
Q_EMITQ_EMIT
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void destroyed(QObject *obj)
void setObjectName(const QString &name)
void setRetainSizeWhenHidden(bool retainSize)
virtual void polish(QWidget *widget)
virtual void unpolish(QWidget *widget)
AlignTop
bool close()
void setEnabled(bool)
void hide()
void setLayout(QLayout *layout)
void setSizePolicy(QSizePolicy)
QStyle * style() const const
void setToolTip(const QString &)
virtual void setVisible(bool visible)