Mercurial > minori
comparison src/gui/window.cc @ 369:47c9f8502269
*: clang-format all the things
I've edited the formatting a bit. Now pointer asterisks (and reference
ampersands) are on the variable instead of the type, as well as having
newlines for function braces (but nothing else)
| author | Paper <paper@tflc.us> |
|---|---|
| date | Fri, 25 Jul 2025 10:16:02 -0400 |
| parents | 886f66775f31 |
| children | 27c462bc7815 |
comparison
equal
deleted
inserted
replaced
| 368:6d37a998cf91 | 369:47c9f8502269 |
|---|---|
| 41 #include <QToolButton> | 41 #include <QToolButton> |
| 42 | 42 |
| 43 #include <iostream> | 43 #include <iostream> |
| 44 | 44 |
| 45 #ifdef MACOSX | 45 #ifdef MACOSX |
| 46 # include "sys/osx/dark_theme.h" | 46 # include "sys/osx/dark_theme.h" |
| 47 # include "sys/osx/permissions.h" | 47 # include "sys/osx/permissions.h" |
| 48 #elif defined(WIN32) | 48 #elif defined(WIN32) |
| 49 # include "sys/win32/dark_theme.h" | 49 # include "sys/win32/dark_theme.h" |
| 50 #endif | 50 #endif |
| 51 | 51 |
| 52 void MainWindowPlayingThread::run() { | 52 void MainWindowPlayingThread::run() |
| 53 { | |
| 53 std::vector<std::string> files; | 54 std::vector<std::string> files; |
| 54 Track::Media::GetCurrentlyPlaying(files); | 55 Track::Media::GetCurrentlyPlaying(files); |
| 55 emit Done(files); | 56 emit Done(files); |
| 56 } | 57 } |
| 57 | 58 |
| 58 MainWindowAsyncSynchronizeThread::MainWindowAsyncSynchronizeThread(QAction* action, AnimeListPage* page, QObject* parent) : QThread(parent) { | 59 MainWindowAsyncSynchronizeThread::MainWindowAsyncSynchronizeThread(QAction *action, AnimeListPage *page, |
| 60 QObject *parent) | |
| 61 : QThread(parent) | |
| 62 { | |
| 59 SetAction(action); | 63 SetAction(action); |
| 60 SetPage(page); | 64 SetPage(page); |
| 61 } | 65 } |
| 62 | 66 |
| 63 void MainWindowAsyncSynchronizeThread::SetAction(QAction* action) { | 67 void MainWindowAsyncSynchronizeThread::SetAction(QAction *action) |
| 68 { | |
| 64 action_ = action; | 69 action_ = action; |
| 65 } | 70 } |
| 66 | 71 |
| 67 void MainWindowAsyncSynchronizeThread::SetPage(AnimeListPage* page) { | 72 void MainWindowAsyncSynchronizeThread::SetPage(AnimeListPage *page) |
| 73 { | |
| 68 page_ = page; | 74 page_ = page; |
| 69 } | 75 } |
| 70 | 76 |
| 71 void MainWindowAsyncSynchronizeThread::run() { | 77 void MainWindowAsyncSynchronizeThread::run() |
| 78 { | |
| 72 action_->setEnabled(false); | 79 action_->setEnabled(false); |
| 73 Services::Synchronize(); | 80 Services::Synchronize(); |
| 74 page_->Refresh(); | 81 page_->Refresh(); |
| 75 action_->setEnabled(true); | 82 action_->setEnabled(true); |
| 76 } | 83 } |
| 77 | 84 |
| 78 MainWindow::MainWindow(QWidget* parent) | 85 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), async_synchronize_thread_(nullptr, nullptr) |
| 79 : QMainWindow(parent) | 86 { |
| 80 , async_synchronize_thread_(nullptr, nullptr) { | |
| 81 sidebar_.setFixedWidth(128); | 87 sidebar_.setFixedWidth(128); |
| 82 sidebar_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); | 88 sidebar_.setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); |
| 83 | 89 |
| 84 statusBar(); | 90 statusBar(); |
| 85 | 91 |
| 99 | 105 |
| 100 AddMainWidgets(); | 106 AddMainWidgets(); |
| 101 sidebar_.SetCurrentItem(static_cast<int>(Pages::ANIME_LIST)); | 107 sidebar_.SetCurrentItem(static_cast<int>(Pages::ANIME_LIST)); |
| 102 setCentralWidget(&main_widget_); | 108 setCentralWidget(&main_widget_); |
| 103 | 109 |
| 104 NowPlayingPage* page = reinterpret_cast<NowPlayingPage*>(stack_.widget(static_cast<int>(Pages::NOW_PLAYING))); | 110 NowPlayingPage *page = reinterpret_cast<NowPlayingPage *>(stack_.widget(static_cast<int>(Pages::NOW_PLAYING))); |
| 105 | 111 |
| 106 connect(&playing_thread_, &MainWindowPlayingThread::Done, this, [page](const std::vector<std::string>& files) { | 112 connect(&playing_thread_, &MainWindowPlayingThread::Done, this, [page](const std::vector<std::string> &files) { |
| 107 for (const auto& file : files) { | 113 for (const auto &file : files) { |
| 108 anitomy::Anitomy anitomy; | 114 anitomy::Anitomy anitomy; |
| 109 anitomy.Parse(file); | 115 anitomy.Parse(file); |
| 110 | 116 |
| 111 const auto& elements = anitomy.elements(); | 117 const auto &elements = anitomy.elements(); |
| 112 | 118 |
| 113 const std::string title = Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle)); | 119 const std::string title = Strings::ToUtf8String(elements.get(anitomy::kElementAnimeTitle)); |
| 114 | 120 |
| 115 int id = Anime::db.LookupAnimeTitle(title); | 121 int id = Anime::db.LookupAnimeTitle(title); |
| 116 if (id <= 0) | 122 if (id <= 0) |
| 134 #endif | 140 #endif |
| 135 | 141 |
| 136 playing_thread_timer_.start(5000); | 142 playing_thread_timer_.start(5000); |
| 137 } | 143 } |
| 138 | 144 |
| 139 void MainWindow::SetStatusMessage(const std::string& message) { | 145 void MainWindow::SetStatusMessage(const std::string &message) |
| 146 { | |
| 140 statusBar()->showMessage(Strings::ToQString(message), 2000); | 147 statusBar()->showMessage(Strings::ToQString(message), 2000); |
| 141 } | 148 } |
| 142 | 149 |
| 143 /* FIXME: | 150 /* FIXME: |
| 144 * ALL of the pages need to have a retranslate function. This would require | 151 * ALL of the pages need to have a retranslate function. This would require |
| 145 * huge amounts of refactoring hence why it hasn't been done yet. */ | 152 * huge amounts of refactoring hence why it hasn't been done yet. */ |
| 146 void MainWindow::AddMainWidgets() { | 153 void MainWindow::AddMainWidgets() |
| 154 { | |
| 147 int page = sidebar_.GetCurrentItem(); | 155 int page = sidebar_.GetCurrentItem(); |
| 148 | 156 |
| 149 sidebar_.clear(); | 157 sidebar_.clear(); |
| 150 | 158 |
| 151 sidebar_.AddItem(tr("Now Playing"), SideBar::CreateIcon(":/icons/16x16/film.png")); | 159 sidebar_.AddItem(tr("Now Playing"), SideBar::CreateIcon(":/icons/16x16/film.png")); |
| 162 | 170 |
| 163 main_widget_.layout()->addWidget(&sidebar_); | 171 main_widget_.layout()->addWidget(&sidebar_); |
| 164 main_widget_.layout()->addWidget(&stack_); | 172 main_widget_.layout()->addWidget(&stack_); |
| 165 } | 173 } |
| 166 | 174 |
| 167 void MainWindow::CreateBars() { | 175 void MainWindow::CreateBars() |
| 168 QMenuBar* menubar = new QMenuBar(this); | 176 { |
| 169 QAction* sync_action; | 177 QMenuBar *menubar = new QMenuBar(this); |
| 178 QAction *sync_action; | |
| 170 | 179 |
| 171 { | 180 { |
| 172 /* File */ | 181 /* File */ |
| 173 QMenu* menu = menubar->addMenu(tr("&File")); | 182 QMenu *menu = menubar->addMenu(tr("&File")); |
| 174 | 183 |
| 175 { | 184 { |
| 176 folder_menu = menu->addMenu(tr("&Library folders")); | 185 folder_menu = menu->addMenu(tr("&Library folders")); |
| 177 | 186 |
| 178 UpdateFolderMenu(); | 187 UpdateFolderMenu(); |
| 195 // } | 204 // } |
| 196 | 205 |
| 197 menu->addSeparator(); | 206 menu->addSeparator(); |
| 198 | 207 |
| 199 { | 208 { |
| 200 QAction* action = menu->addAction(tr("E&xit"), this, &MainWindow::close); | 209 QAction *action = menu->addAction(tr("E&xit"), this, &MainWindow::close); |
| 201 action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q)); | 210 action->setShortcut(QKeySequence(Qt::CTRL | Qt::Key_Q)); |
| 202 } | 211 } |
| 203 } | 212 } |
| 204 | 213 |
| 205 { | 214 { |
| 206 /* Services */ | 215 /* Services */ |
| 207 QMenu* menu = menubar->addMenu(tr("&Services")); | 216 QMenu *menu = menubar->addMenu(tr("&Services")); |
| 208 { | 217 { |
| 209 { | 218 { |
| 210 sync_action = menu->addAction(tr("Synchronize &list")); | 219 sync_action = menu->addAction(tr("Synchronize &list")); |
| 211 | 220 |
| 212 connect(sync_action, &QAction::triggered, this, | 221 connect(sync_action, &QAction::triggered, this, |
| 241 } | 250 } |
| 242 } | 251 } |
| 243 | 252 |
| 244 { | 253 { |
| 245 /* Tools */ | 254 /* Tools */ |
| 246 QMenu* menu = menubar->addMenu(tr("&Tools")); | 255 QMenu *menu = menubar->addMenu(tr("&Tools")); |
| 247 // { | 256 // { |
| 248 // /* Export anime list */ | 257 // /* Export anime list */ |
| 249 // QMenu* submenu = menu->addMenu(tr("&Export anime list")); | 258 // QMenu* submenu = menu->addMenu(tr("&Export anime list")); |
| 250 // | 259 // |
| 251 // { | 260 // { |
| 276 // } | 285 // } |
| 277 // | 286 // |
| 278 // menu->addSeparator(); | 287 // menu->addSeparator(); |
| 279 | 288 |
| 280 { | 289 { |
| 281 QAction* action = menu->addAction(tr("&Settings"), [this] { | 290 QAction *action = menu->addAction(tr("&Settings"), [this] { |
| 282 SettingsDialog dialog(this); | 291 SettingsDialog dialog(this); |
| 283 dialog.exec(); | 292 dialog.exec(); |
| 284 UpdateFolderMenu(); | 293 UpdateFolderMenu(); |
| 285 }); | 294 }); |
| 286 action->setMenuRole(QAction::PreferencesRole); | 295 action->setMenuRole(QAction::PreferencesRole); |
| 287 } | 296 } |
| 288 } | 297 } |
| 289 | 298 |
| 290 { | 299 { |
| 291 /* View */ | 300 /* View */ |
| 292 QMenu* menu = menubar->addMenu(tr("&View")); | 301 QMenu *menu = menubar->addMenu(tr("&View")); |
| 293 | 302 |
| 294 { | 303 { |
| 295 /* Pages... */ | 304 /* Pages... */ |
| 296 QActionGroup* pages_group = new QActionGroup(menu); | 305 QActionGroup *pages_group = new QActionGroup(menu); |
| 297 pages_group->setExclusive(true); | 306 pages_group->setExclusive(true); |
| 298 | 307 |
| 299 { | 308 { |
| 300 QAction* action = pages_group->addAction(menu->addAction(tr("&Now Playing"))); | 309 QAction *action = pages_group->addAction(menu->addAction(tr("&Now Playing"))); |
| 301 action->setCheckable(true); | 310 action->setCheckable(true); |
| 302 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(0); }); | 311 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(0); }); |
| 303 } | 312 } |
| 304 | 313 |
| 305 { | 314 { |
| 306 QAction* action = pages_group->addAction(menu->addAction(tr("&Anime List"))); | 315 QAction *action = pages_group->addAction(menu->addAction(tr("&Anime List"))); |
| 307 action->setCheckable(true); | 316 action->setCheckable(true); |
| 308 action->setChecked(true); | 317 action->setChecked(true); |
| 309 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(1); }); | 318 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(1); }); |
| 310 } | 319 } |
| 311 | 320 |
| 312 { | 321 { |
| 313 QAction* action = pages_group->addAction(menu->addAction(tr("&History"))); | 322 QAction *action = pages_group->addAction(menu->addAction(tr("&History"))); |
| 314 action->setCheckable(true); | 323 action->setCheckable(true); |
| 315 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(2); }); | 324 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(2); }); |
| 316 } | 325 } |
| 317 | 326 |
| 318 { | 327 { |
| 319 QAction* action = pages_group->addAction(menu->addAction(tr("&Statistics"))); | 328 QAction *action = pages_group->addAction(menu->addAction(tr("&Statistics"))); |
| 320 action->setCheckable(true); | 329 action->setCheckable(true); |
| 321 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(3); }); | 330 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(3); }); |
| 322 } | 331 } |
| 323 | 332 |
| 324 { | 333 { |
| 325 QAction* action = pages_group->addAction(menu->addAction(tr("S&earch"))); | 334 QAction *action = pages_group->addAction(menu->addAction(tr("S&earch"))); |
| 326 action->setCheckable(true); | 335 action->setCheckable(true); |
| 327 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(4); }); | 336 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(4); }); |
| 328 } | 337 } |
| 329 | 338 |
| 330 { | 339 { |
| 331 QAction* action = pages_group->addAction(menu->addAction(tr("Se&asons"))); | 340 QAction *action = pages_group->addAction(menu->addAction(tr("Se&asons"))); |
| 332 action->setCheckable(true); | 341 action->setCheckable(true); |
| 333 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(5); }); | 342 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(5); }); |
| 334 } | 343 } |
| 335 | 344 |
| 336 { | 345 { |
| 337 QAction* action = pages_group->addAction(menu->addAction(tr("&Torrents"))); | 346 QAction *action = pages_group->addAction(menu->addAction(tr("&Torrents"))); |
| 338 action->setCheckable(true); | 347 action->setCheckable(true); |
| 339 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(6); }); | 348 connect(action, &QAction::toggled, this, [this] { sidebar_.SetCurrentItem(6); }); |
| 340 } | 349 } |
| 341 | 350 |
| 342 /* pain in the ass */ | 351 /* pain in the ass */ |
| 343 disconnect(&sidebar_, &SideBar::CurrentItemChanged, nullptr, nullptr); | 352 disconnect(&sidebar_, &SideBar::CurrentItemChanged, nullptr, nullptr); |
| 344 connect(&sidebar_, &SideBar::CurrentItemChanged, &stack_, &QStackedWidget::setCurrentIndex); | 353 connect(&sidebar_, &SideBar::CurrentItemChanged, &stack_, &QStackedWidget::setCurrentIndex); |
| 345 connect(&sidebar_, &SideBar::CurrentItemChanged, this, [pages_group](int index) { | 354 connect(&sidebar_, &SideBar::CurrentItemChanged, this, [pages_group](int index) { |
| 346 QAction* checked = pages_group->checkedAction(); | 355 QAction *checked = pages_group->checkedAction(); |
| 347 | 356 |
| 348 const QList<QAction*>& actions = pages_group->actions(); | 357 const QList<QAction *> &actions = pages_group->actions(); |
| 349 if (index > actions.size()) | 358 if (index > actions.size()) |
| 350 return; | 359 return; |
| 351 | 360 |
| 352 if (checked) | 361 if (checked) |
| 353 checked->setChecked(false); | 362 checked->setChecked(false); |
| 362 // } | 371 // } |
| 363 } | 372 } |
| 364 | 373 |
| 365 { | 374 { |
| 366 /* Help */ | 375 /* Help */ |
| 367 QMenu* menu = menubar->addMenu(tr("&Help")); | 376 QMenu *menu = menubar->addMenu(tr("&Help")); |
| 368 | 377 |
| 369 { | 378 { |
| 370 /* About Minori */ | 379 /* About Minori */ |
| 371 menu->addAction(tr("&About Minori"), this, [this] { | 380 menu->addAction(tr("&About Minori"), this, [this] { |
| 372 AboutWindow dialog(this); | 381 AboutWindow dialog(this); |
| 374 }); | 383 }); |
| 375 } | 384 } |
| 376 | 385 |
| 377 { | 386 { |
| 378 /* About Qt */ | 387 /* About Qt */ |
| 379 QAction* action = menu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); | 388 QAction *action = menu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt); |
| 380 action->setMenuRole(QAction::AboutQtRole); | 389 action->setMenuRole(QAction::AboutQtRole); |
| 381 } | 390 } |
| 382 } | 391 } |
| 383 /* QMainWindow will delete the old one for us, | 392 /* QMainWindow will delete the old one for us, |
| 384 * according to the docs | 393 * according to the docs |
| 387 | 396 |
| 388 /* Toolbar */ | 397 /* Toolbar */ |
| 389 | 398 |
| 390 /* remove old toolbar(s) */ | 399 /* remove old toolbar(s) */ |
| 391 /* the empty QString() is a Qt 5 wart... */ | 400 /* the empty QString() is a Qt 5 wart... */ |
| 392 for (QToolBar*& t : findChildren<QToolBar*>(QString(), Qt::FindDirectChildrenOnly)) { | 401 for (QToolBar *&t : findChildren<QToolBar *>(QString(), Qt::FindDirectChildrenOnly)) { |
| 393 removeToolBar(t); | 402 removeToolBar(t); |
| 394 delete t; | 403 delete t; |
| 395 } | 404 } |
| 396 | 405 |
| 397 { | 406 { |
| 398 /* Toolbar */ | 407 /* Toolbar */ |
| 399 QToolBar* toolbar = new QToolBar(this); | 408 QToolBar *toolbar = new QToolBar(this); |
| 400 toolbar->addAction(sync_action); | 409 toolbar->addAction(sync_action); |
| 401 | 410 |
| 402 toolbar->addSeparator(); | 411 toolbar->addSeparator(); |
| 403 | 412 |
| 404 { | 413 { |
| 405 QToolButton* button = new QToolButton(toolbar); | 414 QToolButton *button = new QToolButton(toolbar); |
| 406 { button->setMenu(folder_menu); } | 415 { |
| 416 button->setMenu(folder_menu); | |
| 417 } | |
| 407 button->setIcon(QIcon(":/icons/24x24/folder-open.png")); | 418 button->setIcon(QIcon(":/icons/24x24/folder-open.png")); |
| 408 button->setPopupMode(QToolButton::InstantPopup); | 419 button->setPopupMode(QToolButton::InstantPopup); |
| 409 toolbar->addWidget(button); | 420 toolbar->addWidget(button); |
| 410 } | 421 } |
| 411 | 422 |
| 412 { | 423 { |
| 413 QToolButton* button = new QToolButton(toolbar); | 424 QToolButton *button = new QToolButton(toolbar); |
| 414 | 425 |
| 415 { | 426 { |
| 416 /* links */ | 427 /* links */ |
| 417 QMenu* menu = new QMenu(button); | 428 QMenu *menu = new QMenu(button); |
| 418 menu->addAction("Hibari", [] { QDesktopServices::openUrl(QUrl("https://hb.wopian.me/")); }); | 429 menu->addAction("Hibari", [] { QDesktopServices::openUrl(QUrl("https://hb.wopian.me/")); }); |
| 419 menu->addAction("MALgraph", [] { QDesktopServices::openUrl(QUrl("https://graph.anime.plus/")); }); | 430 menu->addAction("MALgraph", [] { QDesktopServices::openUrl(QUrl("https://graph.anime.plus/")); }); |
| 420 menu->addSeparator(); | 431 menu->addSeparator(); |
| 421 menu->addAction("AniChart", [] { QDesktopServices::openUrl(QUrl("https://anichart.net/airing")); }); | 432 menu->addAction("AniChart", [] { QDesktopServices::openUrl(QUrl("https://anichart.net/airing")); }); |
| 422 menu->addAction("Monthly.moe", | 433 menu->addAction("Monthly.moe", |
| 445 }); | 456 }); |
| 446 addToolBar(toolbar); | 457 addToolBar(toolbar); |
| 447 } | 458 } |
| 448 } | 459 } |
| 449 | 460 |
| 450 void MainWindow::UpdateFolderMenu() { | 461 void MainWindow::UpdateFolderMenu() |
| 462 { | |
| 451 if (!folder_menu) | 463 if (!folder_menu) |
| 452 return; | 464 return; |
| 453 | 465 |
| 454 folder_menu->clear(); | 466 folder_menu->clear(); |
| 455 | 467 |
| 456 /* add in all of our existing folders... */ | 468 /* add in all of our existing folders... */ |
| 457 std::size_t i = 0; | 469 std::size_t i = 0; |
| 458 for (const auto& path : session.config.library.paths) { | 470 for (const auto &path : session.config.library.paths) { |
| 459 const QString folder = Strings::ToQString(path); | 471 const QString folder = Strings::ToQString(path); |
| 460 QAction* action = | 472 QAction *action = |
| 461 folder_menu->addAction(folder, [folder] { QDesktopServices::openUrl(QUrl::fromLocalFile(folder)); }); | 473 folder_menu->addAction(folder, [folder] { QDesktopServices::openUrl(QUrl::fromLocalFile(folder)); }); |
| 462 | 474 |
| 463 if (i < 9) { | 475 if (i < 9) { |
| 464 /* Qt::Key_1 is equivalent to 1 in ASCII, so we can use the same | 476 /* Qt::Key_1 is equivalent to 1 in ASCII, so we can use the same |
| 465 * stupid `'0' + i` trick here | 477 * stupid `'0' + i` trick here |
| 485 UpdateFolderMenu(); | 497 UpdateFolderMenu(); |
| 486 }); | 498 }); |
| 487 } | 499 } |
| 488 } | 500 } |
| 489 | 501 |
| 490 void MainWindow::SetActivePage(QWidget* page) { | 502 void MainWindow::SetActivePage(QWidget *page) |
| 503 { | |
| 491 this->setCentralWidget(page); | 504 this->setCentralWidget(page); |
| 492 } | 505 } |
| 493 | 506 |
| 494 void MainWindow::AsyncSynchronize(QAction* action, QStackedWidget* stack) { | 507 void MainWindow::AsyncSynchronize(QAction *action, QStackedWidget *stack) |
| 508 { | |
| 495 if (session.config.service == Anime::Service::None) { | 509 if (session.config.service == Anime::Service::None) { |
| 496 QMessageBox msg; | 510 QMessageBox msg; |
| 497 msg.setWindowTitle(tr("Error synchronizing with service!")); | 511 msg.setWindowTitle(tr("Error synchronizing with service!")); |
| 498 msg.setText(tr("It seems you haven't yet selected a service to use.")); | 512 msg.setText(tr("It seems you haven't yet selected a service to use.")); |
| 499 msg.setInformativeText(tr("Would you like to select one now?")); | 513 msg.setInformativeText(tr("Would you like to select one now?")); |
| 505 dialog.exec(); | 519 dialog.exec(); |
| 506 } | 520 } |
| 507 } | 521 } |
| 508 | 522 |
| 509 /* FIXME: make this use a QThread; this is *very* unsafe */ | 523 /* FIXME: make this use a QThread; this is *very* unsafe */ |
| 510 AnimeListPage* page = reinterpret_cast<AnimeListPage*>(stack->widget(static_cast<int>(Pages::ANIME_LIST))); | 524 AnimeListPage *page = reinterpret_cast<AnimeListPage *>(stack->widget(static_cast<int>(Pages::ANIME_LIST))); |
| 511 if (!async_synchronize_thread_.isRunning()) { | 525 if (!async_synchronize_thread_.isRunning()) { |
| 512 async_synchronize_thread_.SetAction(action); | 526 async_synchronize_thread_.SetAction(action); |
| 513 async_synchronize_thread_.SetPage(page); | 527 async_synchronize_thread_.SetPage(page); |
| 514 async_synchronize_thread_.start(); | 528 async_synchronize_thread_.start(); |
| 515 } | 529 } |
| 516 } | 530 } |
| 517 | 531 |
| 518 void MainWindow::RetranslateUI() { | 532 void MainWindow::RetranslateUI() |
| 533 { | |
| 519 /* This sucks a LOT */ | 534 /* This sucks a LOT */ |
| 520 setUpdatesEnabled(false); | 535 setUpdatesEnabled(false); |
| 521 AddMainWidgets(); | 536 AddMainWidgets(); |
| 522 CreateBars(); | 537 CreateBars(); |
| 523 setUpdatesEnabled(true); | 538 setUpdatesEnabled(true); |
| 524 } | 539 } |
| 525 | 540 |
| 526 void MainWindow::changeEvent(QEvent* event) { | 541 void MainWindow::changeEvent(QEvent *event) |
| 542 { | |
| 527 if (event) { /* is this really necessary */ | 543 if (event) { /* is this really necessary */ |
| 528 switch (event->type()) { | 544 switch (event->type()) { |
| 529 // this event is send if a translator is loaded | 545 // this event is send if a translator is loaded |
| 530 case QEvent::LanguageChange: RetranslateUI(); break; | 546 case QEvent::LanguageChange: RetranslateUI(); break; |
| 531 | 547 |
| 533 } | 549 } |
| 534 } | 550 } |
| 535 QMainWindow::changeEvent(event); | 551 QMainWindow::changeEvent(event); |
| 536 } | 552 } |
| 537 | 553 |
| 538 void MainWindow::showEvent(QShowEvent* event) { | 554 void MainWindow::showEvent(QShowEvent *event) |
| 555 { | |
| 539 QMainWindow::showEvent(event); | 556 QMainWindow::showEvent(event); |
| 540 #ifdef WIN32 | 557 #ifdef WIN32 |
| 541 /* Technically this *should* be | 558 /* Technically this *should* be |
| 542 * session.config.theme.IsInDarkTheme() && win32::IsInDarkTheme() | 559 * session.config.theme.IsInDarkTheme() && win32::IsInDarkTheme() |
| 543 * but I prefer the title bar being black even when light mode | 560 * but I prefer the title bar being black even when light mode |
| 544 * is enabled :/ */ | 561 * is enabled :/ */ |
| 545 win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); | 562 win32::SetTitleBarsToBlack(session.config.theme.IsInDarkTheme()); |
| 546 #endif | 563 #endif |
| 547 } | 564 } |
| 548 | 565 |
| 549 void MainWindow::closeEvent(QCloseEvent* event) { | 566 void MainWindow::closeEvent(QCloseEvent *event) |
| 567 { | |
| 550 playing_thread_timer_.stop(); | 568 playing_thread_timer_.stop(); |
| 551 playing_thread_.wait(); | 569 playing_thread_.wait(); |
| 552 async_synchronize_thread_.wait(); | 570 async_synchronize_thread_.wait(); |
| 553 | 571 |
| 554 session.config.Save(); | 572 session.config.Save(); |
