redai/src/mainwindow.cpp

89 lines
3.6 KiB
C++
Raw Normal View History

2023-08-31 09:09:52 +02:00
// SPDX-FileCopyrightText: 2023 Joshua Goins <josh@redstrate.com>
//
// SPDX-License-Identifier: GPL-3.0-or-later
#include "mainwindow.h"
2023-03-27 12:49:53 -04:00
2023-08-31 13:34:34 +02:00
#include <KLocalizedString>
2023-09-02 18:04:16 -04:00
#include <QApplication>
#include <QDesktopServices>
2023-03-27 12:49:53 -04:00
#include <QHeaderView>
2023-06-15 15:19:34 -04:00
#include <QMenuBar>
2023-08-31 13:34:34 +02:00
#include <QTableView>
2023-03-27 12:49:53 -04:00
2023-09-02 18:04:16 -04:00
#include "aboutwindow.h"
#include "artconfigwindow.h"
#include "artdetailwindow.h"
#include "artmodel.h"
2023-03-27 12:49:53 -04:00
MainWindow::MainWindow(const QDir &definitionDirectory, const QDir &assetDirectory, const QDir &dataDirectory, QWidget *parent)
: QMainWindow(parent)
2023-08-31 13:39:00 +02:00
{
2023-08-31 13:34:34 +02:00
setWindowTitle(i18nc("@title:window", "Redai"));
setMinimumSize(1280, 720);
2023-03-27 12:49:53 -04:00
2023-08-31 13:34:34 +02:00
auto menuBar = new QMenuBar();
setMenuBar(menuBar);
2023-06-15 15:19:34 -04:00
2023-09-02 18:04:16 -04:00
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);
2023-08-31 13:34:34 +02:00
auto manageMenu = menuBar->addMenu(i18nc("@title:menu Manage site", "Manage"));
2023-06-15 15:19:34 -04:00
2023-08-31 13:34:34 +02:00
auto editConfigAction = manageMenu->addAction(i18nc("@action:inmenu", "Edit Config..."));
2023-09-02 18:04:16 -04:00
editConfigAction->setIcon(QIcon::fromTheme(QStringLiteral("configure")));
connect(editConfigAction, &QAction::triggered, this, [this, dataDirectory, definitionDirectory, assetDirectory] {
2023-09-02 18:04:16 -04:00
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);
2023-08-31 13:34:34 +02:00
window->show();
});
2023-06-15 15:19:34 -04:00
2023-09-02 18:04:16 -04:00
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);
2023-08-31 13:34:34 +02:00
auto model = new ArtModel(definitionDirectory, assetDirectory);
2023-03-27 12:49:53 -04:00
2023-08-31 13:34:34 +02:00
auto pieceListView = new QTableView();
2023-08-31 13:39:59 +02:00
pieceListView->setModel(model);
pieceListView->setSelectionBehavior(QAbstractItemView::SelectionBehavior::SelectRows);
pieceListView->setSelectionMode(QAbstractItemView::SingleSelection);
2023-03-27 12:49:53 -04:00
2023-08-31 13:39:59 +02:00
QHeaderView *verticalHeader = pieceListView->verticalHeader();
verticalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
2023-03-27 12:49:53 -04:00
2023-08-31 13:39:59 +02:00
QHeaderView *horizontalHeader = pieceListView->horizontalHeader();
horizontalHeader->setSectionResizeMode(QHeaderView::ResizeToContents);
2023-03-27 12:49:53 -04:00
connect(pieceListView, &QListView::clicked, this, [this, assetDirectory](const QModelIndex index) {
2023-08-31 13:39:59 +02:00
const QString filename = index.data(Qt::UserRole + 1).toString();
const QJsonObject object = index.data(Qt::UserRole).toJsonObject();
2023-03-27 12:49:53 -04:00
2023-08-31 13:39:59 +02:00
auto window = new ArtDetailWindow(filename, assetDirectory, this);
window->show();
});
2023-03-27 12:49:53 -04:00
2023-08-31 13:39:59 +02:00
setCentralWidget(pieceListView);
2023-03-27 12:49:53 -04:00
}