HAL
main_settings_widget.h
Go to the documentation of this file.
1 // MIT License
2 //
3 // Copyright (c) 2019 Ruhr University Bochum, Chair for Embedded Security. All Rights reserved.
4 // Copyright (c) 2019 Marc Fyrbiak, Sebastian Wallat, Max Hoffmann ("ORIGINAL AUTHORS"). All rights reserved.
5 // Copyright (c) 2021 Max Planck Institute for Security and Privacy. All Rights reserved.
6 // Copyright (c) 2021 Jörn Langheinrich, Julian Speith, Nils Albartus, René Walendy, Simon Klix ("ORIGINAL AUTHORS"). All Rights reserved.
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a copy
9 // of this software and associated documentation files (the "Software"), to deal
10 // in the Software without restriction, including without limitation the rights
11 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12 // copies of the Software, and to permit persons to whom the Software is
13 // furnished to do so, subject to the following conditions:
14 //
15 // The above copyright notice and this permission notice shall be included in all
16 // copies or substantial portions of the Software.
17 //
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24 // SOFTWARE.
25 
26 #pragma once
27 
30 #include <QList>
31 #include <QMap>
32 #include <QWidget>
33 
34 class QFrame;
35 class QHBoxLayout;
36 class QPushButton;
37 class QScrollArea;
38 class QVBoxLayout;
39 class QScrollBar;
40 class QTextEdit;
41 
42 namespace hal
43 {
44  class ExpandingListButton;
45  class ExpandingListWidget;
46  class SettingsDisplay;
47  class SettingsWidget;
48  class SettingsItem;
49  class Searchbar;
50 
58  class MainSettingsList : public QList<SettingsWidget*>
59  {
61  public:
66 
73  void registerWidget(const QString& sectionName, SettingsWidget* widget);
74 
80  void unregisterWidget(SettingsWidget* widget);
81 
88  QList<SettingsWidget*> section(const QString& s) const { return mSectionMap.value(s); }
89 
96 
101  QStringList emptySections() const;
102 
106  void clearAll();
107  };
108 
117  {
118  Q_OBJECT
119 
120  public:
126  explicit MainSettingsWidget(QWidget* parent = nullptr);
127 
133  bool handleAboutToClose();
134 
138  void activate();
139 
143  void showAllSettings();
144 
145  Q_SIGNALS:
149  void close();
150 
151  public Q_SLOTS:
152 
157 
161  void handleCancelClicked();
162 
166  void handleOkClicked();
167 
175 
182  void handleDescriptionUpdate(SettingsItem* activeSettingsItem);
183 
189  void handleWidgetRemove(SettingsWidget* widget);
190 
196  void searchSettings(const QString& needle, SearchOptions searchOpts);
197  bool isMatching(QString searchString, QString stringToCheck);
198 
199  private:
200  void initWidgets();
201  void makeSection(const QString& label);
202  void hideAllSettings();
203  bool saveSettings();
204 
205  QHBoxLayout* mLayout;
206  ExpandingListWidget* mExpandingListWidget;
207  QVBoxLayout* mVerticalLayout;
208  QScrollBar* mScrollbar;
209 
210  QFrame* mSearchbarContainer;
211  QHBoxLayout* mSearchbarLayout;
212  Searchbar* mSearchbar;
213  SearchOptions mSearchOptions;
214 
215  QScrollArea* mScrollArea;
216  QFrame* mContent;
217  QHBoxLayout* mContentLayout;
218  QFrame* mSettingsContainer;
219  QVBoxLayout* mContainerLayout;
220 
221  QHBoxLayout* mButtonLayout;
222  QTextEdit* mDescriptionText;
223 
224  QPushButton* mRestoreDefaults;
225  QPushButton* mCancel;
226  QPushButton* mOk;
227 
229  QString mActiveSection;
230 
231  MainSettingsList mSettingsList;
232 
233  bool mResetToFirstElement;
234  };
235 }
One button of the ExpandingListWidget.
A selection menu with a hierarchic structure.
List that contains all SettingsWidgets.
QList< SettingsWidget * > section(const QString &s) const
void registerWidget(const QString &sectionName, SettingsWidget *widget)
QList< const SettingsItem * > getItems() const
QStringList emptySections() const
void unregisterWidget(SettingsWidget *widget)
The top-level widget that displays all settings.
MainSettingsWidget(QWidget *parent=nullptr)
void searchSettings(const QString &needle, SearchOptions searchOpts)
void handleButtonSelected(ExpandingListButton *button)
void handleDescriptionUpdate(SettingsItem *activeSettingsItem)
bool isMatching(QString searchString, QString stringToCheck)
void handleWidgetRemove(SettingsWidget *widget)
A QFrame with a QLineEdit that can be used to input a substring to search for.
Definition: searchbar.h:48
The interface for the logical part of a setting.
Definition: settings_item.h:46
The base class for all specific SettingsWidgets.
const T value(const Key &key, const T &defaultValue) const const
Q_OBJECTQ_OBJECT
Q_SIGNALSQ_SIGNALS
Q_SLOTSQ_SLOTS
QObject * parent() const const