1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-24 21:07:46 +00:00

Add a settings dialog to armoury to set Penumbra output directory

This commit is contained in:
Joshua Goins 2023-12-09 16:34:51 -05:00
parent 6a42c81393
commit 82226defba
4 changed files with 93 additions and 0 deletions

View file

@ -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

View file

@ -0,0 +1,15 @@
#pragma once
#include <QLineEdit>
#include <QWidget>
class SettingsWindow : public QWidget
{
public:
explicit SettingsWindow(QWidget *parent = nullptr);
private:
void applySettings();
QLineEdit *m_outputLineEdit = nullptr;
};

View file

@ -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"

View file

@ -0,0 +1,69 @@
#include "settingswindow.h"
#include <KConfig>
#include <KConfigGroup>
#include <QFileDialog>
#include <QFormLayout>
#include <QGroupBox>
#include <QPushButton>
#include <QVBoxLayout>
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());
}