Mercurial > minori
comparison src/main.cpp @ 1:1ae666fdf9e2
*: initial commit
author | Paper <mrpapersonic@gmail.com> |
---|---|
date | Tue, 08 Aug 2023 19:49:15 -0400 |
parents | |
children | 23d0d9319a00 |
comparison
equal
deleted
inserted
replaced
0:5a76e1b94163 | 1:1ae666fdf9e2 |
---|---|
1 #include "window.h" | |
2 #include "config.h" | |
3 #include "anime.h" | |
4 #if APPLE | |
5 #include "sys/osx/dark_theme.h" | |
6 #elif WIN32 | |
7 #include "sys/win32/dark_theme.h" | |
8 #endif | |
9 | |
10 Session session = { | |
11 .config = Config() | |
12 }; | |
13 | |
14 /* note that this code was originally created for use in | |
15 wxWidgets, but I thought the API was a little meh, so | |
16 I switched to Qt. */ | |
17 | |
18 MainWindow::MainWindow(QWidget* parent) : | |
19 QMainWindow(parent) { | |
20 /* Menu Bar */ | |
21 QAction* action; | |
22 QMenuBar* menubar = new QMenuBar(parent); | |
23 QMenu* menu = menubar->addMenu("&File"); | |
24 QMenu* submenu = menu->addMenu("&Library folders"); | |
25 action = new QAction("&Add new folder..."); | |
26 submenu->addAction(action); | |
27 action = new QAction("&Scan available episodes"); | |
28 menu->addAction(action); | |
29 | |
30 menu->addSeparator(); | |
31 | |
32 action = menu->addAction("Play &next episode"); | |
33 action = menu->addAction("Play &random episode"); | |
34 menu->addSeparator(); | |
35 action = menu->addAction("E&xit", qApp, &QApplication::quit); | |
36 | |
37 menu = menubar->addMenu("&Services"); | |
38 action = new QAction("Synchronize &list"); | |
39 | |
40 menu->addSeparator(); | |
41 | |
42 submenu = menu->addMenu("&AniList"); | |
43 action = menu->addAction("Go to my &profile"); | |
44 action = menu->addAction("Go to my &stats"); | |
45 | |
46 submenu = menu->addMenu("&Kitsu"); | |
47 action = submenu->addAction("Go to my &feed"); | |
48 action = submenu->addAction("Go to my &library"); | |
49 action = submenu->addAction("Go to my &profile"); | |
50 | |
51 submenu = menu->addMenu("&MyAnimeList"); | |
52 action = submenu->addAction("Go to my p&anel"); | |
53 action = submenu->addAction("Go to my &profile"); | |
54 action = submenu->addAction("Go to my &history"); | |
55 | |
56 menu = menubar->addMenu("&Tools"); | |
57 submenu = menu->addMenu("&Export anime list"); | |
58 action = submenu->addAction("Export as &Markdown..."); | |
59 action = submenu->addAction("Export as MyAnimeList &XML..."); | |
60 | |
61 menu->addSeparator(); | |
62 | |
63 action = menu->addAction("Enable anime &recognition"); | |
64 action->setCheckable(true); | |
65 action = menu->addAction("Enable auto &sharing"); | |
66 action->setCheckable(true); | |
67 action = menu->addAction("Enable &auto synchronization"); | |
68 action->setCheckable(true); | |
69 | |
70 menu->addSeparator(); | |
71 | |
72 action = menu->addAction("&Settings"); | |
73 | |
74 setMenuBar(menubar); | |
75 | |
76 /* Side toolbar */ | |
77 QToolBar* toolbar = new QToolBar(parent); | |
78 QActionGroup* tb_action_group = new QActionGroup(toolbar); | |
79 | |
80 action = toolbar->addAction("Now Playing"); | |
81 action->setActionGroup(tb_action_group); | |
82 action->setCheckable(true); | |
83 | |
84 toolbar->addSeparator(); | |
85 | |
86 action = toolbar->addAction("Anime List", [this]() { | |
87 setCentralWidget(anime_list_page); | |
88 }); | |
89 action->setActionGroup(tb_action_group); | |
90 action->setCheckable(true); | |
91 action->setChecked(true); | |
92 anime_list_page = new AnimeListPage(parent); | |
93 SetActivePage(anime_list_page); | |
94 action = toolbar->addAction("History"); | |
95 action->setActionGroup(tb_action_group); | |
96 action->setCheckable(true); | |
97 action = toolbar->addAction("Statistics"); | |
98 action->setActionGroup(tb_action_group); | |
99 action->setCheckable(true); | |
100 | |
101 toolbar->addSeparator(); | |
102 | |
103 action = toolbar->addAction("Search"); | |
104 action->setActionGroup(tb_action_group); | |
105 action->setCheckable(true); | |
106 action = toolbar->addAction("Seasons"); | |
107 action->setActionGroup(tb_action_group); | |
108 action->setCheckable(true); | |
109 action = toolbar->addAction("Torrents"); | |
110 action->setActionGroup(tb_action_group); | |
111 action->setCheckable(true); | |
112 | |
113 toolbar->setMovable(false); | |
114 toolbar->setFloatable(false); | |
115 | |
116 addToolBar(Qt::LeftToolBarArea, toolbar); | |
117 | |
118 ThemeChanged(); | |
119 } | |
120 | |
121 void MainWindow::SetStyleSheet(enum Themes theme) { | |
122 switch (theme) { | |
123 case DARK: { | |
124 QFile f(":qdarkstyle/dark/darkstyle.qss"); | |
125 if (!f.exists()) | |
126 return; // fail | |
127 f.open(QFile::ReadOnly | QFile::Text); | |
128 QTextStream ts(&f); | |
129 setStyleSheet(ts.readAll()); | |
130 break; | |
131 } | |
132 default: | |
133 setStyleSheet(""); | |
134 break; | |
135 } | |
136 } | |
137 | |
138 void MainWindow::ThemeChanged() { | |
139 switch (session.config.theme) { | |
140 case LIGHT: { | |
141 #if APPLE | |
142 if (osx::DarkThemeAvailable()) | |
143 osx::SetToLightTheme(); | |
144 else | |
145 SetStyleSheet(LIGHT); | |
146 #else | |
147 SetStyleSheet(LIGHT); | |
148 #endif | |
149 break; | |
150 } | |
151 case DARK: { | |
152 #if APPLE | |
153 if (osx::DarkThemeAvailable()) | |
154 osx::SetToDarkTheme(); | |
155 else | |
156 SetStyleSheet(DARK); | |
157 #else | |
158 SetStyleSheet(DARK); | |
159 #endif | |
160 break; | |
161 } | |
162 case OS: { | |
163 #if APPLE | |
164 if (osx::DarkThemeAvailable()) | |
165 osx::SetToAutoTheme(); | |
166 else | |
167 SetStyleSheet(LIGHT); | |
168 #elif defined(WIN32) | |
169 if (win32::DarkThemeAvailable()) { | |
170 if (win32::IsInDarkTheme()) { | |
171 SetStyleSheet(DARK); | |
172 } else { | |
173 SetStyleSheet(LIGHT); | |
174 } | |
175 } | |
176 #else | |
177 SetStyleSheet(LIGHT); | |
178 #endif | |
179 break; | |
180 } | |
181 } | |
182 } | |
183 | |
184 void MainWindow::SetActivePage(QWidget* page) { | |
185 this->setCentralWidget(page); | |
186 } | |
187 | |
188 void MainWindow::closeEvent(QCloseEvent* event) { | |
189 session.config.Save(); | |
190 event->accept(); | |
191 } | |
192 | |
193 int main(int argc, char** argv) { | |
194 QApplication app(argc, argv); | |
195 | |
196 session.config.Load(); | |
197 | |
198 MainWindow window; | |
199 | |
200 window.resize(941, 750); | |
201 window.setWindowTitle("Weeaboo"); | |
202 window.show(); | |
203 | |
204 return app.exec(); | |
205 } |