Mercurial > minori
comparison src/gui/window.cc @ 231:69f4768a820c
chore: merge divergent branches
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Sat, 13 Jan 2024 09:43:41 -0500 |
parents | d030b30526d5 |
children | ff0061e75f0f |
comparison
equal
deleted
inserted
replaced
230:2f5a9247e501 | 231:69f4768a820c |
---|---|
14 #include "gui/pages/statistics.h" | 14 #include "gui/pages/statistics.h" |
15 #include "gui/pages/torrents.h" | 15 #include "gui/pages/torrents.h" |
16 #include "gui/widgets/sidebar.h" | 16 #include "gui/widgets/sidebar.h" |
17 #include "services/services.h" | 17 #include "services/services.h" |
18 #include "track/media.h" | 18 #include "track/media.h" |
19 #include "library/library.h" | |
19 | 20 |
20 #include "anitomy/anitomy.h" | 21 #include "anitomy/anitomy.h" |
21 | 22 |
22 #include <QActionGroup> | 23 #include <QActionGroup> |
23 #include <QApplication> | 24 #include <QApplication> |
24 #include <QDebug> | 25 #include <QDebug> |
26 #include <QDesktopServices> | |
25 #include <QFile> | 27 #include <QFile> |
28 #include <QFileDialog> | |
26 #include <QHBoxLayout> | 29 #include <QHBoxLayout> |
27 #include <QMainWindow> | 30 #include <QMainWindow> |
28 #include <QMenuBar> | 31 #include <QMenuBar> |
29 #include <QMessageBox> | 32 #include <QMessageBox> |
30 #include <QPlainTextEdit> | 33 #include <QPlainTextEdit> |
152 main_widget->layout()->addWidget(sidebar.get()); | 155 main_widget->layout()->addWidget(sidebar.get()); |
153 main_widget->layout()->addWidget(stack.get()); | 156 main_widget->layout()->addWidget(stack.get()); |
154 } | 157 } |
155 | 158 |
156 void MainWindow::CreateBars() { | 159 void MainWindow::CreateBars() { |
157 /* Menu Bar | |
158 The notation of these might seem ugly at first, but it's actually very nice | |
159 (just trust me). It makes it much easier to edit the lists and makes it clear | |
160 if you're in submenu or not. */ | |
161 QMenuBar* menubar = new QMenuBar(this); | 160 QMenuBar* menubar = new QMenuBar(this); |
161 QMenu* folder_menu; /* this is used twice, so we declare it here */ | |
162 | 162 |
163 { | 163 { |
164 /* File */ | 164 /* File */ |
165 QMenu* menu = menubar->addMenu(tr("&File")); | 165 QMenu* menu = menubar->addMenu(tr("&File")); |
166 | 166 |
167 { | 167 { |
168 QMenu* submenu = menu->addMenu(tr("&Library folders")); | 168 folder_menu = menu->addMenu(tr("&Library folders")); |
169 { | 169 |
170 QAction* action = submenu->addAction(tr("&Add new folder...")); | 170 /* add in all of our existing folders... */ |
171 } | 171 std::size_t i = 0; |
172 } | 172 for (const auto& path : session.config.library.paths) { |
173 | 173 const QString folder = Strings::ToQString(path); |
174 { | 174 QAction* action = folder_menu->addAction(folder, [folder]{ |
175 QAction* action = menu->addAction(tr("&Scan available episodes")); | 175 QDesktopServices::openUrl(QUrl::fromLocalFile(folder)); |
176 }); | |
177 if (i < 9) | |
178 action->setShortcut(QKeySequence(Qt::ALT | static_cast<Qt::Modifier>(Qt::Key_1 + i))); | |
179 else if (i == 9) | |
180 action->setShortcut(QKeySequence(Qt::ALT | Qt::Key_0)); | |
181 /* don't bother with a shortcut in case of more... */ | |
182 i++; | |
183 } | |
184 | |
185 folder_menu->addSeparator(); | |
186 | |
187 { | |
188 folder_menu->addAction(tr("&Add new folder..."), [this]{ | |
189 const QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"), | |
190 QDir::homePath(), | |
191 QFileDialog::ShowDirsOnly | |
192 | QFileDialog::DontResolveSymlinks); | |
193 if (dir.isEmpty()) | |
194 return; | |
195 session.config.library.paths.insert(Strings::ToUtf8String(dir)); | |
196 /* we have to recreate the menu bar to add the new folder */ | |
197 CreateBars(); | |
198 }); | |
199 } | |
200 } | |
201 | |
202 { | |
203 menu->addAction(tr("&Scan available episodes"), []{ | |
204 Library::SearchLibraryFolders(); | |
205 }); | |
176 } | 206 } |
177 | 207 |
178 menu->addSeparator(); | 208 menu->addSeparator(); |
179 | 209 |
180 // { | 210 // { |
189 | 219 |
190 menu->addSeparator(); | 220 menu->addSeparator(); |
191 | 221 |
192 { | 222 { |
193 QAction* action = menu->addAction(tr("E&xit"), qApp, &QApplication::quit); | 223 QAction* action = menu->addAction(tr("E&xit"), qApp, &QApplication::quit); |
224 action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q)); | |
194 } | 225 } |
195 } | 226 } |
196 | 227 |
197 { | 228 { |
198 /* Services */ | 229 /* Services */ |
382 toolbar->addSeparator(); | 413 toolbar->addSeparator(); |
383 | 414 |
384 { | 415 { |
385 QToolButton* button = new QToolButton(toolbar); | 416 QToolButton* button = new QToolButton(toolbar); |
386 { | 417 { |
387 QMenu* menu = new QMenu(button); | 418 button->setMenu(folder_menu); |
388 QAction* action = menu->addAction(tr("...")); | |
389 | |
390 button->setMenu(menu); | |
391 } | 419 } |
392 button->setIcon(QIcon(":/icons/24x24/folder-open.png")); | 420 button->setIcon(QIcon(":/icons/24x24/folder-open.png")); |
393 button->setPopupMode(QToolButton::InstantPopup); | 421 button->setPopupMode(QToolButton::InstantPopup); |
394 toolbar->addWidget(button); | 422 toolbar->addWidget(button); |
395 } | 423 } |
396 | 424 |
397 { | 425 { |
398 QToolButton* button = new QToolButton(toolbar); | 426 QToolButton* button = new QToolButton(toolbar); |
399 | 427 |
400 { | 428 { |
429 /* links */ | |
401 QMenu* menu = new QMenu(button); | 430 QMenu* menu = new QMenu(button); |
402 QAction* action = menu->addAction(tr("...")); | 431 menu->addAction("Hibari", []{ |
432 QDesktopServices::openUrl(QUrl("https://hb.wopian.me/")); | |
433 }); | |
434 menu->addAction("MALgraph", []{ | |
435 QDesktopServices::openUrl(QUrl("https://graph.anime.plus/")); | |
436 }); | |
437 menu->addSeparator(); | |
438 menu->addAction("AniChart", []{ | |
439 QDesktopServices::openUrl(QUrl("https://anichart.net/airing")); | |
440 }); | |
441 menu->addAction("Monthly.moe", []{ | |
442 QDesktopServices::openUrl(QUrl("https://www.monthly.moe/weekly")); | |
443 }); | |
444 menu->addAction("Senpai Anime Charts", []{ | |
445 QDesktopServices::openUrl(QUrl("https://www.senpai.moe/?mode=calendar")); | |
446 }); | |
447 menu->addSeparator(); | |
448 menu->addAction("Anime Streaming Search Engine", []{ | |
449 QDesktopServices::openUrl(QUrl("https://because.moe/")); | |
450 }); | |
451 menu->addAction("The Fansub Database", []{ | |
452 QDesktopServices::openUrl(QUrl("https://fansubdb.com")); | |
453 }); | |
403 | 454 |
404 button->setMenu(menu); | 455 button->setMenu(menu); |
405 } | 456 } |
406 | 457 |
407 button->setIcon(QIcon(":/icons/24x24/application-export.png")); | 458 button->setIcon(QIcon(":/icons/24x24/application-export.png")); |