Mercurial > minori
comparison src/gui/window.cc @ 291:9a88e1725fd2
*: refactor lots of stuff
I forgot to put this into different commits, oops!
anyway, it doesn't really matter *that* much since this is an
unfinished hobby project anyway. once it starts getting stable
commit history will be more important, but for now it's not
that big of a deal
| author | Paper <paper@paper.us.eu.org> |
|---|---|
| date | Sun, 12 May 2024 16:31:07 -0400 |
| parents | 657fda1b9cac |
| children | bf89fbf7ff38 |
comparison
equal
deleted
inserted
replaced
| 290:9347e2eaf6e5 | 291:9a88e1725fd2 |
|---|---|
| 72 Services::Synchronize(); | 72 Services::Synchronize(); |
| 73 page_->Refresh(); | 73 page_->Refresh(); |
| 74 action_->setEnabled(true); | 74 action_->setEnabled(true); |
| 75 } | 75 } |
| 76 | 76 |
| 77 MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), async_synchronize_thread_(nullptr, nullptr) { | 77 MainWindow::MainWindow(QWidget* parent) |
| 78 : QMainWindow(parent) | |
| 79 , async_synchronize_thread_(nullptr, nullptr) { | |
| 78 setWindowIcon(QIcon(":/icons/favicon.png")); | 80 setWindowIcon(QIcon(":/icons/favicon.png")); |
| 79 | 81 |
| 80 sidebar_.setFixedWidth(128); | 82 sidebar_.setFixedWidth(128); |
| 81 sidebar_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); | 83 sidebar_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); |
| 82 | 84 |
| 83 connect(&sidebar_, &SideBar::CurrentItemChanged, &stack_, &QStackedWidget::setCurrentIndex); | |
| 84 | |
| 85 new QHBoxLayout(&main_widget_); | 85 new QHBoxLayout(&main_widget_); |
| 86 | 86 |
| 87 CreateBars(); | |
| 88 | |
| 89 stack_.addWidget(&now_playing_page_); | |
| 90 /* ---- */ | |
| 91 stack_.addWidget(&anime_list_page_); | |
| 92 stack_.addWidget(&history_page_); | |
| 93 stack_.addWidget(&statistics_page_); | |
| 94 /* ---- */ | |
| 95 stack_.addWidget(&search_page_); | |
| 96 stack_.addWidget(&seasons_page_); | |
| 97 stack_.addWidget(&torrents_page_); | |
| 98 | |
| 87 AddMainWidgets(); | 99 AddMainWidgets(); |
| 100 sidebar_.SetCurrentItem(static_cast<int>(Pages::ANIME_LIST)); | |
| 88 setCentralWidget(&main_widget_); | 101 setCentralWidget(&main_widget_); |
| 89 | |
| 90 CreateBars(); | |
| 91 | 102 |
| 92 NowPlayingPage* page = reinterpret_cast<NowPlayingPage*>(stack_.widget(static_cast<int>(Pages::NOW_PLAYING))); | 103 NowPlayingPage* page = reinterpret_cast<NowPlayingPage*>(stack_.widget(static_cast<int>(Pages::NOW_PLAYING))); |
| 93 | 104 |
| 94 connect(&playing_thread_, &MainWindowPlayingThread::Done, this, [page](const std::vector<std::string>& files) { | 105 connect(&playing_thread_, &MainWindowPlayingThread::Done, this, [page](const std::vector<std::string>& files) { |
| 95 for (const auto& file : files) { | 106 for (const auto& file : files) { |
| 121 #endif | 132 #endif |
| 122 | 133 |
| 123 playing_thread_timer_.start(5000); | 134 playing_thread_timer_.start(5000); |
| 124 } | 135 } |
| 125 | 136 |
| 137 /* Does the main part of what Qt's generic "RetranslateUI" function would do */ | |
| 126 void MainWindow::AddMainWidgets() { | 138 void MainWindow::AddMainWidgets() { |
| 127 int page = static_cast<int>(Pages::ANIME_LIST); | 139 int page = sidebar_.GetCurrentItem(); |
| 128 | 140 |
| 129 sidebar_.clear(); | 141 sidebar_.clear(); |
| 130 | 142 |
| 131 sidebar_.AddItem(tr("Now Playing"), SideBar::CreateIcon(":/icons/16x16/film.png")); | 143 sidebar_.AddItem(tr("Now Playing"), SideBar::CreateIcon(":/icons/16x16/film.png")); |
| 132 sidebar_.AddSeparator(); | 144 sidebar_.AddSeparator(); |
| 135 sidebar_.AddItem(tr("Statistics"), SideBar::CreateIcon(":/icons/16x16/chart.png")); | 147 sidebar_.AddItem(tr("Statistics"), SideBar::CreateIcon(":/icons/16x16/chart.png")); |
| 136 sidebar_.AddSeparator(); | 148 sidebar_.AddSeparator(); |
| 137 sidebar_.AddItem(tr("Search"), SideBar::CreateIcon(":/icons/16x16/magnifier.png")); | 149 sidebar_.AddItem(tr("Search"), SideBar::CreateIcon(":/icons/16x16/magnifier.png")); |
| 138 sidebar_.AddItem(tr("Seasons"), SideBar::CreateIcon(":/icons/16x16/calendar.png")); | 150 sidebar_.AddItem(tr("Seasons"), SideBar::CreateIcon(":/icons/16x16/calendar.png")); |
| 139 sidebar_.AddItem(tr("Torrents"), SideBar::CreateIcon(":/icons/16x16/feed.png")); | 151 sidebar_.AddItem(tr("Torrents"), SideBar::CreateIcon(":/icons/16x16/feed.png")); |
| 140 | |
| 141 while (stack_.count()) | |
| 142 stack_.removeWidget(stack_.widget(0)); | |
| 143 | |
| 144 /* can we allocate these on the stack? */ | |
| 145 stack_.addWidget(new NowPlayingPage(&main_widget_)); | |
| 146 /* ---- */ | |
| 147 stack_.addWidget(new AnimeListPage(&main_widget_)); | |
| 148 stack_.addWidget(new HistoryPage(&main_widget_)); | |
| 149 stack_.addWidget(new StatisticsPage(&main_widget_)); | |
| 150 /* ---- */ | |
| 151 stack_.addWidget(new SearchPage(&main_widget_)); | |
| 152 stack_.addWidget(new SeasonsPage(&main_widget_)); | |
| 153 stack_.addWidget(new TorrentsPage(&main_widget_)); | |
| 154 | 152 |
| 155 sidebar_.SetCurrentItem(page); | 153 sidebar_.SetCurrentItem(page); |
| 156 | 154 |
| 157 main_widget_.layout()->addWidget(&sidebar_); | 155 main_widget_.layout()->addWidget(&sidebar_); |
| 158 main_widget_.layout()->addWidget(&stack_); | 156 main_widget_.layout()->addWidget(&stack_); |
| 332 action->setCheckable(true); | 330 action->setCheckable(true); |
| 333 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(6); }); | 331 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(6); }); |
| 334 } | 332 } |
| 335 | 333 |
| 336 /* pain in the ass */ | 334 /* pain in the ass */ |
| 335 disconnect(&sidebar_, &SideBar::CurrentItemChanged, nullptr, nullptr); | |
| 336 connect(&sidebar_, &SideBar::CurrentItemChanged, &stack_, &QStackedWidget::setCurrentIndex); | |
| 337 connect(&sidebar_, &SideBar::CurrentItemChanged, this, [pages_group](int index) { | 337 connect(&sidebar_, &SideBar::CurrentItemChanged, this, [pages_group](int index) { |
| 338 QAction* checked = pages_group->checkedAction(); | 338 QAction* checked = pages_group->checkedAction(); |
| 339 | 339 |
| 340 const QList<QAction*>& actions = pages_group->actions(); | 340 const QList<QAction*>& actions = pages_group->actions(); |
| 341 if (index > actions.size()) | 341 if (index > actions.size()) |
| 506 async_synchronize_thread_.start(); | 506 async_synchronize_thread_.start(); |
| 507 } | 507 } |
| 508 } | 508 } |
| 509 | 509 |
| 510 void MainWindow::RetranslateUI() { | 510 void MainWindow::RetranslateUI() { |
| 511 /* This kinda sucks but nobody's really going to be changing | 511 /* This sucks a LOT */ |
| 512 the application language all the time :p */ | |
| 513 setUpdatesEnabled(false); | 512 setUpdatesEnabled(false); |
| 514 AddMainWidgets(); | 513 AddMainWidgets(); |
| 515 CreateBars(); | 514 CreateBars(); |
| 516 setUpdatesEnabled(true); | 515 setUpdatesEnabled(true); |
| 517 } | 516 } |
| 530 | 529 |
| 531 void MainWindow::showEvent(QShowEvent* event) { | 530 void MainWindow::showEvent(QShowEvent* event) { |
| 532 QMainWindow::showEvent(event); | 531 QMainWindow::showEvent(event); |
| 533 #ifdef WIN32 | 532 #ifdef WIN32 |
| 534 /* Technically this *should* be | 533 /* Technically this *should* be |
| 535 session.config.theme.IsInDarkTheme() && win32::IsInDarkTheme() | 534 * session.config.theme.IsInDarkTheme() && win32::IsInDarkTheme() |
| 536 but I prefer the title bar being black even when light mode | 535 * but I prefer the title bar being black even when light mode |
| 537 is enabled :/ */ | 536 * is enabled :/ */ |
| 538 win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); | 537 win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); |
| 539 #endif | 538 #endif |
| 540 } | 539 } |
| 541 | 540 |
| 542 void MainWindow::closeEvent(QCloseEvent* event) { | 541 void MainWindow::closeEvent(QCloseEvent* event) { |
| 542 playing_thread_timer_.stop(); | |
| 543 playing_thread_.wait(); | |
| 544 async_synchronize_thread_.wait(); | |
| 545 | |
| 543 session.config.Save(); | 546 session.config.Save(); |
| 544 Anime::db.SaveDatabaseToDisk(); | 547 Anime::db.SaveDatabaseToDisk(); |
| 545 event->accept(); | 548 event->accept(); |
| 546 } | 549 } |
