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"));