Mercurial > minori
comparison src/gui/window.cpp @ 46:d0adc4aedfc8
*: update...
this commit:
1. consolidates dark theme stuff to dark_theme.cpp
2. creates a new widgets folder to store all of our
custom widgets
3. creates the list settings page in the information
dialog, although much of it is nonfunctional: it
doesn't save, and the status doesn't even get filled
in... we'll fix this later!
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Sat, 23 Sep 2023 01:02:15 -0400 |
| parents | 619cbd6e69f9 |
| children | e613772f41d5 |
comparison
equal
deleted
inserted
replaced
| 45:4b05bc7668eb | 46:d0adc4aedfc8 |
|---|---|
| 1 #include "gui/window.h" | 1 #include "gui/window.h" |
| 2 #include "core/config.h" | 2 #include "core/config.h" |
| 3 #include "core/session.h" | 3 #include "core/session.h" |
| 4 #include "gui/dark_theme.h" | |
| 4 #include "gui/dialog/settings.h" | 5 #include "gui/dialog/settings.h" |
| 5 #include "gui/pages/anime_list.h" | 6 #include "gui/pages/anime_list.h" |
| 6 #include "gui/pages/now_playing.h" | 7 #include "gui/pages/now_playing.h" |
| 7 #include "gui/pages/statistics.h" | 8 #include "gui/pages/statistics.h" |
| 8 #include "gui/sidebar.h" | 9 #include "gui/widgets/sidebar.h" |
| 9 #include "gui/ui_utils.h" | |
| 10 #include "services/services.h" | 10 #include "services/services.h" |
| 11 #include <QApplication> | 11 #include <QApplication> |
| 12 #include <QFile> | 12 #include <QFile> |
| 13 #include <QMainWindow> | 13 #include <QMainWindow> |
| 14 #include <QMenuBar> | 14 #include <QMenuBar> |
| 15 #include <QPlainTextEdit> | 15 #include <QPlainTextEdit> |
| 16 #include <QStackedWidget> | 16 #include <QStackedWidget> |
| 17 #include <QTextStream> | 17 #include <QTextStream> |
| 18 #if MACOSX | 18 #if MACOSX |
| 19 # include "sys/osx/dark_theme.h" | 19 # include "sys/osx/dark_theme.h" |
| 20 #elif WIN32 | 20 #elif defined(WIN32) |
| 21 # include "sys/win32/dark_theme.h" | 21 # include "sys/win32/dark_theme.h" |
| 22 #endif | 22 #endif |
| 23 | 23 |
| 24 enum class Pages { | 24 enum class Pages { |
| 25 NOW_PLAYING, | 25 NOW_PLAYING, |
| 155 default: break; | 155 default: break; |
| 156 } | 156 } |
| 157 }); | 157 }); |
| 158 | 158 |
| 159 menu = menubar->addMenu("&Help"); | 159 menu = menubar->addMenu("&Help"); |
| 160 action = menu->addAction("About &Qt", qApp, [this]{ | 160 action = menu->addAction("About &Qt", qApp, [this] { qApp->aboutQt(); }); |
| 161 qApp->aboutQt(); | |
| 162 }); | |
| 163 action->setMenuRole(QAction::AboutQtRole); | 161 action->setMenuRole(QAction::AboutQtRole); |
| 164 | 162 |
| 165 setMenuBar(menubar); | 163 setMenuBar(menubar); |
| 166 | 164 |
| 167 QHBoxLayout* layout = new QHBoxLayout(main_widget); | 165 QHBoxLayout* layout = new QHBoxLayout(main_widget); |
| 168 layout->addWidget(sidebar); | 166 layout->addWidget(sidebar); |
| 169 layout->addWidget(stack); | 167 layout->addWidget(stack); |
| 170 setCentralWidget(main_widget); | 168 setCentralWidget(main_widget); |
| 171 | 169 |
| 172 ThemeChanged(); | 170 DarkTheme::SetTheme(session.config.theme); |
| 173 } | |
| 174 | |
| 175 void MainWindow::SetStyleSheet(enum Themes theme) { | |
| 176 switch (theme) { | |
| 177 case Themes::DARK: { | |
| 178 QFile f(":qdarkstyle/dark/darkstyle.qss"); | |
| 179 if (!f.exists()) | |
| 180 return; // fail | |
| 181 f.open(QFile::ReadOnly | QFile::Text); | |
| 182 QTextStream ts(&f); | |
| 183 setStyleSheet(ts.readAll()); | |
| 184 break; | |
| 185 } | |
| 186 default: setStyleSheet(""); break; | |
| 187 } | |
| 188 } | |
| 189 | |
| 190 void MainWindow::ThemeChanged() { | |
| 191 switch (session.config.theme) { | |
| 192 case Themes::LIGHT: { | |
| 193 #if MACOSX | |
| 194 if (osx::DarkThemeAvailable()) | |
| 195 osx::SetToLightTheme(); | |
| 196 else | |
| 197 #else | |
| 198 SetStyleSheet(Themes::LIGHT); | |
| 199 #endif | |
| 200 break; | |
| 201 } | |
| 202 case Themes::DARK: { | |
| 203 #if MACOSX | |
| 204 if (osx::DarkThemeAvailable()) | |
| 205 osx::SetToDarkTheme(); | |
| 206 else | |
| 207 #else | |
| 208 SetStyleSheet(Themes::DARK); | |
| 209 #endif | |
| 210 break; | |
| 211 } | |
| 212 case Themes::OS: { | |
| 213 #if MACOSX | |
| 214 if (osx::DarkThemeAvailable()) | |
| 215 osx::SetToAutoTheme(); | |
| 216 else | |
| 217 #elif defined(WIN32) | |
| 218 if (win32::DarkThemeAvailable()) { | |
| 219 if (win32::IsInDarkTheme()) { | |
| 220 SetStyleSheet(Themes::DARK); | |
| 221 } else { | |
| 222 SetStyleSheet(Themes::LIGHT); | |
| 223 } | |
| 224 } else | |
| 225 #endif | |
| 226 /* Currently OS detection only supports Windows and macOS. | |
| 227 Please don't be shy if you're willing to port it to other OSes | |
| 228 (or desktop environments, or window managers) */ | |
| 229 SetStyleSheet(Themes::LIGHT); | |
| 230 break; | |
| 231 } | |
| 232 } | |
| 233 } | 171 } |
| 234 | 172 |
| 235 void MainWindow::SetActivePage(QWidget* page) { | 173 void MainWindow::SetActivePage(QWidget* page) { |
| 236 this->setCentralWidget(page); | 174 this->setCentralWidget(page); |
| 237 } | 175 } |
