From 2144ada2a83156c95b7b6664d9c1bc7bd1190237 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sat, 2 Sep 2023 18:04:16 -0400 Subject: [PATCH] Add Quit, About actions to the menubar --- CMakeLists.txt | 2 ++ src/aboutwindow.cpp | 64 +++++++++++++++++++++++++++++++++++++++++++++ src/aboutwindow.h | 9 +++++++ src/mainwindow.cpp | 37 ++++++++++++++++++++++++-- 4 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 src/aboutwindow.cpp create mode 100644 src/aboutwindow.h diff --git a/CMakeLists.txt b/CMakeLists.txt index f63dc78..ecf82bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,8 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS I18n) add_executable(Redai) target_sources(Redai PRIVATE + src/aboutwindow.cpp + src/artconfigwindow.h src/artconfigwindow.cpp src/artconfigwindow.h src/artdetailwindow.cpp diff --git a/src/aboutwindow.cpp b/src/aboutwindow.cpp new file mode 100644 index 0000000..175337a --- /dev/null +++ b/src/aboutwindow.cpp @@ -0,0 +1,64 @@ +#include "aboutwindow.h" + +#include +#include +#include +#include +#include + +AboutWindow::AboutWindow(QWidget *widget) + : QDialog(widget) +{ + setWindowTitle("About"); + setWindowModality(Qt::WindowModality::ApplicationModal); + + auto mainLayout = new QVBoxLayout(); + setLayout(mainLayout); + + auto mainLabel = new QLabel(); + mainLabel->setText(QString("

%1

").arg(QCoreApplication::applicationName())); + mainLayout->addWidget(mainLabel); + + auto aboutWidget = new QWidget(); + auto aboutLayout = new QVBoxLayout(); + aboutWidget->setLayout(aboutLayout); + + auto aboutLabel = new QLabel(); + aboutLabel->setText("Tool manage website galleries."); + aboutLayout->addWidget(aboutLabel); + + auto websiteLabel = new QLabel(); + websiteLabel->setText("https://git.sr.ht/~redstrate/redai"); + websiteLabel->setOpenExternalLinks(true); + aboutLayout->addWidget(websiteLabel); + + auto licenseLabel = new QLabel(); + licenseLabel->setText("License: GNU General Public License Version 3"); + aboutLayout->addWidget(licenseLabel); + + aboutLayout->addStretch(); + + auto authorsWidget = new QWidget(); + auto authorsLayout = new QVBoxLayout(); + authorsWidget->setLayout(authorsLayout); + + auto authorNameLabel = new QLabel(); + authorNameLabel->setText("Joshua Goins"); + + QFont boldFont = authorNameLabel->font(); + boldFont.setBold(true); + authorNameLabel->setFont(boldFont); + + authorsLayout->addWidget(authorNameLabel); + + auto authorRoleLabel = new QLabel(); + authorRoleLabel->setText("Maintainer"); + authorsLayout->addWidget(authorRoleLabel); + + authorsLayout->addStretch(); + + auto tabWidget = new QTabWidget(); + tabWidget->addTab(aboutWidget, "About"); + tabWidget->addTab(authorsWidget, "Authors"); + mainLayout->addWidget(tabWidget); +} \ No newline at end of file diff --git a/src/aboutwindow.h b/src/aboutwindow.h new file mode 100644 index 0000000..351e65a --- /dev/null +++ b/src/aboutwindow.h @@ -0,0 +1,9 @@ +#pragma once + +#include + +class AboutWindow : public QDialog +{ +public: + explicit AboutWindow(QWidget *widget = nullptr); +}; \ No newline at end of file diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c355b3c..2806bf4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -5,10 +5,13 @@ #include "mainwindow.h" #include +#include +#include #include #include #include +#include "aboutwindow.h" #include "artconfigwindow.h" #include "artdetailwindow.h" #include "artmodel.h" @@ -22,15 +25,45 @@ MainWindow::MainWindow(const QDir &definitionDirectory, const QDir &assetDirecto 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("art-config.json"), definitionDirectory.absolutePath(), assetDirectory.absolutePath(), this); + 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();