From 1257459237f8dea5646e4ade8c3dfbf7c6a23439 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 15 Jun 2023 15:19:34 -0400 Subject: [PATCH] Add art config window --- ArtConfigWindow.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++ ArtConfigWindow.h | 22 ++++++++++++ CMakeLists.txt | 2 +- MainWindow.cpp | 15 +++++++- MainWindow.h | 2 +- main.cpp | 12 ++++--- 6 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 ArtConfigWindow.cpp create mode 100644 ArtConfigWindow.h diff --git a/ArtConfigWindow.cpp b/ArtConfigWindow.cpp new file mode 100644 index 0000000..ebc733b --- /dev/null +++ b/ArtConfigWindow.cpp @@ -0,0 +1,86 @@ +#include "ArtConfigWindow.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +ArtConfigWindow::ArtConfigWindow(const QString& filename, QWidget* parent) : QDialog(parent) { + setWindowModality(Qt::WindowModality::WindowModal); + setWindowTitle(filename); + + auto mainLayout = new QHBoxLayout(); + setLayout(mainLayout); + + auto formLayout = new QFormLayout(); + auto formLayoutWidget = new QWidget(); + formLayoutWidget->setMaximumWidth(450); + formLayoutWidget->setLayout(formLayout); + mainLayout->addWidget(formLayoutWidget); + + QScrollArea* galleryScrollArea = new QScrollArea(); + formLayout->addWidget(galleryScrollArea); + + m_newBannerEdit = new QLineEdit(); + formLayout->addRow("New Banner", m_newBannerEdit); + + m_commissionsOpen = new QCheckBox(); + formLayout->addRow("Commissions Open", m_commissionsOpen); + + auto bottomButtonLayout = new QHBoxLayout(); + formLayout->addRow(bottomButtonLayout); + + auto cancelButton = new QPushButton(QIcon::fromTheme("dialog-close"), "Cancel"); + connect(cancelButton, &QPushButton::clicked, this, [=] { + close(); + }); + bottomButtonLayout->addWidget(cancelButton); + bottomButtonLayout->addStretch(1); + + auto saveButton = new QPushButton(QIcon::fromTheme("dialog-ok"), "Save"); + connect(saveButton, &QPushButton::clicked, this, [=] { + saveData(filename); + }); + bottomButtonLayout->addWidget(saveButton); + + if(QFile::exists(filename)) { + loadData(filename); + } +} + +void ArtConfigWindow::loadData(const QString& filename) { + qDebug() << "Loading data from" << filename; + + QFile artFile(filename); + artFile.open(QFile::ReadOnly); + QJsonDocument artJson = QJsonDocument::fromJson(artFile.readAll()); + + m_newBannerEdit->setText(artJson["new-banner"].toString()); + m_commissionsOpen->setChecked(artJson["commissions"].toBool()); +} + +void ArtConfigWindow::saveData(const QString& filename) { + qDebug() << "Saving data to" << filename; + + QJsonObject object; + object["new-banner"] = m_newBannerEdit->text(); + object["commissions"] = m_commissionsOpen->isChecked(); + + QJsonDocument jsonDoc(object); + QFile file(filename); + file.open(QFile::WriteOnly); + file.write(jsonDoc.toJson()); + file.close(); + + close(); +} + diff --git a/ArtConfigWindow.h b/ArtConfigWindow.h new file mode 100644 index 0000000..ea31a7e --- /dev/null +++ b/ArtConfigWindow.h @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include + +class ArtConfigWindow : public QDialog { +public: + ArtConfigWindow(const QString& filename, QWidget* parent = nullptr); + +private: + void loadData(const QString& filename); + void saveData(const QString& filename); + + QLineEdit* m_newBannerEdit = nullptr; + QCheckBox* m_commissionsOpen = nullptr; +}; \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index e8578ea..1148641 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,7 +13,7 @@ find_package(Qt5 COMPONENTS Concurrent REQUIRED) -add_executable(Redai main.cpp MainWindow.cpp MainWindow.h ArtModel.cpp ArtModel.h ArtDetailWindow.cpp ArtDetailWindow.h imagelabel.cpp imagelabel.h) +add_executable(Redai main.cpp ArtConfigWindow.cpp ArtDetailWindow.h MainWindow.cpp MainWindow.h ArtModel.cpp ArtModel.h ArtDetailWindow.cpp ArtDetailWindow.h imagelabel.cpp imagelabel.h) target_link_libraries(Redai Qt5::Core Qt5::Gui diff --git a/MainWindow.cpp b/MainWindow.cpp index 5f5d6a5..88ddd2a 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -2,14 +2,27 @@ #include #include +#include +#include "ArtConfigWindow.h" #include "ArtDetailWindow.h" #include "ArtModel.h" -MainWindow::MainWindow(const QString& definitionDirectory, const QString& assetDirectory) { +MainWindow::MainWindow(const QString& definitionDirectory, const QString& assetDirectory, const QString& dataDirectory) { setWindowTitle("Redai"); setMinimumSize(1280, 720); + auto menuBar = new QMenuBar(); + setMenuBar(menuBar); + + auto manageMenu = menuBar->addMenu("Manage"); + + auto editConfigAction = manageMenu->addAction("Edit Config..."); + connect(editConfigAction, &QAction::triggered, this, [this, dataDirectory] { + auto window = new ArtConfigWindow(QStringLiteral("%1/art-config.json").arg(dataDirectory), this); + window->show(); + }); + auto model = new ArtModel(definitionDirectory, assetDirectory); auto pieceListView = new QTableView(); diff --git a/MainWindow.h b/MainWindow.h index d93aa29..1ac48c2 100644 --- a/MainWindow.h +++ b/MainWindow.h @@ -4,5 +4,5 @@ class MainWindow : public QMainWindow { public: - explicit MainWindow(const QString& definitionDirectory, const QString& assetDirectory); + explicit MainWindow(const QString& definitionDirectory, const QString& assetDirectory, const QString& dataDirectory); }; diff --git a/main.cpp b/main.cpp index e564ea3..3c1fffe 100644 --- a/main.cpp +++ b/main.cpp @@ -7,18 +7,22 @@ int main(int argc, char *argv[]) { QApplication app(argc, argv); QCommandLineParser parser; - parser.addPositionalArgument("definition-path", QCoreApplication::translate("main", "Art definition directory.")); - parser.addPositionalArgument("asset-path", QCoreApplication::translate("main", "Art asset directory.")); + parser.addPositionalArgument("site-path", QCoreApplication::translate("main", "Site directory.")); parser.process(app); auto args = parser.positionalArguments(); - if (args.size() < 2) { + if (args.size() < 1) { return -1; } - MainWindow window(args[0], args[1]); + QString sitePath = args[0]; + QString defPath = QString("%1/art").arg(sitePath); + QString assetPath = QString("%1/assets/art").arg(sitePath); + QString dataPath = QString("%1/data").arg(sitePath); + + MainWindow window(defPath, assetPath, dataPath); window.show(); return QApplication::exec();