settings: Add SettingsCategory class

Add a new category class for settings. This will eventually allow
category classes to maintain their own lists of subpages.
This commit is contained in:
Jim Broadus 2021-03-21 23:19:19 -07:00 committed by John Maguire
parent fdb3f7ac37
commit 6b34d0435f
5 changed files with 75 additions and 15 deletions

View File

@ -363,6 +363,7 @@ set(SOURCES
ui/playbacksettingspage.cpp
ui/qtsystemtrayicon.cpp
ui/screensaver.cpp
ui/settingscategory.cpp
ui/settingsdialog.cpp
ui/settingspage.cpp
ui/splash.cpp
@ -659,6 +660,7 @@ set(HEADERS
ui/organiseerrordialog.h
ui/playbacksettingspage.h
ui/qtsystemtrayicon.h
ui/settingscategory.h
ui/settingsdialog.h
ui/settingspage.h
ui/standarditemiconloader.h

View File

@ -0,0 +1,25 @@
/* This file is part of Clementine.
Copyright 2021, Jim Broadus <jbroadus@gmail.com>
Clementine is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Clementine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
*/
#include "settingscategory.h"
SettingsCategory::SettingsCategory(const QString& name, SettingsDialog* dialog)
: dialog_(dialog) {
setText(0, name);
setData(0, SettingsDialog::Role_IsSeparator, true);
setFlags(Qt::ItemIsEnabled);
}

33
src/ui/settingscategory.h Normal file
View File

@ -0,0 +1,33 @@
/* This file is part of Clementine.
Copyright 2021, Jim Broadus <jbroadus@gmail.com>
Clementine is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Clementine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Clementine. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef SETTINGSCATEGORY_H
#define SETTINGSCATEGORY_H
#include <QTreeWidgetItem>
#include "settingsdialog.h"
class SettingsCategory : public QTreeWidgetItem {
public:
SettingsCategory(const QString& name, SettingsDialog* dialog);
protected:
SettingsDialog* dialog_;
};
#endif // SETTINGSCATEGORY_H

View File

@ -44,6 +44,7 @@
#include "notificationssettingspage.h"
#include "playbacksettingspage.h"
#include "playlist/playlistview.h"
#include "settingscategory.h"
#include "songinfo/songinfosettingspage.h"
#include "transcoder/transcodersettingspage.h"
#include "ui_settingsdialog.h"
@ -134,8 +135,8 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams,
ui_->setupUi(this);
ui_->list->setItemDelegate(new SettingsItemDelegate(this));
QTreeWidgetItem* general = AddCategory(tr("General"));
SettingsCategory* general = new SettingsCategory(tr("General"), this);
AddCategory(general);
AddPage(Page_Playback, new PlaybackSettingsPage(this), general);
AddPage(Page_Behaviour, new BehaviourSettingsPage(this), general);
AddPage(Page_Library, new LibrarySettingsPage(this), general);
@ -153,7 +154,8 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams,
#endif
// User interface
QTreeWidgetItem* iface = AddCategory(tr("User interface"));
SettingsCategory* iface = new SettingsCategory(tr("User interface"), this);
AddCategory(iface);
AddPage(Page_GlobalShortcuts, new GlobalShortcutsSettingsPage(this), iface);
AddPage(Page_GlobalSearch, new GlobalSearchSettingsPage(this), iface);
AddPage(Page_Appearance, new AppearanceSettingsPage(this), iface);
@ -169,7 +171,9 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams,
AddPage(Page_InternetShow, new InternetShowSettingsPage(this), iface);
// Internet providers
QTreeWidgetItem* providers = AddCategory(tr("Internet providers"));
SettingsCategory* providers =
new SettingsCategory(tr("Internet providers"), this);
AddCategory(providers);
#ifdef HAVE_LIBLASTFM
AddPage(Page_Lastfm, new LastFMSettingsPage(this), providers);
@ -228,16 +232,10 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams,
SettingsDialog::~SettingsDialog() { delete ui_; }
QTreeWidgetItem* SettingsDialog::AddCategory(const QString& name) {
QTreeWidgetItem* item = new QTreeWidgetItem;
item->setText(0, name);
item->setData(0, Role_IsSeparator, true);
item->setFlags(Qt::ItemIsEnabled);
ui_->list->invisibleRootItem()->addChild(item);
item->setExpanded(true);
return item;
void SettingsDialog::AddCategory(SettingsCategory* category) {
ui_->list->invisibleRootItem()->addChild(category);
// This must not be called before it's added to the parent.
category->setExpanded(true);
}
void SettingsDialog::AddPage(Page id, SettingsPage* page,

View File

@ -49,6 +49,8 @@ class SettingsItemDelegate : public QStyledItemDelegate {
const QModelIndex& index) const;
};
class SettingsCategory;
class SettingsDialog : public QDialog {
Q_OBJECT
@ -131,7 +133,7 @@ class SettingsDialog : public QDialog {
SettingsPage* page_;
};
QTreeWidgetItem* AddCategory(const QString& name);
void AddCategory(SettingsCategory* category);
void AddPage(Page id, SettingsPage* page, QTreeWidgetItem* parent = nullptr);
private: