Mercurial > minori
comparison src/gui/pages/anime_list.cc @ 114:ab191e28e69d
*: add initial torrent stuff
WOAH!
these checkboxes are a pain in my fucking ass
| author | Paper <mrpapersonic@gmail.com> |
|---|---|
| date | Tue, 07 Nov 2023 08:03:42 -0500 |
| parents | 80f49f623d30 |
| children | 39521c47c7a3 |
comparison
equal
deleted
inserted
replaced
| 113:32afe0e940bf | 114:ab191e28e69d |
|---|---|
| 45 case QMetaType::QString: | 45 case QMetaType::QString: |
| 46 default: return QString::compare(left.toString(), right.toString(), Qt::CaseInsensitive) < 0; | 46 default: return QString::compare(left.toString(), right.toString(), Qt::CaseInsensitive) < 0; |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 | 49 |
| 50 AnimeListPageModel::AnimeListPageModel(QWidget* parent, Anime::ListStatus _status) : QAbstractListModel(parent) { | 50 /* -------------------------------------------------- */ |
| 51 | |
| 52 AnimeListPageModel::AnimeListPageModel(QObject* parent, Anime::ListStatus _status) : QAbstractListModel(parent) { | |
| 51 status = _status; | 53 status = _status; |
| 52 return; | 54 return; |
| 53 } | 55 } |
| 54 | 56 |
| 55 int AnimeListPageModel::rowCount(const QModelIndex& parent) const { | 57 int AnimeListPageModel::rowCount(const QModelIndex& parent) const { |
| 178 } | 180 } |
| 179 | 181 |
| 180 endResetModel(); | 182 endResetModel(); |
| 181 } | 183 } |
| 182 | 184 |
| 185 /* ----------------------------------------------------------------- */ | |
| 186 | |
| 183 int AnimeListPage::VisibleColumnsCount() const { | 187 int AnimeListPage::VisibleColumnsCount() const { |
| 184 int count = 0; | 188 int count = 0; |
| 185 | 189 |
| 186 for (int i = 0, end = tree_view->header()->count(); i < end; i++) { | 190 for (int i = 0, end = tree_view->header()->count(); i < end; i++) { |
| 187 if (!tree_view->isColumnHidden(i)) | 191 if (!tree_view->isColumnHidden(i)) |
| 314 dialog->show(); | 318 dialog->show(); |
| 315 dialog->raise(); | 319 dialog->raise(); |
| 316 dialog->activateWindow(); | 320 dialog->activateWindow(); |
| 317 } | 321 } |
| 318 | 322 |
| 323 void AnimeListPage::RefreshList() { | |
| 324 for (unsigned int i = 0; i < sort_models.size(); i++) | |
| 325 reinterpret_cast<AnimeListPageModel*>(sort_models[i]->sourceModel())->RefreshList(); | |
| 326 } | |
| 327 | |
| 328 void AnimeListPage::RefreshTabs() { | |
| 329 for (unsigned int i = 0; i < sort_models.size(); i++) | |
| 330 tab_bar->setTabText(i, Strings::ToQString(Translate::ToString(Anime::ListStatuses[i])) + " (" + | |
| 331 QString::number(Anime::db.GetListsAnimeAmount(Anime::ListStatuses[i])) + ")"); | |
| 332 } | |
| 333 | |
| 334 void AnimeListPage::Refresh() { | |
| 335 RefreshList(); | |
| 336 RefreshTabs(); | |
| 337 } | |
| 338 | |
| 339 /* -------- QTabWidget replication begin --------- */ | |
| 340 | |
| 341 void AnimeListPage::InitBasicStyle(QStyleOptionTabWidgetFrame* option) const { | |
| 342 if (!option) | |
| 343 return; | |
| 344 | |
| 345 option->initFrom(this); | |
| 346 option->lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this); | |
| 347 option->shape = QTabBar::RoundedNorth; | |
| 348 option->tabBarRect = tab_bar->geometry(); | |
| 349 } | |
| 350 | |
| 351 void AnimeListPage::InitStyle(QStyleOptionTabWidgetFrame* option) const { | |
| 352 if (!option) | |
| 353 return; | |
| 354 | |
| 355 InitBasicStyle(option); | |
| 356 | |
| 357 QSize t(0, tree_view->frameWidth()); | |
| 358 if (tab_bar->isVisibleTo(this)) { | |
| 359 t = tab_bar->sizeHint(); | |
| 360 t.setWidth(width()); | |
| 361 } | |
| 362 | |
| 363 option->tabBarSize = t; | |
| 364 | |
| 365 QRect selected_tab_rect = tab_bar->tabRect(tab_bar->currentIndex()); | |
| 366 selected_tab_rect.moveTopLeft(selected_tab_rect.topLeft() + option->tabBarRect.topLeft()); | |
| 367 option->selectedTabRect = selected_tab_rect; | |
| 368 | |
| 369 option->lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this); | |
| 370 } | |
| 371 | |
| 372 void AnimeListPage::SetupLayout() { | |
| 373 QStyleOptionTabWidgetFrame option; | |
| 374 InitStyle(&option); | |
| 375 | |
| 376 QRect tabRect = style()->subElementRect(QStyle::SE_TabWidgetTabBar, &option, this); | |
| 377 tabRect.setLeft(tabRect.left() + 1); | |
| 378 panelRect = style()->subElementRect(QStyle::SE_TabWidgetTabPane, &option, this); | |
| 379 QRect contentsRect = style()->subElementRect(QStyle::SE_TabWidgetTabContents, &option, this); | |
| 380 | |
| 381 tab_bar->setGeometry(tabRect); | |
| 382 tree_view->parentWidget()->setGeometry(contentsRect); | |
| 383 } | |
| 384 | |
| 319 void AnimeListPage::paintEvent(QPaintEvent*) { | 385 void AnimeListPage::paintEvent(QPaintEvent*) { |
| 320 QStylePainter p(this); | 386 QStylePainter p(this); |
| 321 | 387 |
| 322 QStyleOptionTabWidgetFrame opt; | 388 QStyleOptionTabWidgetFrame opt; |
| 323 InitStyle(&opt); | 389 InitStyle(&opt); |
| 332 | 398 |
| 333 void AnimeListPage::showEvent(QShowEvent*) { | 399 void AnimeListPage::showEvent(QShowEvent*) { |
| 334 SetupLayout(); | 400 SetupLayout(); |
| 335 } | 401 } |
| 336 | 402 |
| 337 void AnimeListPage::InitBasicStyle(QStyleOptionTabWidgetFrame* option) const { | 403 /* --------- QTabWidget replication end ---------- */ |
| 338 if (!option) | |
| 339 return; | |
| 340 | |
| 341 option->initFrom(this); | |
| 342 option->lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this); | |
| 343 option->shape = QTabBar::RoundedNorth; | |
| 344 option->tabBarRect = tab_bar->geometry(); | |
| 345 } | |
| 346 | |
| 347 void AnimeListPage::InitStyle(QStyleOptionTabWidgetFrame* option) const { | |
| 348 if (!option) | |
| 349 return; | |
| 350 | |
| 351 InitBasicStyle(option); | |
| 352 | |
| 353 QSize t(0, tree_view->frameWidth()); | |
| 354 if (tab_bar->isVisibleTo(this)) { | |
| 355 t = tab_bar->sizeHint(); | |
| 356 t.setWidth(width()); | |
| 357 } | |
| 358 | |
| 359 option->tabBarSize = t; | |
| 360 | |
| 361 QRect selected_tab_rect = tab_bar->tabRect(tab_bar->currentIndex()); | |
| 362 selected_tab_rect.moveTopLeft(selected_tab_rect.topLeft() + option->tabBarRect.topLeft()); | |
| 363 option->selectedTabRect = selected_tab_rect; | |
| 364 | |
| 365 option->lineWidth = style()->pixelMetric(QStyle::PM_DefaultFrameWidth, nullptr, this); | |
| 366 } | |
| 367 | |
| 368 void AnimeListPage::SetupLayout() { | |
| 369 QStyleOptionTabWidgetFrame option; | |
| 370 InitStyle(&option); | |
| 371 | |
| 372 QRect tabRect = style()->subElementRect(QStyle::SE_TabWidgetTabBar, &option, this); | |
| 373 tabRect.setLeft(tabRect.left() + 1); | |
| 374 panelRect = style()->subElementRect(QStyle::SE_TabWidgetTabPane, &option, this); | |
| 375 QRect contentsRect = style()->subElementRect(QStyle::SE_TabWidgetTabContents, &option, this); | |
| 376 | |
| 377 tab_bar->setGeometry(tabRect); | |
| 378 tree_view->parentWidget()->setGeometry(contentsRect); | |
| 379 } | |
| 380 | 404 |
| 381 AnimeListPage::AnimeListPage(QWidget* parent) : QWidget(parent) { | 405 AnimeListPage::AnimeListPage(QWidget* parent) : QWidget(parent) { |
| 382 /* Tab bar */ | 406 /* Tab bar */ |
| 383 tab_bar = new QTabBar(this); | 407 tab_bar = new QTabBar(this); |
| 384 tab_bar->setExpanding(false); | 408 tab_bar->setExpanding(false); |
| 436 setFocusProxy(tab_bar); | 460 setFocusProxy(tab_bar); |
| 437 | 461 |
| 438 Refresh(); | 462 Refresh(); |
| 439 } | 463 } |
| 440 | 464 |
| 441 void AnimeListPage::RefreshList() { | |
| 442 for (unsigned int i = 0; i < sort_models.size(); i++) | |
| 443 reinterpret_cast<AnimeListPageModel*>(sort_models[i]->sourceModel())->RefreshList(); | |
| 444 } | |
| 445 | |
| 446 void AnimeListPage::RefreshTabs() { | |
| 447 for (unsigned int i = 0; i < sort_models.size(); i++) | |
| 448 tab_bar->setTabText(i, Strings::ToQString(Translate::ToString(Anime::ListStatuses[i])) + " (" + | |
| 449 QString::number(Anime::db.GetListsAnimeAmount(Anime::ListStatuses[i])) + ")"); | |
| 450 } | |
| 451 | |
| 452 void AnimeListPage::Refresh() { | |
| 453 RefreshList(); | |
| 454 RefreshTabs(); | |
| 455 } | |
| 456 | |
| 457 /* This function, really, really should not be called. | |
| 458 Ever. Why would you ever need to clear the anime list? | |
| 459 Also, this sucks. */ | |
| 460 void AnimeListPage::Reset() { | |
| 461 while (tab_bar->count()) | |
| 462 tab_bar->removeTab(0); | |
| 463 for (unsigned int i = 0; i < sort_models.size(); i++) | |
| 464 delete sort_models[i]; | |
| 465 } | |
| 466 | |
| 467 #include "gui/pages/moc_anime_list.cpp" | 465 #include "gui/pages/moc_anime_list.cpp" |
