// SPDX-FileCopyrightText: 2023 Joshua Goins // // SPDX-License-Identifier: GPL-3.0-or-later #include "mainwindow.h" #include #include #include #include #include #include #include "aboutwindow.h" #include "artconfigwindow.h" #include "artdetailwindow.h" #include "artmodel.h" MainWindow::MainWindow(const QDir &definitionDirectory, const QDir &assetDirectory, const QDir &dataDirectory, QWidget *parent) : QMainWindow(parent) { setWindowTitle(i18nc("@title:window", "Redai")); setMinimumSize(1280, 720); auto menuBar = new QMenuBar(); setMenuBar(menuBar); auto fileMenu = menuBar->addMenu(i18nc("@title:menu", "File")); auto quitAction = fileMenu->addAction(i18nc("@action:inmenu", "Quit")); quitAction->setIcon(QIcon::fromTheme(QStringLiteral("gtk-quit"))); connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit); auto manageMenu = menuBar->addMenu(i18nc("@title:menu Manage site", "Manage")); auto editConfigAction = manageMenu->addAction(i18nc("@action:inmenu", "Edit Config...")); editConfigAction->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); connect(editConfigAction, &QAction::triggered, this, [this, dataDirectory, definitionDirectory, assetDirectory] { auto window = new ArtConfigWindow(dataDirectory.absoluteFilePath(QStringLiteral("art-config.json")), definitionDirectory.absolutePath(), assetDirectory.absolutePath(), this); window->show(); }); auto helpMenu = menuBar->addMenu(i18nc("@title:menu", "Help")); auto donateAction = helpMenu->addAction(i18nc("@action:inmenu", "Donate")); connect(donateAction, &QAction::triggered, this, [] { QDesktopServices::openUrl(QUrl(QStringLiteral("https://redstrate.com/fund"))); }); donateAction->setIcon(QIcon::fromTheme(QStringLiteral("help-donate"))); helpMenu->addSeparator(); auto aboutNovusAction = helpMenu->addAction(i18nc("@action:inmenu", "About Redai")); aboutNovusAction->setIcon(QIcon::fromTheme(QStringLiteral("help-about"))); connect(aboutNovusAction, &QAction::triggered, this, [this] { auto window = new AboutWindow(this); window->show(); }); auto aboutQtAction = helpMenu->addAction(i18nc("@action:inmenu", "About Qt")); aboutQtAction->setIcon(QIcon(QStringLiteral(":/qt-project.org/qmessagebox/images/qtlogo-64.png"))); connect(aboutQtAction, &QAction::triggered, QApplication::instance(), &QApplication::aboutQt); auto model = new ArtModel(definitionDirectory, assetDirectory); auto pieceListView = new QTableView(); pieceListView->setModel(model); pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows); pieceListView->setSelectionMode(QAbstractItemView::SingleSelection); QHeaderView *verticalHeader = pieceListView->verticalHeader(); verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents); QHeaderView *horizontalHeader = pieceListView->horizontalHeader(); horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents); connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](const QModelIndex index) { const QString filename = index.data(Qt::UserRole + 1).toString(); const QJsonObject object = index.data(Qt::UserRole).toJsonObject(); auto window = new ArtDetailWindow(filename, assetDirectory, this); window->show(); }); setCentralWidget(pieceListView); }