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