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 
74  bool SettingsWidget::matchLabel(const QString& needle)
75  {
76  if (!mSettingsItem) return false;
78  }
79 
81  {
82  return mSettingsItem->label();
83  }
84 
86  {
87 
88  if (!mSettingsItem) return;
89  QVariant val = value();
90  setDirty(mSettingsItem->value() != val);
92  }
93 
95  {
96  Q_UNUSED(setAll);
97  if (!mSettingsItem) return;
100  }
101 
103  {
104  if (!mSettingsItem) return;
107  }
108 
110  {
111  mSettingsItem = nullptr;
113  close();
114  }
115 
116  void SettingsWidget::setDirty(bool dirty)
117  {
118  mDirty = dirty;
120 
121  QStyle* s = style();
122  s->unpolish(this);
123  s->polish(this);
124  }
125 
127  {
128  return mDirty;
129  }
130 
132  {
133  if (!mSettingsItem) return;
135  setDirty(false);
137  }
138 
140  {
141  Q_UNUSED(event);
142  mRevertButton->setVisible(true);
143  mDefaultButton->setVisible(true);
145  }
146 
148  {
149  Q_UNUSED(event);
150  mRevertButton->setVisible(false);
151  mDefaultButton->setVisible(false);
153  }
154 
156  {
157  if (!mSettingsItem) return;
159  setDirty(false);
160  }
161 
163  {
164  if (!mSettingsItem) return;
167  }
168 }
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()
bool matchLabel(const QString &needle)
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)
QRegularExpressionMatch match(const QString &subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions) const const
bool hasMatch() const const
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)