Mercurial > minori
annotate src/gui/dialog/settings/application.cc @ 393:963047512d34
*: clang-format
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 07 Nov 2025 07:16:15 -0500 |
| parents | b1f4d1867ab1 |
| children | 2f4dc1580b84 |
| rev | line source |
|---|---|
| 10 | 1 #include "core/session.h" |
| 108 | 2 #include "core/strings.h" |
| 10 | 3 #include "gui/dialog/settings.h" |
| 258 | 4 #include "gui/locale.h" |
| 102 | 5 #include "gui/theme.h" |
| 189 | 6 #include "gui/translate/anime.h" |
| 279 | 7 #include "gui/translate/config.h" |
| 189 | 8 |
| 10 | 9 #include <QCheckBox> |
| 10 #include <QComboBox> | |
| 11 #include <QGroupBox> | |
|
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
62
diff
changeset
|
12 #include <QHBoxLayout> |
|
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
62
diff
changeset
|
13 #include <QLabel> |
| 10 | 14 #include <QPushButton> |
| 15 #include <QSizePolicy> | |
|
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
62
diff
changeset
|
16 #include <QVBoxLayout> |
| 189 | 17 |
| 393 | 18 QWidget *SettingsPageApplication::CreateAnimeListWidget() |
| 19 { | |
| 20 QWidget *result = new QWidget(this); | |
| 10 | 21 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 22 | |
| 393 | 23 QVBoxLayout *full_layout = new QVBoxLayout(result); |
| 10 | 24 |
| 108 | 25 { |
| 26 /* Actions */ | |
| 393 | 27 QGroupBox *actions_group_box = new QGroupBox(tr("Actions"), result); |
| 108 | 28 actions_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 29 | |
| 393 | 30 QHBoxLayout *actions_layout = new QHBoxLayout(actions_group_box); |
| 10 | 31 |
| 108 | 32 { |
| 33 /* Actions/Double click */ | |
| 393 | 34 QWidget *double_click_widget = new QWidget(actions_group_box); |
| 35 QLabel *dc_combo_box_label = new QLabel(tr("Double click:"), double_click_widget); | |
| 36 QComboBox *dc_combo_box = new QComboBox(double_click_widget); | |
| 108 | 37 dc_combo_box->addItem(tr("View anime info")); |
| 10 | 38 |
| 393 | 39 QVBoxLayout *double_click_layout = new QVBoxLayout(double_click_widget); |
| 108 | 40 double_click_layout->addWidget(dc_combo_box_label); |
| 41 double_click_layout->addWidget(dc_combo_box); | |
| 42 double_click_layout->setContentsMargins(0, 0, 0, 0); | |
| 43 | |
| 44 actions_layout->addWidget(double_click_widget); | |
| 45 } | |
| 46 | |
| 47 { | |
| 48 /* Actions/Middle click */ | |
| 393 | 49 QWidget *middle_click_widget = new QWidget(actions_group_box); |
| 50 QLabel *mc_combo_box_label = new QLabel(tr("Middle click:"), middle_click_widget); | |
| 51 QComboBox *mc_combo_box = new QComboBox(middle_click_widget); | |
| 108 | 52 mc_combo_box->addItem(tr("Play next episode")); |
| 10 | 53 |
| 393 | 54 QVBoxLayout *middle_click_layout = new QVBoxLayout(middle_click_widget); |
| 108 | 55 middle_click_layout->addWidget(mc_combo_box_label); |
| 56 middle_click_layout->addWidget(mc_combo_box); | |
| 57 middle_click_layout->setContentsMargins(0, 0, 0, 0); | |
| 258 | 58 |
| 108 | 59 actions_layout->addWidget(middle_click_widget); |
| 60 } | |
| 10 | 61 |
| 108 | 62 full_layout->addWidget(actions_group_box); |
| 63 } | |
| 64 | |
| 65 { | |
| 66 /* Appearance */ | |
| 393 | 67 QGroupBox *appearance_group_box = new QGroupBox(tr("Appearance"), result); |
| 108 | 68 appearance_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 69 | |
| 393 | 70 QVBoxLayout *appearance_layout = new QVBoxLayout(appearance_group_box); |
| 10 | 71 |
| 108 | 72 { |
| 73 /* Title language */ | |
| 74 { | |
| 393 | 75 QLabel *lang_combo_box_label = new QLabel(tr("Title language preference:"), appearance_group_box); |
| 108 | 76 appearance_layout->addWidget(lang_combo_box_label); |
| 77 } | |
| 78 { | |
| 393 | 79 QComboBox *lang_combo_box = new QComboBox(appearance_group_box); |
| 108 | 80 lang_combo_box->addItem(tr("Romaji")); |
| 81 lang_combo_box->addItem(tr("Native")); | |
| 82 lang_combo_box->addItem(tr("English")); | |
| 83 connect(lang_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this, | |
| 84 [this](int index) { language = static_cast<Anime::TitleLanguage>(index); }); | |
| 85 lang_combo_box->setCurrentIndex(static_cast<int>(language)); | |
| 86 appearance_layout->addWidget(lang_combo_box); | |
| 87 } | |
| 88 } | |
| 10 | 89 |
| 108 | 90 { |
| 91 /* Application theme */ | |
| 92 { | |
| 393 | 93 QLabel *rating_combo_box_label = new QLabel(tr("Rating system:"), appearance_group_box); |
| 189 | 94 appearance_layout->addWidget(rating_combo_box_label); |
|
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
95 } |
|
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
96 |
|
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
97 { |
| 393 | 98 QComboBox *rating_combo_box = new QComboBox(appearance_group_box); |
| 189 | 99 |
| 393 | 100 for (const auto &score_format : Anime::ScoreFormats) |
| 258 | 101 rating_combo_box->addItem(Strings::ToQString(Translate::ToLocalString(score_format)), |
| 102 static_cast<int>(score_format)); | |
| 189 | 103 |
| 104 connect(rating_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this, | |
| 258 | 105 [this, rating_combo_box](int index) { |
| 106 format = static_cast<Anime::ScoreFormat>(rating_combo_box->itemData(index).toInt()); | |
| 107 }); | |
| 189 | 108 |
| 109 rating_combo_box->setCurrentIndex(static_cast<int>(format)); | |
| 110 appearance_layout->addWidget(rating_combo_box); | |
|
187
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
111 } |
|
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
112 } |
|
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
113 |
|
9613d72b097e
*: multiple performance improvements
Paper <mrpapersonic@gmail.com>
parents:
112
diff
changeset
|
114 { |
|
317
b1f4d1867ab1
services: VERY initial Kitsu support
Paper <paper@paper.us.eu.org>
parents:
279
diff
changeset
|
115 /* Hopefully I made this easy to read... */ |
| 393 | 116 QCheckBox *hl_above_anime_box = |
| 258 | 117 new QCheckBox(tr("Display highlighted anime above others"), appearance_group_box); |
| 108 | 118 hl_above_anime_box->setCheckState(highlighted_anime_above_others ? Qt::Checked : Qt::Unchecked); |
| 119 hl_above_anime_box->setEnabled(highlight_anime_if_available); | |
| 120 hl_above_anime_box->setContentsMargins(10, 0, 0, 0); | |
| 121 | |
| 122 connect(hl_above_anime_box, &QCheckBox::stateChanged, this, | |
| 123 [this](int state) { highlight_anime_if_available = !(state == Qt::Unchecked); }); | |
| 10 | 124 |
| 108 | 125 { |
| 126 /* This is here because the above checkbox actually depends on it to be checked. */ | |
| 393 | 127 QCheckBox *hl_anime_box = new QCheckBox( |
| 258 | 128 tr("Highlight anime if next episode is available in library folders"), appearance_group_box); |
| 108 | 129 hl_anime_box->setCheckState(highlight_anime_if_available ? Qt::Checked : Qt::Unchecked); |
| 10 | 130 |
| 108 | 131 connect(hl_anime_box, &QCheckBox::stateChanged, this, [this, hl_above_anime_box](int state) { |
| 132 highlight_anime_if_available = !(state == Qt::Unchecked); | |
| 133 hl_above_anime_box->setEnabled(state); | |
| 134 }); | |
| 135 | |
| 136 appearance_layout->addWidget(hl_anime_box); | |
| 137 } | |
| 138 | |
| 139 appearance_layout->addWidget(hl_above_anime_box); | |
| 140 } | |
| 141 | |
| 142 full_layout->addWidget(appearance_group_box); | |
| 143 } | |
| 10 | 144 |
| 108 | 145 { |
| 146 /* Progress */ | |
| 393 | 147 QGroupBox *progress_group_box = new QGroupBox(tr("Progress"), result); |
| 108 | 148 progress_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
| 149 | |
| 393 | 150 QVBoxLayout *progress_layout = new QVBoxLayout(progress_group_box); |
| 10 | 151 |
| 108 | 152 { |
| 393 | 153 QCheckBox *progress_display_aired_episodes = |
| 108 | 154 new QCheckBox(tr("Display aired episodes (estimated)"), progress_group_box); |
| 155 connect(progress_display_aired_episodes, &QCheckBox::stateChanged, this, | |
| 156 [this](int state) { display_aired_episodes = !(state == Qt::Unchecked); }); | |
| 157 progress_display_aired_episodes->setCheckState(display_aired_episodes ? Qt::Checked : Qt::Unchecked); | |
| 158 progress_layout->addWidget(progress_display_aired_episodes); | |
| 159 } | |
| 160 { | |
| 393 | 161 QCheckBox *progress_display_available_episodes = |
| 108 | 162 new QCheckBox(tr("Display available episodes in library folders"), progress_group_box); |
| 163 connect(progress_display_available_episodes, &QCheckBox::stateChanged, this, | |
| 164 [this](int state) { display_available_episodes = !(state == Qt::Unchecked); }); | |
| 258 | 165 progress_display_available_episodes->setCheckState(display_available_episodes ? Qt::Checked |
| 166 : Qt::Unchecked); | |
| 108 | 167 progress_layout->addWidget(progress_display_available_episodes); |
| 168 } | |
| 10 | 169 |
| 108 | 170 full_layout->addWidget(progress_group_box); |
| 171 } | |
| 10 | 172 |
| 173 full_layout->setSpacing(10); | |
| 174 full_layout->addStretch(); | |
|
68
2417121d894e
*: normalize usage of layouts
Paper <mrpapersonic@gmail.com>
parents:
62
diff
changeset
|
175 |
| 10 | 176 return result; |
| 177 } | |
| 178 | |
| 393 | 179 QWidget *SettingsPageApplication::CreateGeneralWidget() |
| 180 { | |
| 181 QWidget *result = new QWidget(this); | |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
182 result->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
183 |
| 393 | 184 QVBoxLayout *full_layout = new QVBoxLayout(result); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
185 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
186 { |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
187 /* Appearance */ |
| 393 | 188 QGroupBox *appearance_group_box = new QGroupBox(tr("Appearance"), result); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
189 appearance_group_box->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
190 |
| 393 | 191 QVBoxLayout *appearance_layout = new QVBoxLayout(appearance_group_box); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
192 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
193 { |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
194 /* Application theme */ |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
195 { |
| 393 | 196 QLabel *theme_combo_box_label = new QLabel(tr("Application theme:"), appearance_group_box); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
197 appearance_layout->addWidget(theme_combo_box_label); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
198 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
199 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
200 { |
| 279 | 201 /* FIXME: don't hardcode these values */ |
| 393 | 202 QComboBox *theme_combo_box = new QComboBox(appearance_group_box); |
| 203 for (const auto &theme : Theme::Themes) | |
| 279 | 204 theme_combo_box->addItem(Strings::ToQString(Translate::ToLocalString(theme))); |
| 205 | |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
206 connect(theme_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this, |
| 279 | 207 [this](int index) { theme = static_cast<Theme::Theme>(index); }); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
208 theme_combo_box->setCurrentIndex(static_cast<int>(theme)); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
209 appearance_layout->addWidget(theme_combo_box); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
210 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
211 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
212 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
213 { |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
214 /* Application locale */ |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
215 { |
| 393 | 216 QLabel *locale_combo_box_label = new QLabel(tr("Application locale:"), appearance_group_box); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
217 appearance_layout->addWidget(locale_combo_box_label); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
218 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
219 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
220 { |
| 393 | 221 QComboBox *locale_combo_box = new QComboBox(appearance_group_box); |
| 222 const auto &available_locales = session.config.locale.GetAvailableLocales(); | |
| 223 for (const auto &l : available_locales) | |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
224 locale_combo_box->addItem(Strings::ToQString(Locale::GetLocaleFullName(l)), l); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
225 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
226 connect(locale_combo_box, QOverload<int>::of(&QComboBox::currentIndexChanged), this, |
| 258 | 227 [this, locale_combo_box](int) { locale = locale_combo_box->currentData().toLocale(); }); |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
228 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
229 for (size_t i = 0; i < available_locales.size(); i++) |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
230 if (available_locales[i] == locale) |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
231 locale_combo_box->setCurrentIndex(i); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
232 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
233 appearance_layout->addWidget(locale_combo_box); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
234 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
235 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
236 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
237 full_layout->addWidget(appearance_group_box); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
238 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
239 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
240 full_layout->setSpacing(10); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
241 full_layout->addStretch(); |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
242 |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
243 return result; |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
244 } |
|
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
245 |
| 393 | 246 void SettingsPageApplication::SaveInfo() |
| 247 { | |
| 10 | 248 session.config.anime_list.language = language; |
| 249 session.config.anime_list.highlighted_anime_above_others = highlighted_anime_above_others; | |
| 250 session.config.anime_list.highlight_anime_if_available = highlight_anime_if_available; | |
| 251 session.config.anime_list.display_aired_episodes = display_aired_episodes; | |
| 252 session.config.anime_list.display_available_episodes = display_available_episodes; | |
| 102 | 253 session.config.theme.SetTheme(theme); |
| 108 | 254 session.config.locale.SetActiveLocale(locale); |
| 10 | 255 } |
| 256 | |
| 393 | 257 SettingsPageApplication::SettingsPageApplication(QWidget *parent) : SettingsPage(parent, tr("Application")) |
| 258 { | |
| 10 | 259 language = session.config.anime_list.language; |
| 189 | 260 format = session.config.anime_list.score_format; |
| 102 | 261 theme = session.config.theme.GetTheme(); |
| 108 | 262 locale = session.config.locale.GetLocale(); |
| 10 | 263 highlighted_anime_above_others = session.config.anime_list.highlighted_anime_above_others; |
| 264 highlight_anime_if_available = session.config.anime_list.highlight_anime_if_available; | |
| 265 display_aired_episodes = session.config.anime_list.display_aired_episodes; | |
| 266 display_available_episodes = session.config.anime_list.display_available_episodes; | |
|
195
975a3f0965e2
locale: only attempt loading locales after QApplication is init'd
Paper <mrpapersonic@gmail.com>
parents:
189
diff
changeset
|
267 AddTab(CreateGeneralWidget(), tr("General")); |
| 10 | 268 AddTab(CreateAnimeListWidget(), tr("Anime list")); |
| 269 } |
