diff --git a/armoury/CMakeLists.txt b/armoury/CMakeLists.txt index c27556e..7e5ce7c 100644 --- a/armoury/CMakeLists.txt +++ b/armoury/CMakeLists.txt @@ -10,6 +10,7 @@ target_sources(novus-armoury PRIVATE include/gearlistwidget.h include/gearview.h include/mainwindow.h + include/settingswindow.h include/singlegearview.h src/boneeditor.cpp @@ -20,6 +21,7 @@ target_sources(novus-armoury PRIVATE src/gearview.cpp src/main.cpp src/mainwindow.cpp + src/settingswindow.cpp src/singlegearview.cpp) target_include_directories(novus-armoury diff --git a/armoury/include/settingswindow.h b/armoury/include/settingswindow.h new file mode 100644 index 0000000..5ae288c --- /dev/null +++ b/armoury/include/settingswindow.h @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +class SettingsWindow : public QWidget +{ +public: + explicit SettingsWindow(QWidget *parent = nullptr); + +private: + void applySettings(); + + QLineEdit *m_outputLineEdit = nullptr; +}; \ No newline at end of file diff --git a/armoury/src/mainwindow.cpp b/armoury/src/mainwindow.cpp index 78bffef..7030836 100644 --- a/armoury/src/mainwindow.cpp +++ b/armoury/src/mainwindow.cpp @@ -20,6 +20,7 @@ #include "cmpeditor.h" #include "filecache.h" #include "gearlistwidget.h" +#include "settingswindow.h" MainWindow::MainWindow(GameData *in_data) : NovusMainWindow() @@ -68,6 +69,12 @@ void MainWindow::setupAdditionalMenus(QMenuBar *menuBar) auto cmpEditor = new CmpEditor(&data); cmpEditor->show(); }); + + auto settingsMenu = toolsMenu->addAction(QStringLiteral("Settings...")); + connect(settingsMenu, &QAction::triggered, [this] { + auto settingsWindow = new SettingsWindow(); + settingsWindow->show(); + }); } #include "moc_mainwindow.cpp" diff --git a/armoury/src/settingswindow.cpp b/armoury/src/settingswindow.cpp new file mode 100644 index 0000000..4f989db --- /dev/null +++ b/armoury/src/settingswindow.cpp @@ -0,0 +1,69 @@ +#include "settingswindow.h" + +#include +#include +#include +#include +#include +#include +#include + +SettingsWindow::SettingsWindow(QWidget *parent) + : QWidget(parent) +{ + setWindowTitle(QStringLiteral("Settings")); + + auto layout = new QVBoxLayout(); + setLayout(layout); + + auto penumbraBox = new QGroupBox(QStringLiteral("Penumbra Output")); + layout->addWidget(penumbraBox); + + auto penumbraLayout = new QFormLayout(); + penumbraBox->setLayout(penumbraLayout); + + auto outputBoxLayoutContainer = new QWidget(this); + auto outputBoxLayout = new QHBoxLayout(outputBoxLayoutContainer); + outputBoxLayout->setContentsMargins(0, 0, 0, 0); + + KConfig config(QStringLiteral("novusrc")); + KConfigGroup game = config.group("Armoury"); + + m_outputLineEdit = new QLineEdit(); + m_outputLineEdit->setText(game.readEntry("PenumbraOutputDirectory")); + m_outputLineEdit->setClearButtonEnabled(true); + outputBoxLayout->addWidget(m_outputLineEdit); + + auto selectHomeUrlButton = new QPushButton(QIcon::fromTheme(QStringLiteral("folder-open")), QString()); + connect(selectHomeUrlButton, &QPushButton::clicked, this, [this] { + QUrl url = QFileDialog::getExistingDirectoryUrl(this, QString()); + if (!url.isEmpty()) { + m_outputLineEdit->setText(url.toDisplayString(QUrl::PreferLocalFile)); + } + }); + outputBoxLayout->addWidget(selectHomeUrlButton); + + penumbraLayout->addRow(QStringLiteral("Output Directory"), outputBoxLayoutContainer); + + auto bottomButtonLayout = new QHBoxLayout(); + layout->addLayout(bottomButtonLayout); + + auto cancelButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-close")), QStringLiteral("Cancel")); + connect(cancelButton, &QPushButton::clicked, this, &QWidget::close); + bottomButtonLayout->addWidget(cancelButton); + bottomButtonLayout->addStretch(1); + + auto saveButton = new QPushButton(QIcon::fromTheme(QStringLiteral("dialog-ok")), QStringLiteral("Apply")); + connect(saveButton, &QPushButton::clicked, this, [this] { + applySettings(); + close(); + }); + bottomButtonLayout->addWidget(saveButton); +} + +void SettingsWindow::applySettings() +{ + KConfig config(QStringLiteral("novusrc")); + KConfigGroup game = config.group("Armoury"); + game.writeEntry("PenumbraOutputDirectory", m_outputLineEdit->text()); +}