diff src/gui/dialog/information.cpp @ 9:5c0397762b53

INCOMPLETE: megacommit :)
author Paper <mrpapersonic@gmail.com>
date Sun, 10 Sep 2023 03:59:16 -0400
parents
children 4b198a111713
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/gui/dialog/information.cpp	Sun Sep 10 03:59:16 2023 -0400
@@ -0,0 +1,108 @@
+#include "gui/dialog/information.h"
+#include "core/anime.h"
+#include "core/strings.h"
+#include "gui/pages/anime_list.h"
+#include "gui/translate/anime.h"
+#include "gui/ui_utils.h"
+#include "gui/window.h"
+#include <QDebug>
+#include <QDialogButtonBox>
+#include <QPlainTextEdit>
+#include <QTextStream>
+#include <QVBoxLayout>
+#include <functional>
+
+InformationDialog::InformationDialog(Anime::Anime& anime, std::function<void()> accept, QWidget* parent)
+	: QDialog(parent) {
+	setFixedSize(842, 613);
+	setWindowTitle(tr("Anime Information"));
+	setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
+	setObjectName("infodiag");
+	setStyleSheet(UiUtils::IsInDarkMode() ? "" : "QDialog#infodiag{background-color: white;}");
+
+	QWidget* widget = new QWidget(this);
+
+	/* "sidebar", includes... just the anime image :) */
+	QWidget* sidebar = new QWidget(widget);
+	sidebar->setFixedWidth(175);
+
+	/* main widget */
+	QWidget* main_widget = new QWidget(widget);
+	main_widget->setStyleSheet(UiUtils::IsInDarkMode() ? "" : "background-color: white");
+	main_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+
+	/* anime title header text */
+	UiUtils::Paragraph* anime_title =
+		new UiUtils::Paragraph(QString::fromUtf8(anime.GetUserPreferredTitle().c_str()), main_widget);
+	anime_title->setReadOnly(true);
+	anime_title->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	anime_title->setWordWrapMode(QTextOption::NoWrap);
+	anime_title->setFrameShape(QFrame::NoFrame);
+	anime_title->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
+	anime_title->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	anime_title->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+	anime_title->setStyleSheet("font-size: 16px; color: blue; background: transparent;");
+
+	/* tabbed widget */
+	QTabWidget* tabbed_widget = new QTabWidget(main_widget);
+	tabbed_widget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+
+	/* main info tab */
+	QWidget* main_information_widget = new QWidget(tabbed_widget);
+	main_information_widget->setLayout(new QVBoxLayout);
+
+	/* alt titles */
+	main_information_widget->layout()->addWidget(new UiUtils::SelectableTextParagraph(
+		"Alternative titles", QString::fromUtf8(StringUtils::Implode(anime.GetTitleSynonyms(), ", ").c_str()),
+		main_information_widget));
+
+	/* details */
+	QString details_data;
+	QTextStream details_data_s(&details_data);
+	details_data_s << Translate::TranslateSeriesFormat(anime.GetFormat()).c_str() << "\n"
+				   << anime.GetEpisodes() << "\n"
+				   << Translate::TranslateListStatus(anime.GetUserStatus()).c_str() << "\n"
+				   << Translate::TranslateSeriesSeason(anime.GetSeason()).c_str() << " " << anime.GetAirDate().GetYear()
+				   << "\n"
+				   << StringUtils::Implode(anime.GetGenres(), ", ").c_str() << "\n"
+				   << anime.GetAudienceScore() << "%";
+	main_information_widget->layout()->addWidget(new UiUtils::LabelledTextParagraph(
+		"Details", "Type:\nEpisodes:\nStatus:\nSeason:\nGenres:\nScore:", details_data, main_information_widget));
+
+	/* synopsis */
+	UiUtils::SelectableTextParagraph* synopsis = new UiUtils::SelectableTextParagraph(
+		"Synopsis", QString::fromUtf8(anime.GetSynopsis().c_str()), main_information_widget);
+
+	synopsis->GetParagraph()->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+	((QVBoxLayout*)main_information_widget->layout())->addWidget(synopsis);
+
+	QWidget* settings_widget = new QWidget(tabbed_widget);
+
+	tabbed_widget->addTab(main_information_widget, "Main information");
+	tabbed_widget->addTab(settings_widget, "My list and settings");
+
+	QVBoxLayout* main_layout = new QVBoxLayout;
+	main_layout->addWidget(anime_title);
+	main_layout->addWidget(tabbed_widget);
+	main_layout->setMargin(0);
+	main_widget->setLayout(main_layout);
+
+	QHBoxLayout* layout = new QHBoxLayout;
+	layout->addWidget(sidebar);
+	layout->addWidget(main_widget);
+	widget->setLayout(layout);
+
+	QDialogButtonBox* button_box = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
+	connect(button_box, &QDialogButtonBox::accepted, this, [this, accept] {
+		accept();
+		QDialog::accept();
+	});
+	connect(button_box, &QDialogButtonBox::rejected, this, &QDialog::reject);
+
+	QVBoxLayout* buttons_layout = new QVBoxLayout;
+	buttons_layout->addWidget(widget);
+	buttons_layout->addWidget(button_box, 0, Qt::AlignBottom);
+	setLayout(buttons_layout);
+}
+
+#include "gui/dialog/moc_information.cpp"