diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index fd97121e..b3179047 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2607,8 +2607,6 @@ - - @@ -2897,11 +2895,6 @@ Ctrl+Shift+N - - - Themes... - - Export Map Stitch Image... diff --git a/forms/preferenceeditor.ui b/forms/preferenceeditor.ui index 78b6da04..d9e7fa72 100644 --- a/forms/preferenceeditor.ui +++ b/forms/preferenceeditor.ui @@ -16,7 +16,7 @@ - + Preferred Text Editor @@ -60,6 +60,19 @@ + + + + + 0 + 0 + + + + Application Theme + + + diff --git a/include/editor.h b/include/editor.h index fc8cfe26..748759b6 100644 --- a/include/editor.h +++ b/include/editor.h @@ -65,7 +65,6 @@ public: void displayMapBorder(); void displayMapGrid(); void displayWildMonTables(); - void maskNonVisibleConnectionTiles(); void updateMapBorder(); void updateMapConnections(); @@ -154,6 +153,9 @@ public: void shouldReselectEvents(); void scaleMapView(int); +public slots: + void maskNonVisibleConnectionTiles(); + private: void setConnectionItemsVisible(bool); void setBorderItemsVisible(bool, qreal = 1); diff --git a/include/mainwindow.h b/include/mainwindow.h index 7cc74e6a..6293c627 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -218,7 +218,6 @@ private slots: void on_toolButton_ExpandAll_clicked(); void on_toolButton_CollapseAll_clicked(); void on_actionAbout_Porymap_triggered(); - void on_actionThemes_triggered(); void on_pushButton_AddCustomHeaderField_clicked(); void on_pushButton_DeleteCustomHeaderField_clicked(); void on_tableWidget_CustomHeaderFields_cellChanged(int row, int column); diff --git a/include/ui/preferenceeditor.h b/include/ui/preferenceeditor.h index 74085b6a..c16716d9 100644 --- a/include/ui/preferenceeditor.h +++ b/include/ui/preferenceeditor.h @@ -3,6 +3,7 @@ #include +class NoScrollComboBox; class QAbstractButton; @@ -18,8 +19,13 @@ public: explicit PreferenceEditor(QWidget *parent = nullptr); ~PreferenceEditor(); +signals: + void preferencesSaved(); + void themeChanged(const QString &theme); + private: Ui::PreferenceEditor *ui; + NoScrollComboBox *themeSelector; void populateFields(); void saveFields(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 31ad9da1..7f674ed3 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2526,43 +2526,13 @@ void MainWindow::on_actionAbout_Porymap_triggered() window->show(); } -void MainWindow::on_actionThemes_triggered() -{ - QStringList themes; - QRegularExpression re(":/themes/([A-z0-9_-]+).qss"); - themes.append("default"); - QDirIterator it(":/themes", QDirIterator::Subdirectories); - while (it.hasNext()) { - QString themeName = re.match(it.next()).captured(1); - themes.append(themeName); - } - - QDialog themeSelectorWindow(this); - QFormLayout form(&themeSelectorWindow); - - NoScrollComboBox *themeSelector = new NoScrollComboBox(); - themeSelector->addItems(themes); - themeSelector->setCurrentText(porymapConfig.getTheme()); - form.addRow(new QLabel("Themes"), themeSelector); - - QDialogButtonBox buttonBox(QDialogButtonBox::Apply | QDialogButtonBox::Close, Qt::Horizontal, &themeSelectorWindow); - form.addRow(&buttonBox); - connect(&buttonBox, &QDialogButtonBox::clicked, [&buttonBox, themeSelector, this](QAbstractButton *button){ - if (button == buttonBox.button(QDialogButtonBox::Apply)) { - QString theme = themeSelector->currentText(); - porymapConfig.setTheme(theme); - this->setTheme(theme); - editor->maskNonVisibleConnectionTiles(); - } - }); - connect(&buttonBox, SIGNAL(rejected()), &themeSelectorWindow, SLOT(reject())); - - themeSelectorWindow.exec(); -} - void MainWindow::on_actionEdit_Preferences_triggered() { if (!preferenceEditor) { preferenceEditor = new PreferenceEditor(this); + connect(preferenceEditor, &PreferenceEditor::themeChanged, + this, &MainWindow::setTheme); + connect(preferenceEditor, &PreferenceEditor::themeChanged, + editor, &Editor::maskNonVisibleConnectionTiles); connect(preferenceEditor, &QObject::destroyed, [=](QObject *) { preferenceEditor = nullptr; }); } diff --git a/src/ui/preferenceeditor.cpp b/src/ui/preferenceeditor.cpp index 25476dfe..42edd313 100644 --- a/src/ui/preferenceeditor.cpp +++ b/src/ui/preferenceeditor.cpp @@ -1,15 +1,23 @@ #include "preferenceeditor.h" #include "ui_preferenceeditor.h" #include "config.h" +#include "noscrollcombobox.h" #include +#include +#include +#include PreferenceEditor::PreferenceEditor(QWidget *parent) : QMainWindow(parent), - ui(new Ui::PreferenceEditor) + ui(new Ui::PreferenceEditor), + themeSelector(nullptr) { ui->setupUi(this); + auto *formLayout = new QFormLayout(ui->groupBox_Themes); + themeSelector = new NoScrollComboBox(ui->groupBox_Themes); + formLayout->addRow("Themes", themeSelector); setAttribute(Qt::WA_DeleteOnClose); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &PreferenceEditor::dialogButtonClicked); @@ -23,10 +31,28 @@ PreferenceEditor::~PreferenceEditor() void PreferenceEditor::populateFields() { ui->lineEdit_TextEditor->setText(porymapConfig.getTextEditorCommand()); + + QStringList themes = { "default" }; + QRegularExpression re(":/themes/([A-z0-9_-]+).qss"); + QDirIterator it(":/themes", QDirIterator::Subdirectories); + while (it.hasNext()) { + QString themeName = re.match(it.next()).captured(1); + themes.append(themeName); + } + themeSelector->addItems(themes); + themeSelector->setCurrentText(porymapConfig.getTheme()); } void PreferenceEditor::saveFields() { porymapConfig.setTextEditorCommand(ui->lineEdit_TextEditor->text()); + + if (themeSelector->currentText() != porymapConfig.getTheme()) { + const auto theme = themeSelector->currentText(); + porymapConfig.setTheme(theme); + emit themeChanged(theme); + } + + emit preferencesSaved(); } void PreferenceEditor::dialogButtonClicked(QAbstractButton *button) {