diff src/main.cpp @ 1:1ae666fdf9e2

*: initial commit
author Paper <mrpapersonic@gmail.com>
date Tue, 08 Aug 2023 19:49:15 -0400
parents
children 23d0d9319a00
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main.cpp	Tue Aug 08 19:49:15 2023 -0400
@@ -0,0 +1,205 @@
+#include "window.h"
+#include "config.h"
+#include "anime.h"
+#if APPLE
+#include "sys/osx/dark_theme.h"
+#elif WIN32
+#include "sys/win32/dark_theme.h"
+#endif
+
+Session session = {
+	.config = Config()
+};
+
+/* note that this code was originally created for use in 
+   wxWidgets, but I thought the API was a little meh, so
+   I switched to Qt. */
+
+MainWindow::MainWindow(QWidget* parent) :
+           QMainWindow(parent) {
+	/* Menu Bar */
+	QAction* action;
+	QMenuBar* menubar = new QMenuBar(parent);
+	QMenu* menu = menubar->addMenu("&File");
+	QMenu* submenu = menu->addMenu("&Library folders");
+	action = new QAction("&Add new folder...");
+	submenu->addAction(action);
+	action = new QAction("&Scan available episodes");
+	menu->addAction(action);
+
+	menu->addSeparator();
+
+	action = menu->addAction("Play &next episode");
+	action = menu->addAction("Play &random episode");
+	menu->addSeparator();
+	action = menu->addAction("E&xit", qApp, &QApplication::quit);
+
+	menu = menubar->addMenu("&Services");
+	action = new QAction("Synchronize &list");
+
+	menu->addSeparator();
+
+	submenu = menu->addMenu("&AniList");
+	action = menu->addAction("Go to my &profile");
+	action = menu->addAction("Go to my &stats");
+
+	submenu = menu->addMenu("&Kitsu");
+	action = submenu->addAction("Go to my &feed");
+	action = submenu->addAction("Go to my &library");
+	action = submenu->addAction("Go to my &profile");
+
+	submenu = menu->addMenu("&MyAnimeList");
+	action = submenu->addAction("Go to my p&anel");
+	action = submenu->addAction("Go to my &profile");
+	action = submenu->addAction("Go to my &history");
+
+	menu = menubar->addMenu("&Tools");
+	submenu = menu->addMenu("&Export anime list");
+	action = submenu->addAction("Export as &Markdown...");
+	action = submenu->addAction("Export as MyAnimeList &XML...");
+
+	menu->addSeparator();
+
+	action = menu->addAction("Enable anime &recognition");
+	action->setCheckable(true);
+	action = menu->addAction("Enable auto &sharing");
+	action->setCheckable(true);
+	action = menu->addAction("Enable &auto synchronization");
+	action->setCheckable(true);
+
+	menu->addSeparator();
+
+	action = menu->addAction("&Settings");
+
+	setMenuBar(menubar);
+	
+	/* Side toolbar */
+	QToolBar* toolbar = new QToolBar(parent);
+	QActionGroup* tb_action_group = new QActionGroup(toolbar);
+
+	action = toolbar->addAction("Now Playing");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+
+	toolbar->addSeparator();
+
+	action = toolbar->addAction("Anime List", [this]() {
+		setCentralWidget(anime_list_page);
+	});
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+	action->setChecked(true);
+	anime_list_page = new AnimeListPage(parent);
+	SetActivePage(anime_list_page);
+	action = toolbar->addAction("History");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+	action = toolbar->addAction("Statistics");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+
+	toolbar->addSeparator();
+
+	action = toolbar->addAction("Search");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+	action = toolbar->addAction("Seasons");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+	action = toolbar->addAction("Torrents");
+	action->setActionGroup(tb_action_group);
+	action->setCheckable(true);
+
+	toolbar->setMovable(false);
+	toolbar->setFloatable(false);
+
+	addToolBar(Qt::LeftToolBarArea, toolbar);
+	
+	ThemeChanged();
+}
+
+void MainWindow::SetStyleSheet(enum Themes theme) {
+	switch (theme) {
+		case DARK: {
+			QFile f(":qdarkstyle/dark/darkstyle.qss");
+			if (!f.exists())
+				return; // fail
+			f.open(QFile::ReadOnly | QFile::Text);
+			QTextStream ts(&f);
+			setStyleSheet(ts.readAll());
+			break;
+		}
+		default:
+			setStyleSheet("");
+			break;
+	}
+}
+
+void MainWindow::ThemeChanged() {
+	switch (session.config.theme) {
+		case LIGHT: {
+#if APPLE
+			if (osx::DarkThemeAvailable())
+				osx::SetToLightTheme();
+			else
+				SetStyleSheet(LIGHT);
+#else
+			SetStyleSheet(LIGHT);
+#endif
+			break;
+		}
+		case DARK: {
+#if APPLE
+			if (osx::DarkThemeAvailable())
+				osx::SetToDarkTheme();
+			else
+				SetStyleSheet(DARK);
+#else
+			SetStyleSheet(DARK);
+#endif
+			break;
+		}
+		case OS: {
+#if APPLE
+			if (osx::DarkThemeAvailable())
+				osx::SetToAutoTheme();
+			else
+				SetStyleSheet(LIGHT);
+#elif defined(WIN32)
+			if (win32::DarkThemeAvailable()) {
+				if (win32::IsInDarkTheme()) {
+					SetStyleSheet(DARK);
+				} else {
+					SetStyleSheet(LIGHT);
+				}
+			}
+#else
+			SetStyleSheet(LIGHT);
+#endif
+			break;
+		}
+	}
+}
+
+void MainWindow::SetActivePage(QWidget* page) {
+	this->setCentralWidget(page);
+}
+
+void MainWindow::closeEvent(QCloseEvent* event) {
+	session.config.Save();
+	event->accept();
+}
+
+int main(int argc, char** argv) {
+	QApplication app(argc, argv);
+
+	session.config.Load();
+
+	MainWindow window;
+
+	window.resize(941, 750);
+	window.setWindowTitle("Weeaboo");
+	window.show();
+
+	return app.exec();
+}