comparison src/gui/dialog/information.cpp @ 64:fe719c109dbc

*: update 1. add media tracking ability, and it displays info on the `now playing` page 2. the `now playing` page now actually shows something 3. renamed every page class to be more accurate to what it is 4. ...
author Paper <mrpapersonic@gmail.com>
date Sun, 01 Oct 2023 23:15:43 -0400
parents 3d2decf093bb
children 26721c28bf22
comparison
equal deleted inserted replaced
63:3d2decf093bb 64:fe719c109dbc
3 #include "core/anime_db.h" 3 #include "core/anime_db.h"
4 #include "core/array.h" 4 #include "core/array.h"
5 #include "core/strings.h" 5 #include "core/strings.h"
6 #include "gui/pages/anime_list.h" 6 #include "gui/pages/anime_list.h"
7 #include "gui/translate/anime.h" 7 #include "gui/translate/anime.h"
8 #include "gui/widgets/anime_info.h"
8 #include "gui/widgets/optional_date.h" 9 #include "gui/widgets/optional_date.h"
9 #include "gui/widgets/text.h" 10 #include "gui/widgets/text.h"
10 #include "gui/window.h" 11 #include "gui/window.h"
11 #include <QCheckBox> 12 #include <QCheckBox>
12 #include <QComboBox> 13 #include <QComboBox>
63 64
64 main_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 65 main_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
65 66
66 id = anime.GetId(); 67 id = anime.GetId();
67 /* anime title header text */ 68 /* anime title header text */
68 TextWidgets::Paragraph* anime_title = 69 TextWidgets::Title* anime_title =
69 new TextWidgets::Paragraph(QString::fromUtf8(anime.GetUserPreferredTitle().c_str()), main_widget); 70 new TextWidgets::Title(QString::fromStdString(anime.GetUserPreferredTitle()), main_widget);
70 anime_title->setReadOnly(true);
71 anime_title->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
72 anime_title->setWordWrapMode(QTextOption::NoWrap);
73 anime_title->setFrameShape(QFrame::NoFrame);
74 anime_title->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
75 anime_title->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
76 anime_title->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
77
78 {
79 QFont font(anime_title->font());
80 font.setPointSize(12);
81 anime_title->setFont(font);
82 }
83
84 {
85 QPalette pal;
86 pal.setColor(QPalette::Window, Qt::transparent);
87 pal.setColor(QPalette::WindowText, Qt::blue);
88 }
89 71
90 /* tabbed widget */ 72 /* tabbed widget */
91 QTabWidget* tabbed_widget = new QTabWidget(main_widget); 73 QTabWidget* tabbed_widget = new QTabWidget(main_widget);
92 tabbed_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); 74 tabbed_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
93 75
94 /* main info tab */ 76 /* main info tab */
95 QWidget* main_information_widget = new QWidget(tabbed_widget); 77 AnimeInfoWidget* main_information_widget = new AnimeInfoWidget(anime, tabbed_widget);
96 main_information_widget->setLayout(new QVBoxLayout);
97
98 /* alt titles */
99 main_information_widget->layout()->addWidget(new TextWidgets::SelectableTextParagraph(
100 tr("Alternative titles"), QString::fromUtf8(Strings::Implode(anime.GetTitleSynonyms(), ", ").c_str()),
101 main_information_widget));
102
103 /* details */
104 QString details_data;
105 QTextStream details_data_s(&details_data);
106 details_data_s << Translate::ToString(anime.GetFormat()).c_str() << "\n"
107 << anime.GetEpisodes() << "\n"
108 << Translate::ToString(anime.GetUserStatus()).c_str() << "\n"
109 << Translate::ToString(anime.GetSeason()).c_str() << " " << anime.GetAirDate().GetYear() << "\n"
110 << Strings::Implode(anime.GetGenres(), ", ").c_str() << "\n"
111 << anime.GetAudienceScore() << "%";
112 main_information_widget->layout()->addWidget(
113 new TextWidgets::LabelledTextParagraph(tr("Details"), tr("Type:\nEpisodes:\nStatus:\nSeason:\nGenres:\nScore:"),
114 details_data, main_information_widget));
115
116 /* synopsis */
117 TextWidgets::SelectableTextParagraph* synopsis = new TextWidgets::SelectableTextParagraph(
118 tr("Synopsis"), QString::fromUtf8(anime.GetSynopsis().c_str()), main_information_widget);
119
120 synopsis->GetParagraph()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
121 main_information_widget->layout()->addWidget(synopsis);
122 78
123 QWidget* settings_widget = new QWidget(tabbed_widget); 79 QWidget* settings_widget = new QWidget(tabbed_widget);
124 settings_widget->setLayout(new QVBoxLayout); 80 settings_widget->setLayout(new QVBoxLayout);
125 settings_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum); 81 settings_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
126 82
134 90
135 /* these macros make this a lot easier to edit */ 91 /* these macros make this a lot easier to edit */
136 #define LAYOUT_HORIZ_SPACING 25 92 #define LAYOUT_HORIZ_SPACING 25
137 #define LAYOUT_VERT_SPACING 5 93 #define LAYOUT_VERT_SPACING 5
138 #define LAYOUT_ITEM_WIDTH 175 94 #define LAYOUT_ITEM_WIDTH 175
139 /* Creates a subsection with a width of 175 */
140 #define CREATE_SUBSECTION(x) \
141 { \
142 QWidget* subsection = new QWidget(section); \
143 subsection->setLayout(new QVBoxLayout); \
144 subsection->setFixedWidth(LAYOUT_ITEM_WIDTH); \
145 subsection->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred); \
146 subsection->layout()->setSpacing(LAYOUT_VERT_SPACING); \
147 subsection->layout()->setContentsMargins(0, 0, 0, 0); \
148 x; \
149 layout->addWidget(subsection); \
150 }
151 /* Creates a section in the parent `a` */
152 #define CREATE_SECTION(a, x) \
153 { \
154 QWidget* section = new QWidget(a); \
155 QHBoxLayout* layout = new QHBoxLayout(section); \
156 layout->setSpacing(LAYOUT_HORIZ_SPACING); \
157 layout->setContentsMargins(0, 0, 0, 0); \
158 x; \
159 layout->addStretch(); \
160 a->layout()->addWidget(section); \
161 }
162 /* Creates a subsection that takes up whatever space is necessary */ 95 /* Creates a subsection that takes up whatever space is necessary */
163 #define CREATE_FULL_WIDTH_SUBSECTION(x) \ 96 #define CREATE_FULL_WIDTH_SUBSECTION(x) \
164 { \ 97 { \
165 QWidget* subsection = new QWidget(section); \ 98 QWidget* subsection = new QWidget(section); \
166 subsection->setLayout(new QVBoxLayout); \ 99 subsection->setLayout(new QVBoxLayout); \
168 subsection->layout()->setSpacing(LAYOUT_VERT_SPACING); \ 101 subsection->layout()->setSpacing(LAYOUT_VERT_SPACING); \
169 subsection->layout()->setContentsMargins(0, 0, 0, 0); \ 102 subsection->layout()->setContentsMargins(0, 0, 0, 0); \
170 x; \ 103 x; \
171 layout->addWidget(subsection); \ 104 layout->addWidget(subsection); \
172 } 105 }
106
107 /* Creates a subsection with a width of 175 */
108 #define CREATE_SUBSECTION(x) CREATE_FULL_WIDTH_SUBSECTION(x subsection->setFixedWidth(LAYOUT_ITEM_WIDTH);)
109
173 /* Creates a section in the parent `a` */ 110 /* Creates a section in the parent `a` */
174 #define CREATE_FULL_WIDTH_SECTION(a, x) \ 111 #define CREATE_FULL_WIDTH_SECTION(a, x) \
175 { \ 112 { \
176 QWidget* section = new QWidget(a); \ 113 QWidget* section = new QWidget(a); \
177 QHBoxLayout* layout = new QHBoxLayout(section); \ 114 QHBoxLayout* layout = new QHBoxLayout(section); \
178 layout->setSpacing(LAYOUT_HORIZ_SPACING); \ 115 layout->setSpacing(LAYOUT_HORIZ_SPACING); \
179 layout->setContentsMargins(0, 0, 0, 0); \ 116 layout->setContentsMargins(0, 0, 0, 0); \
180 x; \ 117 x; \
181 a->layout()->addWidget(section); \ 118 a->layout()->addWidget(section); \
182 } 119 }
120
121 /* Creates a section in the parent `a` */
122 #define CREATE_SECTION(a, x) CREATE_FULL_WIDTH_SECTION(a, x layout->addStretch();)
183 123
184 CREATE_SECTION(sg_anime_list_content, { 124 CREATE_SECTION(sg_anime_list_content, {
185 /* Episodes watched section */ 125 /* Episodes watched section */
186 CREATE_SUBSECTION({ 126 CREATE_SUBSECTION({
187 subsection->layout()->addWidget(new QLabel(tr("Episodes watched:"), subsection)); 127 subsection->layout()->addWidget(new QLabel(tr("Episodes watched:"), subsection));
302 #undef CREATE_SECTION 242 #undef CREATE_SECTION
303 #undef CREATE_SUBSECTION 243 #undef CREATE_SUBSECTION
304 #undef CREATE_FULL_WIDTH_SECTION 244 #undef CREATE_FULL_WIDTH_SECTION
305 #undef CREATE_FULL_WIDTH_SUBSECTION 245 #undef CREATE_FULL_WIDTH_SUBSECTION
306 246
307 static_cast<QBoxLayout*>(settings_widget->layout())->addStretch(); 247 reinterpret_cast<QBoxLayout*>(settings_widget->layout())->addStretch();
308 248
309 tabbed_widget->addTab(main_information_widget, tr("Main information")); 249 tabbed_widget->addTab(main_information_widget, tr("Main information"));
310 tabbed_widget->addTab(settings_widget, tr("My list and settings")); 250 tabbed_widget->addTab(settings_widget, tr("My list and settings"));
311 251
312 QVBoxLayout* main_layout = new QVBoxLayout; 252 QVBoxLayout* main_layout = new QVBoxLayout;