Mercurial > minori
annotate src/gui/dialog/settings.cc @ 187:9613d72b097e
*: multiple performance improvements
like marking `static const` when it makes sense...
date: change old stupid heap-based method to a structure which should
make copying the thing actually make a copy.
also many performance-based changes, like removing the std::tie
dependency and forward-declaring nlohmann json
*: replace every instance of QString::fromUtf8 to Strings::ToQString.
the main difference is that our function will always convert exactly
what is in the string, while some other times it would only convert
up to the nearest NUL byte
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Wed, 06 Dec 2023 13:43:54 -0500 |
parents | 4eae379cb1ff |
children | f784b5b1914c |
rev | line source |
---|---|
9 | 1 #include "gui/dialog/settings.h" |
108 | 2 #include "core/session.h" |
46 | 3 #include "gui/widgets/sidebar.h" |
4 #include "gui/widgets/text.h" | |
9 | 5 #include <QDialogButtonBox> |
76 | 6 #include <QHBoxLayout> |
7 #include <QLabel> | |
9 | 8 #include <QStackedWidget> |
9 #include <QVBoxLayout> | |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
10 #include <QWidget> |
108 | 11 #ifdef WIN32 |
12 #include "sys/win32/dark_theme.h" | |
13 #endif | |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
14 |
9 | 15 SettingsPage::SettingsPage(QWidget* parent, QString title) : QWidget(parent) { |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
16 setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
17 page_title = new QLabel(title, this); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
18 page_title->setWordWrap(false); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
19 page_title->setFrameShape(QFrame::Panel); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
20 page_title->setFrameShadow(QFrame::Sunken); |
36 | 21 |
22 QFont font(page_title->font()); | |
77 | 23 font.setPixelSize(12); |
36 | 24 font.setWeight(QFont::Bold); |
25 page_title->setFont(font); | |
26 | |
102 | 27 { |
28 QPalette pal = page_title->palette(); | |
29 pal.setColor(QPalette::Window, QColor(0xAB, 0xAB, 0xAB)); | |
30 pal.setColor(QPalette::WindowText, Qt::white); | |
31 page_title->setPalette(pal); | |
32 } | |
118
39521c47c7a3
*: another huge megacommit, SORRY
Paper <mrpapersonic@gmail.com>
parents:
116
diff
changeset
|
33 |
46 | 34 page_title->setAutoFillBackground(true); |
36 | 35 |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
36 page_title->setFixedHeight(23); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
37 page_title->setAlignment(Qt::AlignVCenter | Qt::AlignLeft); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
38 page_title->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); |
46 | 39 |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
40 tab_widget = new QTabWidget(this); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
41 tab_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
42 |
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
64
diff
changeset
|
43 QVBoxLayout* layout = new QVBoxLayout(this); |
62 | 44 layout->setContentsMargins(0, 0, 0, 0); |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
45 layout->addWidget(page_title); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
46 layout->addWidget(tab_widget); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
47 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
48 |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
49 void SettingsPage::SetTitle(QString title) { |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
50 page_title->setText(title); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
51 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
52 |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
53 void SettingsPage::AddTab(QWidget* tab, QString title) { |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
54 tab_widget->addTab(tab, title); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
55 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
56 |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
57 void SettingsPage::SaveInfo() { |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
58 // no-op... child classes will implement this |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
59 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
60 |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
61 void SettingsDialog::OnOK() { |
7 | 62 for (int i = 0; i < stacked->count(); i++) { |
64 | 63 reinterpret_cast<SettingsPage*>(stacked->widget(i))->SaveInfo(); |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
64 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
65 QDialog::accept(); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
66 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
67 |
108 | 68 void SettingsDialog::showEvent(QShowEvent* event) { |
69 QDialog::showEvent(event); | |
70 #ifdef WIN32 | |
71 win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); | |
72 #endif | |
73 } | |
74 | |
9 | 75 SettingsDialog::SettingsDialog(QWidget* parent) : QDialog(parent) { |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
76 setFixedSize(755, 566); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
77 setWindowTitle(tr("Settings")); |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
78 setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); |
108 | 79 |
80 QVBoxLayout* full_layout = new QVBoxLayout(this); | |
81 | |
82 { | |
83 QWidget* widget = new QWidget(this); | |
84 widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); | |
85 QHBoxLayout* layout = new QHBoxLayout(widget); | |
86 | |
87 { | |
88 sidebar = new SideBar(widget); | |
36 | 89 |
108 | 90 sidebar->setCurrentItem(sidebar->AddItem(tr("Services"), SideBar::CreateIcon(":/icons/24x24/globe.png"))); |
91 // sidebar->AddItem(tr("Library"), SideBar::CreateIcon(":/icons/24x24/inbox-film.png")); | |
92 sidebar->AddItem(tr("Application"), SideBar::CreateIcon(":/icons/24x24/application-sidebar-list.png")); | |
119
4eae379cb1ff
settings: add a very early recognition tab for configuring players and extensions
Paper <mrpapersonic@gmail.com>
parents:
118
diff
changeset
|
93 sidebar->AddItem(tr("Recognition"), SideBar::CreateIcon(":/icons/24x24/question.png")); |
108 | 94 // sidebar->AddItem(tr("Sharing"), SideBar::CreateIcon(":/icons/24x24/megaphone.png")); |
116
254b1d2b7096
settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents:
108
diff
changeset
|
95 sidebar->AddItem(tr("Torrents"), SideBar::CreateIcon(":/icons/24x24/feed.png")); |
108 | 96 // sidebar->AddItem(tr("Advanced"), SideBar::CreateIcon(":/icons/24x24/gear.png")); |
36 | 97 |
108 | 98 sidebar->setIconSize(QSize(24, 24)); |
99 sidebar->setFrameShape(QFrame::Box); | |
100 | |
101 QPalette pal(sidebar->palette()); | |
102 sidebar->SetBackgroundColor(pal.color(QPalette::Base)); | |
9 | 103 |
108 | 104 sidebar->setFixedWidth(158); |
105 sidebar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); | |
106 layout->addWidget(sidebar); | |
107 } | |
7 | 108 |
108 | 109 { |
110 stacked = new QStackedWidget(widget); | |
111 stacked->addWidget(new SettingsPageServices(stacked)); | |
112 stacked->addWidget(new SettingsPageApplication(stacked)); | |
119
4eae379cb1ff
settings: add a very early recognition tab for configuring players and extensions
Paper <mrpapersonic@gmail.com>
parents:
118
diff
changeset
|
113 stacked->addWidget(new SettingsPageRecognition(stacked)); |
116
254b1d2b7096
settings: add torrents page, make rss feed configurable
Paper <mrpapersonic@gmail.com>
parents:
108
diff
changeset
|
114 stacked->addWidget(new SettingsPageTorrents(stacked)); |
108 | 115 stacked->setCurrentIndex(0); |
116 | |
117 connect(sidebar, &QListWidget::currentRowChanged, stacked, &QStackedWidget::setCurrentIndex); | |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
118 |
108 | 119 layout->addWidget(stacked); |
120 } | |
121 | |
122 layout->setContentsMargins(0, 0, 0, 0); | |
123 full_layout->addWidget(widget); | |
124 } | |
9 | 125 |
108 | 126 { |
127 QDialogButtonBox* button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); | |
128 connect(button_box, &QDialogButtonBox::accepted, this, &SettingsDialog::OnOK); | |
129 connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject); | |
130 full_layout->addWidget(button_box); | |
131 } | |
6
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
132 } |
1d82f6e04d7d
Update: add first parts to the settings dialog
Paper <mrpapersonic@gmail.com>
parents:
diff
changeset
|
133 |
9 | 134 #include "gui/dialog/moc_settings.cpp" |