17 #include <QHBoxLayout>
18 #include <QHeaderView>
19 #include <QMessageBox>
20 #include <QPushButton>
21 #include <QScrollArea>
23 #include <QVBoxLayout>
37 mSectionMap[sectionName].append(widget);
56 for (
auto it = mSectionMap.begin(); it != mSectionMap.end(); ++it)
58 auto jt = it->begin();
59 while (jt != it->end())
76 for (
auto it = mSectionMap.constBegin(); it != mSectionMap.constEnd(); ++it)
77 if (it.value().isEmpty())
90 mSearchbarContainer =
new QFrame(
this);
92 mSearchbar =
new Searchbar(mSearchbarContainer);
100 mLayout->
addWidget(mExpandingListWidget);
106 mVerticalLayout->
addWidget(mSearchbarContainer);
109 mSearchbarContainer->
setLayout(mSearchbarLayout);
133 mSettingsContainer->
setLayout(mContainerLayout);
135 mContentLayout->
addWidget(mSettingsContainer);
142 mVerticalLayout->
addWidget(mDescriptionText);
144 mVerticalLayout->
addLayout(mButtonLayout);
146 mRestoreDefaults->
setText(
"Restore default values for all settings");
147 mRestoreDefaults->
setToolTip(
"Clear user preferences for this page");
170 void MainSettingsWidget::initWidgets()
181 if (catg.
isEmpty()) catg =
"Other";
182 if (!registeredCategories.
contains(catg))
185 registeredCategories.
insert(catg);
188 SettingsWidget* widget = si->editWidget();
192 registeredItems.
insert(si);
197 for (ExpandingListButton* btn : mSectionNames.keys())
201 for (
auto it = mSectionNames.begin(); it!= mSectionNames.end(); ++it)
202 if (it.value() == sectionName)
207 void MainSettingsWidget::makeSection(
const QString& label)
209 int colon = label.
indexOf(
':');
217 topLabel = label.
left(colon);
218 subLabel = label.
mid(colon+1);
219 if (!mExpandingListWidget->
hasGroup(topLabel))
221 ExpandingListButton* topBtn =
new ExpandingListButton(0);
222 topBtn->setObjectName(topLabel);
223 topBtn->setText(topLabel);
224 topBtn->setDefaultIcon(topLabel);
226 mSectionNames.insert(topBtn,topLabel);
230 ExpandingListButton* btn =
new ExpandingListButton(level);
231 btn->setObjectName(subLabel);
232 btn->setText(subLabel);
233 btn->setDefaultIcon(subLabel);
235 mExpandingListWidget->
appendItem(btn,topLabel);
236 mSectionNames.insert(btn, label);
262 return saveSettings();
273 widget->handleSetDefaultValue(
true);
300 widget->loadCurrentValue();
306 if (!activeSettingsItem)
308 mDescriptionText->
clear();
311 QString html =
QString(
"<html><body><h3>%1</h3><p>%2</p></body></html>")
313 mDescriptionText->
setHtml(html);
318 mResetToFirstElement =
false;
319 mResetToFirstElement =
true;
326 QString sectionName = mSectionNames.value(button);
327 mActiveSection = sectionName;
337 void MainSettingsWidget::hideAllSettings()
346 but->setSelected(
false);
353 mSearchOptions = searchOpts;
354 mActiveSection.
clear();
355 if (mExpandingListWidget)
358 but->setSelected(
false);
363 mActiveSection = widget->settingsItem()->label();
370 bool MainSettingsWidget::saveSettings()
372 bool changed =
false;
378 widget->acceptValue();
402 return regEx.match(stringToCheck).hasMatch();
static AssignedKeybindMap * instance()
QList< SettingsWidget * > section(const QString &s) const
void registerWidget(const QString §ionName, SettingsWidget *widget)
QList< const SettingsItem * > getItems() const
QStringList emptySections() const
void unregisterWidget(SettingsWidget *widget)
void handleCancelClicked()
MainSettingsWidget(QWidget *parent=nullptr)
bool handleAboutToClose()
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)
void handleRestoreDefaultsClicked()
bool isExactMatch() const
bool isCaseSensitive() const
bool isRegularExpression() const
A QFrame with a QLineEdit that can be used to input a substring to search for.
void triggerNewSearch(const QString &text, int searchOptions)
The interface for the logical part of a setting.
virtual QString label() const
virtual QString description() const
void persistUserSettings()
static SettingsManager * instance()
void setText(const QString &text)
void addLayout(QLayout *layout, int stretch)
void setSpacing(int spacing)
void setFrameStyle(int style)
bool setAlignment(QWidget *w, Qt::Alignment alignment)
void setContentsMargins(int left, int top, int right, int bottom)
void append(const T &value)
int removeAll(const T &value)
QMessageBox::StandardButton question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons, QMessageBox::StandardButton defaultButton)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void setObjectName(const QString &name)
bool contains(const T &value) const const
QSet< T > fromList(const QList< T > &list)
QSet::iterator insert(const T &value)
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
int compare(const QString &other, Qt::CaseSensitivity cs) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
QString left(int n) const const
QString mid(int position, int n) const const
void setHtml(const QString &text)