comparison src/gui/pages/seasons.cc @ 263:96416310ea14

pages/seasons: finish season menu implementation
author Paper <paper@paper.us.eu.org>
date Wed, 03 Apr 2024 20:46:40 -0400
parents dd211ff68b36
children 657fda1b9cac
comparison
equal deleted inserted replaced
262:8e282d0dc282 263:96416310ea14
18 static constexpr Date::Year GetClosestDecade(Date::Year year) { 18 static constexpr Date::Year GetClosestDecade(Date::Year year) {
19 return year - (year % 10); 19 return year - (year % 10);
20 } 20 }
21 21
22 void SeasonsPage::SetSeason(Anime::SeriesSeason season, Date::Year year) { 22 void SeasonsPage::SetSeason(Anime::SeriesSeason season, Date::Year year) {
23 if (!buttons || !season_button)
24 return;
25
23 buttons->clear(); 26 buttons->clear();
24 27
25 for (const auto& id : Anime::Season::GetAllAnimeForSeason(season, year)) { 28 for (const auto& id : Anime::Season::GetAllAnimeForSeason(season, year)) {
26 QListWidgetItem* item = new QListWidgetItem; 29 QListWidgetItem* item = new QListWidgetItem;
27 AnimeButton* button = new AnimeButton(this); 30 AnimeButton* button = new AnimeButton(this);
28 button->SetAnime(Anime::db.items[id]); 31 button->SetAnime(Anime::db.items[id]);
29 item->setSizeHint(button->sizeHint()); 32 item->setSizeHint(button->sizeHint());
30 buttons->addItem(item); 33 buttons->addItem(item);
31 buttons->setItemWidget(item, button); 34 buttons->setItemWidget(item, button);
32 } 35 }
36
37 season_button->setText(Strings::ToQString(Translate::ToLocalString(season)) + " " + QString::number(year));
33 } 38 }
34 39
35 SeasonsPage::SeasonsPage(QWidget* parent) : QWidget(parent) { 40 SeasonsPage::SeasonsPage(QWidget* parent) : QWidget(parent) {
36 QVBoxLayout* full_layout = new QVBoxLayout(this); 41 QVBoxLayout* full_layout = new QVBoxLayout(this);
37 42
44 49
45 { 50 {
46 /* hard-coded this value */ 51 /* hard-coded this value */
47 static constexpr Date::Year last_year = 1960; 52 static constexpr Date::Year last_year = 1960;
48 53
49 auto create_year_menu = [](QWidget* parent, QMenu* parent_menu, Date::Year year){ 54 auto create_year_menu = [this](QWidget* parent, QMenu* parent_menu, Date::Year year){
50 const QString year_s = QString::number(year); 55 const QString year_s = QString::number(year);
51 56
52 QMenu* menu = new QMenu(year_s, parent); 57 QMenu* menu = new QMenu(year_s, parent);
53 for (const auto& season : Anime::SeriesSeasons) 58 for (const auto& season : Anime::SeriesSeasons) {
54 menu->addAction(Strings::ToQString(Translate::ToLocalString(season)) + " " + year_s); 59 QAction* action = menu->addAction(Strings::ToQString(Translate::ToLocalString(season)) + " " + year_s);
60 connect(action, &QAction::triggered, this, [this, season, year]{
61 SetSeason(season, year);
62 });
63 }
55 parent_menu->addMenu(menu); 64 parent_menu->addMenu(menu);
56 }; 65 };
57 66
58 auto create_decade_menu = [create_year_menu](QWidget* parent, QMenu* parent_menu, Date::Year decade) { 67 auto create_decade_menu = [create_year_menu](QWidget* parent, QMenu* parent_menu, Date::Year decade) {
59 QMenu* menu = new QMenu(QString::number(decade) + "s", parent); 68 QMenu* menu = new QMenu(QString::number(decade) + "s", parent);
63 }; 72 };
64 73
65 /* we'll be extinct by the time this code breaks, so I guess it's fine :) */ 74 /* we'll be extinct by the time this code breaks, so I guess it's fine :) */
66 const Date::Year year = static_cast<Date::Year>(QDate::currentDate().year()); 75 const Date::Year year = static_cast<Date::Year>(QDate::currentDate().year());
67 const Date::Year year_before_collapse = GetClosestDecade(year) - 10; 76 const Date::Year year_before_collapse = GetClosestDecade(year) - 10;
68 QToolButton* season_button = new QToolButton(toolbar); 77 season_button = new QToolButton(toolbar);
69 QMenu* full_season_menu = new QMenu(season_button); 78 QMenu* full_season_menu = new QMenu(season_button);
70 79
71 for (Date::Year c = year; c >= year_before_collapse; c--) 80 for (Date::Year c = year; c >= year_before_collapse; c--)
72 create_year_menu(season_button, full_season_menu, c); 81 create_year_menu(season_button, full_season_menu, c);
73 82
75 84
76 for (Date::Year c = year_before_collapse - 10; c >= last_year; c -= 10) 85 for (Date::Year c = year_before_collapse - 10; c >= last_year; c -= 10)
77 create_decade_menu(season_button, full_season_menu, c); 86 create_decade_menu(season_button, full_season_menu, c);
78 87
79 season_button->setMenu(full_season_menu); 88 season_button->setMenu(full_season_menu);
80 season_button->setText("Summer 2011");
81 season_button->setPopupMode(QToolButton::InstantPopup); 89 season_button->setPopupMode(QToolButton::InstantPopup);
82 90
83 toolbar->addWidget(season_button); 91 toolbar->addWidget(season_button);
84 } 92 }
85 93