From b371860eb1740ff475304333f8a5e141b5238f1b Mon Sep 17 00:00:00 2001 From: Blampharos Date: Sun, 25 Oct 2020 22:46:04 +0100 Subject: [PATCH 01/44] Fix extraneous header flags being saved Fixes a bug where the program would put map header flags from firered and emerald to ruby-based projects. --- src/project.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/project.cpp b/src/project.cpp index 3ef73e35..270e9346 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -1361,9 +1361,11 @@ void Project::saveMap(Map *map) { mapObj["requires_flash"] = map->requiresFlash.toInt() > 0 || map->requiresFlash == "TRUE"; mapObj["weather"] = map->weather; mapObj["map_type"] = map->type; - mapObj["allow_cycling"] = map->allowBiking.toInt() > 0 || map->allowBiking == "TRUE"; - mapObj["allow_escaping"] = map->allowEscapeRope.toInt() > 0 || map->allowEscapeRope == "TRUE"; - mapObj["allow_running"] = map->allowRunning.toInt() > 0 || map->allowRunning == "TRUE"; + if (projectConfig.getBaseGameVersion() != BaseGameVersion::pokeruby) { + mapObj["allow_cycling"] = map->allowBiking.toInt() > 0 || map->allowBiking == "TRUE"; + mapObj["allow_escaping"] = map->allowEscapeRope.toInt() > 0 || map->allowEscapeRope == "TRUE"; + mapObj["allow_running"] = map->allowRunning.toInt() > 0 || map->allowRunning == "TRUE"; + } mapObj["show_map_name"] = map->show_location.toInt() > 0 || map->show_location == "TRUE"; if (projectConfig.getFloorNumberEnabled()) { mapObj["floor_number"] = map->floorNumber; From 174f66c35bb86cf55cf58f718668604adf700b98 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Fri, 30 Oct 2020 15:08:40 -0400 Subject: [PATCH 02/44] Fix crash caused by shortcuts when no project is loaded --- src/mainwindow.cpp | 34 ++++++++++++---------------------- 1 file changed, 12 insertions(+), 22 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 45037f10..f239d4d6 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -70,28 +70,18 @@ MainWindow::~MainWindow() } void MainWindow::setWindowDisabled(bool disabled) { - for (auto *child : findChildren(QString(), Qt::FindDirectChildrenOnly)) { - bool disableThis = disabled; - if (child->objectName() == "menuBar") { - // disable all but the menuFile and menuHelp - for (auto *menu : child->findChildren(QString(), Qt::FindDirectChildrenOnly)) { - disableThis = disabled; - if (menu->objectName() == "menuFile") { - // disable all but the action_Open_Project and action_Exit - for (auto *action : menu->actions()) { - action->setDisabled(disabled); - } - ui->action_Open_Project->setDisabled(false); - ui->action_Exit->setDisabled(false); - disableThis = false; - } - menu->setDisabled(disableThis); - } - child->findChild("menuHelp")->setDisabled(false); - disableThis = false; - } - child->setDisabled(disableThis); - } + for (auto action : findChildren()) + action->setDisabled(disabled); + for (auto child : findChildren(QString(), Qt::FindDirectChildrenOnly)) + child->setDisabled(disabled); + for (auto menu : ui->menuBar->findChildren(QString(), Qt::FindDirectChildrenOnly)) + menu->setDisabled(disabled); + ui->menuBar->setDisabled(false); + ui->menuFile->setDisabled(false); + ui->action_Open_Project->setDisabled(false); + ui->action_Exit->setDisabled(false); + ui->menuHelp->setDisabled(false); + ui->actionAbout_Porymap->setDisabled(false); } void MainWindow::initWindow() { From 5927f3dd7b383e60ebab8b7a6a19030f873888ec Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 1 Nov 2020 09:03:42 -0500 Subject: [PATCH 03/44] Fix bug preventing map zoom resetting --- src/editor.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/editor.cpp b/src/editor.cpp index 619abe3a..0b4eb6be7 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -905,9 +905,8 @@ void Editor::scaleMapView(int s) { if ((scale_exp + s) <= 5 && (scale_exp + s) >= -2) // sane limits { if (s == 0) - scale_exp = 0; - else - scale_exp += s; + s = -scale_exp; + scale_exp += s; double sfactor = pow(scale_base, s); ui->graphicsView_Map->scale(sfactor, sfactor); From ebb17476a7afecd6f9e8aa33db394874f9382b1a Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sat, 31 Oct 2020 20:28:16 -0400 Subject: [PATCH 04/44] Prevent capturing '=' in config key --- src/config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config.cpp b/src/config.cpp index 3c9fe33d..15df7d43 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -36,7 +36,7 @@ void KeyValueConfigBase::load() { QTextStream in(&file); in.setCodec("UTF-8"); QList configLines; - QRegularExpression re("^(?.+)=(?.*)$"); + QRegularExpression re("^(?[^=]+)=(?.*)$"); while (!in.atEnd()) { QString line = in.readLine().trimmed(); int commentIndex = line.indexOf("#"); From 88fbf9f28b5f5a135904ace167053a3207f2b89c Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 1 Nov 2020 07:35:20 -0500 Subject: [PATCH 05/44] Add ShortcutsEditor to customize shortcuts for QAction's --- forms/mainwindow.ui | 7 ++ forms/shortcutseditor.ui | 48 +++++++ include/config.h | 35 ++++++ include/mainwindow.h | 4 + include/ui/shortcutseditor.h | 80 ++++++++++++ porymap.pro | 5 +- src/config.cpp | 84 ++++++++++++- src/mainwindow.cpp | 26 +++- src/ui/shortcutseditor.cpp | 234 +++++++++++++++++++++++++++++++++++ 9 files changed, 520 insertions(+), 3 deletions(-) create mode 100644 forms/shortcutseditor.ui create mode 100644 include/ui/shortcutseditor.h create mode 100644 src/ui/shortcutseditor.cpp diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index f1061bdb..f953c243 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2639,6 +2639,8 @@ + + @@ -2905,6 +2907,11 @@ Export Map Stitch Image... + + + Edit Shortcuts... + + diff --git a/forms/shortcutseditor.ui b/forms/shortcutseditor.ui new file mode 100644 index 00000000..31b7014a --- /dev/null +++ b/forms/shortcutseditor.ui @@ -0,0 +1,48 @@ + + + ShortcutsEditor + + + + 0 + 0 + 540 + 640 + + + + Shortcuts Editor + + + + + + true + + + + + 0 + 0 + 516 + 580 + + + + + + + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults + + + false + + + + + + + + diff --git a/include/config.h b/include/config.h index 008eeeb7..4c4543d4 100644 --- a/include/config.h +++ b/include/config.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include enum MapSortOrder { Group = 0, @@ -192,4 +194,37 @@ private: extern ProjectConfig projectConfig; +class QAction; + +class ShortcutsConfig : public KeyValueConfigBase +{ +public: + ShortcutsConfig() : + shortcuts(QMultiMap()), + defaultShortcuts(QMultiMap()) + { + reset(); + } + virtual void reset() override { shortcuts.clear(); } + void setDefaultShortcuts(const QList &actions); + QList getDefaultShortcuts(QAction *action) const; + void setUserShortcuts(const QList &actions); + QList getUserShortcuts(QAction *action) const; + +protected: + virtual QString getConfigFilepath() override; + virtual void parseConfigKeyValue(QString key, QString value) override; + virtual QMap getKeyValueMap() override; + virtual void onNewConfigFileCreated() override {}; + virtual void setUnreadKeys() override {}; + +private: + QMultiMap shortcuts; + QMultiMap defaultShortcuts; + + QString getKey(QObject *object) const; +}; + +extern ShortcutsConfig shortcutsConfig; + #endif // CONFIG_H diff --git a/include/mainwindow.h b/include/mainwindow.h index a9180402..f406f87f 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -21,6 +21,7 @@ #include "filterchildrenproxymodel.h" #include "newmappopup.h" #include "newtilesetdialog.h" +#include "shortcutseditor.h" namespace Ui { class MainWindow; @@ -147,6 +148,7 @@ private slots: void on_actionUse_Encounter_Json_triggered(bool checked); void on_actionMonitor_Project_Files_triggered(bool checked); void on_actionUse_Poryscript_triggered(bool checked); + void on_actionEdit_Shortcuts_triggered(); void on_mainTabBar_tabBarClicked(int index); @@ -231,6 +233,7 @@ private: Ui::MainWindow *ui; TilesetEditor *tilesetEditor = nullptr; RegionMapEditor *regionMapEditor = nullptr; + ShortcutsEditor *shortcutsEditor = nullptr; MapImageExporter *mapImageExporter = nullptr; FilterChildrenProxyModel *mapListProxyModel; NewMapPopup *newmapprompt = nullptr; @@ -294,6 +297,7 @@ private: void initEditor(); void initMiscHeapObjects(); void initMapSortOrder(); + void initUserShortcuts(); void setProjectSpecificUIVisibility(); void loadUserSettings(); void applyMapListFilter(QString filterText); diff --git a/include/ui/shortcutseditor.h b/include/ui/shortcutseditor.h new file mode 100644 index 00000000..b5aadc92 --- /dev/null +++ b/include/ui/shortcutseditor.h @@ -0,0 +1,80 @@ +#ifndef SHORTCUTSEDITOR_H +#define SHORTCUTSEDITOR_H + +#include +#include + +class QAbstractButton; +class QAction; +class QKeySequenceEdit; +class ActionShortcutEdit; + + +namespace Ui { +class ShortcutsEditor; +} + +class ShortcutsEditor : public QDialog +{ + Q_OBJECT + +public: + explicit ShortcutsEditor(QWidget *parent = nullptr); + ~ShortcutsEditor(); + +private: + Ui::ShortcutsEditor *ui; + QMap actions; + QWidget *ase_container; + + void populateShortcuts(); + void saveShortcuts(); + void resetShortcuts(); + void promptUser(ActionShortcutEdit *current, ActionShortcutEdit *sender); + +private slots: + void checkForDuplicates(); + void dialogButtonClicked(QAbstractButton *button); +}; + + +// A collection of QKeySequenceEdit's in a QHBoxLayout with a cooresponding QAction +class ActionShortcutEdit : public QWidget +{ + Q_OBJECT + +public: + explicit ActionShortcutEdit(QWidget *parent = nullptr, QAction *action = nullptr, int count = 1); + + bool eventFilter(QObject *watched, QEvent *event) override; + + int count() const { return kse_children.count(); } + void setCount(int count); + QList shortcuts() const; + void setShortcuts(const QList &keySequences); + void applyShortcuts(); + bool removeOne(const QKeySequence &keySequence); + bool contains(const QKeySequence &keySequence); + bool contains(QKeySequenceEdit *keySequenceEdit); + QKeySequence last() const { return shortcuts().last(); } + + QAction *action; + +public slots: + void clear(); + +signals: + void editingFinished(); + +private: + QVector kse_children; + QList ks_list; + + void updateShortcuts() { setShortcuts(shortcuts()); } + void focusLast(); + +private slots: + void onEditingFinished(); +}; + +#endif // SHORTCUTSEDITOR_H diff --git a/porymap.pro b/porymap.pro index 0da4a14b..f970606c 100644 --- a/porymap.pro +++ b/porymap.pro @@ -71,6 +71,7 @@ SOURCES += src/core/block.cpp \ src/ui/newtilesetdialog.cpp \ src/ui/flowlayout.cpp \ src/ui/mapruler.cpp \ + src/ui/shortcutseditor.cpp \ src/config.cpp \ src/editor.cpp \ src/main.cpp \ @@ -140,6 +141,7 @@ HEADERS += include/core/block.h \ include/ui/overlay.h \ include/ui/flowlayout.h \ include/ui/mapruler.h \ + include/ui/shortcutseditor.h \ include/config.h \ include/editor.h \ include/mainwindow.h \ @@ -156,7 +158,8 @@ FORMS += forms/mainwindow.ui \ forms/newmappopup.ui \ forms/aboutporymap.ui \ forms/newtilesetdialog.ui \ - forms/mapimageexporter.ui + forms/mapimageexporter.ui \ + forms/shortcutseditor.ui RESOURCES += \ resources/images.qrc \ diff --git a/src/config.cpp b/src/config.cpp index 15df7d43..2c009b36 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -11,6 +11,7 @@ #include #include #include +#include KeyValueConfigBase::~KeyValueConfigBase() { @@ -414,7 +415,7 @@ ProjectConfig projectConfig; QString ProjectConfig::getConfigFilepath() { // porymap config file is in the same directory as porymap itself. - return QDir(this->projectDir).filePath("porymap.project.cfg");; + return QDir(this->projectDir).filePath("porymap.project.cfg"); } void ProjectConfig::parseConfigKeyValue(QString key, QString value) { @@ -703,3 +704,84 @@ void ProjectConfig::setCustomScripts(QList scripts) { QList ProjectConfig::getCustomScripts() { return this->customScripts; } + +ShortcutsConfig shortcutsConfig; + +QString ShortcutsConfig::getConfigFilepath() { + QString settingsPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + QDir dir(settingsPath); + if (!dir.exists()) + dir.mkpath(settingsPath); + + QString configPath = dir.absoluteFilePath("porymap.shortcuts.cfg"); + + return configPath; +} + +void ShortcutsConfig::parseConfigKeyValue(QString key, QString value) { + QStringList keySeqs = value.split(' '); + if (keySeqs.isEmpty()) + shortcuts.insert(key, value); + else for (auto keySeq : keySeqs) + shortcuts.insert(key, keySeq); +} + +QMap ShortcutsConfig::getKeyValueMap() { + QMap map; + for (auto key : shortcuts.uniqueKeys()) { + auto keySeqs = shortcuts.values(key); + QStringList values; + for (auto keySeq : keySeqs) + values.append(keySeq.toString()); + QString value = values.join(' '); + map.insert(key, value); + } + return map; +} + +// Call this before applying user shortcuts to be able to restore default shortcuts. +void ShortcutsConfig::setDefaultShortcuts(const QList &actions) { + defaultShortcuts.clear(); + for (auto *action : actions) { + const QString key = getKey(action); + bool addToUserShortcuts = !shortcuts.contains(key); + for (auto shortcut : action->shortcuts()) { + defaultShortcuts.insert(key, shortcut); + if (addToUserShortcuts) + shortcuts.insert(key, shortcut); + } + } + save(); +} + +QList ShortcutsConfig::getDefaultShortcuts(QAction *action) const { + return defaultShortcuts.values(getKey(action)); +} + +void ShortcutsConfig::setUserShortcuts(const QList &actions) { + shortcuts.clear(); + for (auto *action : actions) { + const QString key = getKey(action); + if (action->shortcuts().isEmpty()) + shortcuts.insert(key, QKeySequence()); + else for (auto shortcut : action->shortcuts()) + shortcuts.insert(key, shortcut); + } + save(); +} + +QList ShortcutsConfig::getUserShortcuts(QAction *action) const { + return shortcuts.values(getKey(action)); +} + +QString ShortcutsConfig::getKey(QObject *object) const { + QString key = object->objectName(); + QRegularExpression re("[A-Z]"); + int i = key.indexOf(re); + while (i != -1) { + if (key.at(i - 1) != '_') + key.insert(i++, '_'); + i = key.indexOf(re, i + 1); + } + return key.toLower(); +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f239d4d6..eb4a2de9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -92,6 +92,7 @@ void MainWindow::initWindow() { this->initEditor(); this->initMiscHeapObjects(); this->initMapSortOrder(); + this->initUserShortcuts(); this->restoreWindowState(); setWindowDisabled(true); @@ -106,6 +107,13 @@ void MainWindow::initExtraShortcuts() { ui->actionZoom_In->setShortcuts({QKeySequence("Ctrl++"), QKeySequence("Ctrl+=")}); } +void MainWindow::initUserShortcuts() { + shortcutsConfig.load(); + shortcutsConfig.setDefaultShortcuts(findChildren()); + for (auto *action : findChildren()) + action->setShortcuts(shortcutsConfig.getUserShortcuts(action)); +} + void MainWindow::initCustomUI() { // Set up the tab bar ui->mainTabBar->addTab("Map"); @@ -158,9 +166,11 @@ void MainWindow::initEditor() { this->loadUserSettings(); undoAction = editor->editGroup.createUndoAction(this, tr("&Undo")); + undoAction->setObjectName("action_Undo"); undoAction->setShortcut(QKeySequence("Ctrl+Z")); redoAction = editor->editGroup.createRedoAction(this, tr("&Redo")); + redoAction->setObjectName("action_Redo"); redoAction->setShortcuts({QKeySequence("Ctrl+Y"), QKeySequence("Ctrl+Shift+Z")}); ui->menuEdit->addAction(undoAction); @@ -171,7 +181,8 @@ void MainWindow::initEditor() { undoView->setAttribute(Qt::WA_QuitOnClose, false); // Show the EditHistory dialog with Ctrl+E - QAction *showHistory = new QAction("Show Edit History..."); + QAction *showHistory = new QAction("Show Edit History...", this); + showHistory->setObjectName("action_ShowEditHistory"); showHistory->setShortcut(QKeySequence("Ctrl+E")); connect(showHistory, &QAction::triggered, [undoView](){ undoView->show(); }); @@ -1403,6 +1414,19 @@ void MainWindow::on_actionUse_Poryscript_triggered(bool checked) projectConfig.setUsePoryScript(checked); } +void MainWindow::on_actionEdit_Shortcuts_triggered() +{ + if (!shortcutsEditor) + shortcutsEditor = new ShortcutsEditor(this); + + if (shortcutsEditor->isHidden()) + shortcutsEditor->show(); + else if (shortcutsEditor->isMinimized()) + shortcutsEditor->showNormal(); + else + shortcutsEditor->activateWindow(); +} + void MainWindow::on_actionPencil_triggered() { on_toolButton_Paint_clicked(); diff --git a/src/ui/shortcutseditor.cpp b/src/ui/shortcutseditor.cpp new file mode 100644 index 00000000..97a3ebf4 --- /dev/null +++ b/src/ui/shortcutseditor.cpp @@ -0,0 +1,234 @@ +#include "shortcutseditor.h" +#include "ui_shortcutseditor.h" +#include "config.h" +#include "log.h" + +#include +#include +#include +#include +#include +#include + + +ShortcutsEditor::ShortcutsEditor(QWidget *parent) : + QDialog(parent), + ui(new Ui::ShortcutsEditor), + actions(QMap()) +{ + ui->setupUi(this); + ase_container = ui->scrollAreaWidgetContents_Shortcuts; + connect(ui->buttonBox, &QDialogButtonBox::clicked, + this, &ShortcutsEditor::dialogButtonClicked); + populateShortcuts(); +} + +ShortcutsEditor::~ShortcutsEditor() +{ + delete ui; +} + +void ShortcutsEditor::populateShortcuts() { + if (!parent()) + return; + + for (auto action : parent()->findChildren()) + if (!action->text().isEmpty() && !action->objectName().isEmpty()) + actions.insert(action->text().remove('&'), action); + + auto *formLayout = new QFormLayout(ase_container); + for (auto *action : actions) { + auto userShortcuts = shortcutsConfig.getUserShortcuts(action); + auto *ase = new ActionShortcutEdit(ase_container, action, 2); + connect(ase, &ActionShortcutEdit::editingFinished, + this, &ShortcutsEditor::checkForDuplicates); + ase->setShortcuts(userShortcuts); + formLayout->addRow(action->text(), ase); + } +} + +void ShortcutsEditor::saveShortcuts() { + auto ase_children = ase_container->findChildren(QString(), Qt::FindDirectChildrenOnly); + for (auto *ase : ase_children) + ase->applyShortcuts(); + shortcutsConfig.setUserShortcuts(actions.values()); +} + +void ShortcutsEditor::resetShortcuts() { + auto ase_children = ase_container->findChildren(QString(), Qt::FindDirectChildrenOnly); + for (auto *ase : ase_children) + ase->setShortcuts(shortcutsConfig.getDefaultShortcuts(ase->action)); +} + +void ShortcutsEditor::promptUser(ActionShortcutEdit *current, ActionShortcutEdit *sender) { + auto result = QMessageBox::question( + this, + "porymap", + QString("Shortcut \"%1\" is already used by \"%2\", would you like to replace it?") + .arg(sender->last().toString()).arg(current->action->text()), + QMessageBox::Yes | QMessageBox::No, QMessageBox::No); + + if (result == QMessageBox::Yes) + current->removeOne(sender->last()); + else if (result == QMessageBox::No) + sender->removeOne(sender->last()); +} + +void ShortcutsEditor::checkForDuplicates() { + auto *sender_ase = qobject_cast(sender()); + if (!sender_ase) + return; + + for (auto *child_kse : findChildren()) { + if (child_kse->keySequence().isEmpty() || child_kse->parent() == sender()) + continue; + + if (sender_ase->contains(child_kse->keySequence())) { + auto *current_ase = qobject_cast(child_kse->parent()); + if (!current_ase) + continue; + + promptUser(current_ase, sender_ase); + activateWindow(); + return; + } + } +} + +void ShortcutsEditor::dialogButtonClicked(QAbstractButton *button) { + auto buttonRole = ui->buttonBox->buttonRole(button); + if (buttonRole == QDialogButtonBox::AcceptRole) { + saveShortcuts(); + hide(); + } else if (buttonRole == QDialogButtonBox::ApplyRole) { + saveShortcuts(); + } else if (buttonRole == QDialogButtonBox::RejectRole) { + hide(); + } else if (buttonRole == QDialogButtonBox::ResetRole) { + resetShortcuts(); + } +} + + +ActionShortcutEdit::ActionShortcutEdit(QWidget *parent, QAction *action, int count) : + QWidget(parent), + action(action), + kse_children(QVector()), + ks_list(QList()) +{ + setLayout(new QHBoxLayout(this)); + layout()->setContentsMargins(0, 0, 0, 0); + setCount(count); +} + +bool ActionShortcutEdit::eventFilter(QObject *watched, QEvent *event) { + auto *watched_kse = qobject_cast(watched); + if (!watched_kse) + return false; + + if (event->type() == QEvent::KeyPress) { + auto *keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Escape) { + watched_kse->clearFocus(); + return true; + } else if (keyEvent->key() == Qt::Key_Backspace) { + removeOne(watched_kse->keySequence()); + return true; + } else { + watched_kse->clear(); + } + } + return false; +} + +void ActionShortcutEdit::setCount(int count) { + if (count < 1) + count = 1; + + while (kse_children.count() > count) { + layout()->removeWidget(kse_children.last()); + delete kse_children.last(); + kse_children.removeLast(); + } + + while (kse_children.count() < count) { + auto *kse = new QKeySequenceEdit(this); + connect(kse, &QKeySequenceEdit::editingFinished, + this, &ActionShortcutEdit::onEditingFinished); + kse->installEventFilter(this); + layout()->addWidget(kse); + kse_children.append(kse); + } +} + +QList ActionShortcutEdit::shortcuts() const { + QList current_ks_list; + for (auto *kse : kse_children) + if (!kse->keySequence().isEmpty()) + current_ks_list.append(kse->keySequence()); + return current_ks_list; +} + +void ActionShortcutEdit::setShortcuts(const QList &keySequences) { + clear(); + ks_list = keySequences; + int minCount = qMin(kse_children.count(), ks_list.count()); + for (int i = 0; i < minCount; ++i) + kse_children[i]->setKeySequence(ks_list[i]); +} + +void ActionShortcutEdit::applyShortcuts() { + action->setShortcuts(shortcuts()); +} + +bool ActionShortcutEdit::removeOne(const QKeySequence &keySequence) { + for (auto *kse : kse_children) { + if (kse->keySequence() == keySequence) { + ks_list.removeOne(keySequence); + kse->clear(); + updateShortcuts(); + return true; + } + } + return false; +} + +bool ActionShortcutEdit::contains(const QKeySequence &keySequence) { + for (auto ks : shortcuts()) + if (ks == keySequence) + return true; + return false; +} + +bool ActionShortcutEdit::contains(QKeySequenceEdit *keySequenceEdit) { + for (auto *kse : kse_children) + if (kse == keySequenceEdit) + return true; + return false; +} + +void ActionShortcutEdit::clear() { + for (auto *kse : kse_children) + kse->clear(); +} + +void ActionShortcutEdit::focusLast() { + for (int i = count() - 1; i >= 0; --i) { + if (!kse_children[i]->keySequence().isEmpty()) { + kse_children[i]->setFocus(); + return; + } + } +} + +void ActionShortcutEdit::onEditingFinished() { + auto *kse = qobject_cast(sender()); + if (!kse) + return; + + if (ks_list.contains(kse->keySequence())) + removeOne(kse->keySequence()); + updateShortcuts(); + focusLast(); + emit editingFinished(); +} From ed2f8bf180c7c8e266962f978a55dc8b6790196d Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 3 Nov 2020 03:18:34 -0500 Subject: [PATCH 06/44] Add custom Shortcut class --- include/ui/shortcut.h | 65 ++++++++++++++++++ porymap.pro | 2 + src/ui/shortcut.cpp | 153 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 220 insertions(+) create mode 100644 include/ui/shortcut.h create mode 100644 src/ui/shortcut.cpp diff --git a/include/ui/shortcut.h b/include/ui/shortcut.h new file mode 100644 index 00000000..8b0e87ce --- /dev/null +++ b/include/ui/shortcut.h @@ -0,0 +1,65 @@ +#ifndef SHORTCUT_H +#define SHORTCUT_H + +#include +#include +#include + + +// Alternative to QShortcut that adds support for multiple QKeySequences. +// Use this to allow the shortcut to be editable in ShortcutsEditor. +class Shortcut : public QObject +{ + Q_OBJECT + +public: + explicit Shortcut(QWidget *parent); + Shortcut(const QKeySequence &key, QWidget *parent, + const char *member = nullptr, const char *ambiguousMember = nullptr, + Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); + Shortcut(const QList &keys, QWidget *parent, + const char *member = nullptr, const char *ambiguousMember = nullptr, + Qt::ShortcutContext shortcutContext = Qt::WindowShortcut); + ~Shortcut(); + + void addKey(const QKeySequence &key); + void setKey(const QKeySequence &key); + QKeySequence key() const; + + void addKeys(const QList &keys); + void setKeys(const QList &keys); + QList keys() const; + + void setEnabled(bool enable); + bool isEnabled() const; + + void setContext(Qt::ShortcutContext context); + Qt::ShortcutContext context() const; + + void setWhatsThis(const QString &text); + QString whatsThis() const; + + void setAutoRepeat(bool on); + bool autoRepeat() const; + + int id() const; + QList ids() const; + + inline QWidget *parentWidget() const + { return static_cast(QObject::parent()); } + +signals: + void activated(); + void activatedAmbiguously(); + +protected: + bool event(QEvent *e) override; + +private: + const char *sc_member; + const char *sc_ambiguousmember; + Qt::ShortcutContext sc_context; + QVector sc_vec; +}; + +#endif // SHORTCUT_H diff --git a/porymap.pro b/porymap.pro index f970606c..593b1112 100644 --- a/porymap.pro +++ b/porymap.pro @@ -71,6 +71,7 @@ SOURCES += src/core/block.cpp \ src/ui/newtilesetdialog.cpp \ src/ui/flowlayout.cpp \ src/ui/mapruler.cpp \ + src/ui/shortcut.cpp \ src/ui/shortcutseditor.cpp \ src/config.cpp \ src/editor.cpp \ @@ -141,6 +142,7 @@ HEADERS += include/core/block.h \ include/ui/overlay.h \ include/ui/flowlayout.h \ include/ui/mapruler.h \ + include/ui/shortcut.h \ include/ui/shortcutseditor.h \ include/config.h \ include/editor.h \ diff --git a/src/ui/shortcut.cpp b/src/ui/shortcut.cpp new file mode 100644 index 00000000..0dd2f30a --- /dev/null +++ b/src/ui/shortcut.cpp @@ -0,0 +1,153 @@ +#include "shortcut.h" + +#include +#include + + +Shortcut::Shortcut(QWidget *parent) : + QObject(parent), + sc_member(nullptr), + sc_ambiguousmember(nullptr), + sc_context(Qt::WindowShortcut), + sc_vec(QVector({new QShortcut(parent)})) +{ } + +Shortcut::Shortcut(const QKeySequence &key, QWidget *parent, + const char *member, const char *ambiguousMember, + Qt::ShortcutContext shortcutContext) : + QObject(parent), + sc_member(member), + sc_ambiguousmember(ambiguousMember), + sc_context(shortcutContext), + sc_vec(QVector()) +{ + setKey(key); +} + +Shortcut::Shortcut(const QList &keys, QWidget *parent, + const char *member, const char *ambiguousMember, + Qt::ShortcutContext shortcutContext) : + QObject(parent), + sc_member(member), + sc_ambiguousmember(ambiguousMember), + sc_context(shortcutContext), + sc_vec(QVector()) +{ + setKeys(keys); +} + +Shortcut::~Shortcut() +{ + for (auto *sc : sc_vec) + delete sc; +} + +void Shortcut::addKey(const QKeySequence &key) { + sc_vec.append(new QShortcut(key, parentWidget(), sc_member, sc_ambiguousmember, sc_context)); +} + +void Shortcut::setKey(const QKeySequence &key) { + if (sc_vec.isEmpty()) { + addKey(key); + } else { + while (sc_vec.count() != 1) + delete sc_vec.takeLast(); + sc_vec.first()->setKey(key); + } +} + +QKeySequence Shortcut::key() const { + return sc_vec.first()->key(); +} + +void Shortcut::addKeys(const QList &keys) { + for (auto key : keys) + addKey(key); +} + +void Shortcut::setKeys(const QList &keys) { + if (keys.isEmpty()) + return; + + while (sc_vec.count() < keys.count()) + addKey(QKeySequence()); + + while (sc_vec.count() > keys.count()) + delete sc_vec.takeLast(); + + for (int i = 0; i < keys.count(); ++i) + sc_vec[i]->setKey(keys[i]); +} + +QList Shortcut::keys() const { + QList ks_list = QList(); + for (auto *sc : sc_vec) + ks_list.append(sc->key()); + return ks_list; +} + +void Shortcut::setEnabled(bool enable) { + for (auto *sc : sc_vec) + sc->setEnabled(enable); +} + +bool Shortcut::isEnabled() const { + return sc_vec.first()->isEnabled(); +} + +void Shortcut::setContext(Qt::ShortcutContext context) { + sc_context = context; + for (auto *sc : sc_vec) + sc->setContext(context); +} + +Qt::ShortcutContext Shortcut::context() const { + return sc_context; +} + +void Shortcut::setWhatsThis(const QString &text) { + for (auto *sc : sc_vec) + sc->setWhatsThis(text); +} + +QString Shortcut::whatsThis() const { + return sc_vec.first()->whatsThis(); +} + +void Shortcut::setAutoRepeat(bool on) { + for (auto *sc : sc_vec) + sc->setAutoRepeat(on); +} + +bool Shortcut::autoRepeat() const { + return sc_vec.first()->autoRepeat(); +} + +int Shortcut::id() const { + return sc_vec.first()->id(); +} + +QList Shortcut::ids() const { + QList id_list({id()}); + for (auto *sc : sc_vec) + id_list.append(sc->id()); + return id_list; +} + +bool Shortcut::event(QEvent *e) { + if (isEnabled() && e->type() == QEvent::Shortcut) { + auto se = static_cast(e); + if (ids().contains(se->shortcutId()) && keys().contains(se->key())) { + if (QWhatsThis::inWhatsThisMode()) { + QWhatsThis::showText(QCursor::pos(), whatsThis()); + } else { + if (se->isAmbiguous()) + emit activatedAmbiguously(); + else + emit activated(); + } + return true; + } + } + return false; +} From eabd2d66185f5c16d0bc30537ca1f33068907a08 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 3 Nov 2020 05:58:10 -0500 Subject: [PATCH 07/44] Convert QShortcut's to Shortcut's and add them to config --- include/config.h | 26 +++++---- src/config.cpp | 114 +++++++++++++++++++++++++++------------ src/mainwindow.cpp | 26 ++++++--- src/ui/tileseteditor.cpp | 2 +- 4 files changed, 116 insertions(+), 52 deletions(-) diff --git a/include/config.h b/include/config.h index 4c4543d4..9c802a39 100644 --- a/include/config.h +++ b/include/config.h @@ -195,21 +195,29 @@ private: extern ProjectConfig projectConfig; class QAction; +class Shortcut; class ShortcutsConfig : public KeyValueConfigBase { public: ShortcutsConfig() : - shortcuts(QMultiMap()), + userShortcuts(QMultiMap()), defaultShortcuts(QMultiMap()) - { - reset(); - } - virtual void reset() override { shortcuts.clear(); } - void setDefaultShortcuts(const QList &actions); + { } + + virtual void reset() override { userShortcuts.clear(); } + + void setDefaultShortcuts( + const QList &actions = QList(), + const QList &shortcuts = QList()); QList getDefaultShortcuts(QAction *action) const; - void setUserShortcuts(const QList &actions); + QList getDefaultShortcuts(Shortcut *shortcut) const; + + void setUserShortcuts( + const QList &actions = QList(), + const QList &shortcuts = QList()); QList getUserShortcuts(QAction *action) const; + QList getUserShortcuts(Shortcut *shortcut) const; protected: virtual QString getConfigFilepath() override; @@ -219,10 +227,10 @@ protected: virtual void setUnreadKeys() override {}; private: - QMultiMap shortcuts; + QMultiMap userShortcuts; QMultiMap defaultShortcuts; - QString getKey(QObject *object) const; + QString cfgKey(QObject *object) const; }; extern ShortcutsConfig shortcutsConfig; diff --git a/src/config.cpp b/src/config.cpp index 2c009b36..0c9cbee9 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -1,5 +1,6 @@ #include "config.h" #include "log.h" +#include "shortcut.h" #include #include #include @@ -719,69 +720,114 @@ QString ShortcutsConfig::getConfigFilepath() { } void ShortcutsConfig::parseConfigKeyValue(QString key, QString value) { - QStringList keySeqs = value.split(' '); - if (keySeqs.isEmpty()) - shortcuts.insert(key, value); - else for (auto keySeq : keySeqs) - shortcuts.insert(key, keySeq); + QStringList keySequences = value.split(' '); + for (auto keySequence : keySequences) + userShortcuts.insert(key, keySequence); } QMap ShortcutsConfig::getKeyValueMap() { QMap map; - for (auto key : shortcuts.uniqueKeys()) { - auto keySeqs = shortcuts.values(key); + for (auto cfg_key : userShortcuts.uniqueKeys()) { + auto keySequences = userShortcuts.values(cfg_key); QStringList values; - for (auto keySeq : keySeqs) - values.append(keySeq.toString()); + for (auto keySequence : keySequences) + values.append(keySequence.toString()); QString value = values.join(' '); - map.insert(key, value); + map.insert(cfg_key, value); } return map; } // Call this before applying user shortcuts to be able to restore default shortcuts. -void ShortcutsConfig::setDefaultShortcuts(const QList &actions) { +void ShortcutsConfig::setDefaultShortcuts(const QList &actions, const QList &shortcuts) { defaultShortcuts.clear(); + for (auto *action : actions) { - const QString key = getKey(action); - bool addToUserShortcuts = !shortcuts.contains(key); - for (auto shortcut : action->shortcuts()) { - defaultShortcuts.insert(key, shortcut); + if (action->text().isEmpty() || action->objectName().isEmpty()) + continue; + const QString cfg_key = cfgKey(action); + bool addToUserShortcuts = !userShortcuts.contains(cfg_key); + if (action->shortcuts().isEmpty()) { + defaultShortcuts.insert(cfg_key, QKeySequence()); if (addToUserShortcuts) - shortcuts.insert(key, shortcut); + userShortcuts.insert(cfg_key, QKeySequence()); + } else { + for (auto keySequence : action->shortcuts()) { + defaultShortcuts.insert(cfg_key, keySequence); + if (addToUserShortcuts) + userShortcuts.insert(cfg_key, keySequence); + } } } + + for (auto *shortcut : shortcuts) { + if (shortcut->objectName().isEmpty()) + continue; + const QString cfg_key = cfgKey(shortcut); + bool addToUserShortcuts = !userShortcuts.contains(cfg_key); + for (auto keySequence : shortcut->keys()) { + defaultShortcuts.insert(cfg_key, keySequence); + if (addToUserShortcuts) + userShortcuts.insert(cfg_key, keySequence); + } + } + save(); } QList ShortcutsConfig::getDefaultShortcuts(QAction *action) const { - return defaultShortcuts.values(getKey(action)); + return defaultShortcuts.values(cfgKey(action)); } -void ShortcutsConfig::setUserShortcuts(const QList &actions) { - shortcuts.clear(); +QList ShortcutsConfig::getDefaultShortcuts(Shortcut *shortcut) const { + return defaultShortcuts.values(cfgKey(shortcut)); +} + +void ShortcutsConfig::setUserShortcuts(const QList &actions, const QList &shortcuts) { + userShortcuts.clear(); + for (auto *action : actions) { - const QString key = getKey(action); + if (action->text().isEmpty() || action->objectName().isEmpty()) + continue; + const QString cfg_key = cfgKey(action); if (action->shortcuts().isEmpty()) - shortcuts.insert(key, QKeySequence()); - else for (auto shortcut : action->shortcuts()) - shortcuts.insert(key, shortcut); + userShortcuts.insert(cfg_key, QKeySequence()); + else + for (auto keySequence : action->shortcuts()) + userShortcuts.insert(cfg_key, keySequence); } + + for (auto *shortcut : shortcuts) { + if (shortcut->objectName().isEmpty()) + continue; + const QString cfg_key = cfgKey(shortcut); + if (shortcut->keys().isEmpty()) + userShortcuts.insert(cfg_key, QKeySequence()); + else + for (auto keySequence : shortcut->keys()) + userShortcuts.insert(cfg_key, keySequence); + } + save(); } QList ShortcutsConfig::getUserShortcuts(QAction *action) const { - return shortcuts.values(getKey(action)); + return userShortcuts.values(cfgKey(action)); } -QString ShortcutsConfig::getKey(QObject *object) const { - QString key = object->objectName(); - QRegularExpression re("[A-Z]"); - int i = key.indexOf(re); - while (i != -1) { - if (key.at(i - 1) != '_') - key.insert(i++, '_'); - i = key.indexOf(re, i + 1); - } - return key.toLower(); +QList ShortcutsConfig::getUserShortcuts(Shortcut *shortcut) const { + return userShortcuts.values(cfgKey(shortcut)); +} + +// Converts a camelCase object name to snake_case. +QString ShortcutsConfig::cfgKey(QObject *object) const { + QString cfg_key = object->objectName(); + QRegularExpression re("[A-Z]"); + int i = cfg_key.indexOf(re); + while (i != -1) { + if (cfg_key.at(i - 1) != '_') + cfg_key.insert(i++, '_'); + i = cfg_key.indexOf(re, i + 1); + } + return cfg_key.toLower(); } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index eb4a2de9..2b242876 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -14,11 +14,11 @@ #include "draggablepixmapitem.h" #include "editcommands.h" #include "flowlayout.h" +#include "shortcut.h" #include #include #include -#include #include #include #include @@ -99,19 +99,29 @@ void MainWindow::initWindow() { } void MainWindow::initExtraShortcuts() { - new QShortcut(QKeySequence("Ctrl+0"), this, SLOT(resetMapViewScale())); - new QShortcut(QKeySequence("Ctrl+G"), ui->checkBox_ToggleGrid, SLOT(toggle())); - new QShortcut(QKeySequence("Ctrl+D"), this, SLOT(duplicate())); - new QShortcut(QKeySequence::Delete, this, SLOT(on_toolButton_deleteObject_clicked())); - new QShortcut(QKeySequence("Backspace"), this, SLOT(on_toolButton_deleteObject_clicked())); - ui->actionZoom_In->setShortcuts({QKeySequence("Ctrl++"), QKeySequence("Ctrl+=")}); + auto *shortcutReset_Zoom = new Shortcut(QKeySequence("Ctrl+0"), this, SLOT(resetMapViewScale())); + shortcutReset_Zoom->setObjectName("shortcutReset_Zoom"); + + auto *shortcutToggle_Grid = new Shortcut(QKeySequence("Ctrl+G"), ui->checkBox_ToggleGrid, SLOT(toggle())); + shortcutToggle_Grid->setObjectName("shortcutToggle_Grid"); + + auto *shortcutDuplicate_Events = new Shortcut(QKeySequence("Ctrl+D"), this, SLOT(duplicate())); + shortcutDuplicate_Events->setObjectName("shortcutDuplicate_Events"); + + auto *shortcutDelete_Object = new Shortcut( + {QKeySequence("Del"), QKeySequence("Backspace")}, this, SLOT(on_toolButton_deleteObject_clicked())); + shortcutDelete_Object->setObjectName("shortcutDelete_Object"); + + ui->actionZoom_In->setShortcuts({ui->actionZoom_In->shortcut(), QKeySequence("Ctrl+=")}); } void MainWindow::initUserShortcuts() { shortcutsConfig.load(); - shortcutsConfig.setDefaultShortcuts(findChildren()); + shortcutsConfig.setDefaultShortcuts(findChildren(), findChildren()); for (auto *action : findChildren()) action->setShortcuts(shortcutsConfig.getUserShortcuts(action)); + for (auto *shortcut : findChildren()) + shortcut->setKeys(shortcutsConfig.getUserShortcuts(shortcut)); } void MainWindow::initCustomUI() { diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 950b8d46..1c6b620e 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -86,7 +86,7 @@ void TilesetEditor::setTilesets(QString primaryTilesetLabel, QString secondaryTi void TilesetEditor::initUi() { ui->setupUi(this); - new QShortcut(QKeySequence("Ctrl+Shift+Z"), this, SLOT(on_actionRedo_triggered())); + ui->actionRedo->setShortcuts({ui->actionRedo->shortcut(), QKeySequence("Ctrl+Shift+Z")}); this->tileXFlip = ui->checkBox_xFlip->isChecked(); this->tileYFlip = ui->checkBox_yFlip->isChecked(); this->paletteId = ui->spinBox_paletteSelector->value(); From 43d3257d89b1a2ff73de0d624c284bad1035d281 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Thu, 5 Nov 2020 06:32:31 -0500 Subject: [PATCH 08/44] Extract functions in ShortcutsConfig --- include/config.h | 27 +++++++-- src/config.cpp | 133 ++++++++++++++++++++++++-------------------- src/ui/shortcut.cpp | 2 +- 3 files changed, 96 insertions(+), 66 deletions(-) diff --git a/include/config.h b/include/config.h index 9c802a39..a690ce90 100644 --- a/include/config.h +++ b/include/config.h @@ -207,15 +207,15 @@ public: virtual void reset() override { userShortcuts.clear(); } - void setDefaultShortcuts( - const QList &actions = QList(), - const QList &shortcuts = QList()); + void setDefaultShortcuts(const QList &actions); + void setDefaultShortcuts(const QList &shortcuts); + void setDefaultShortcuts(const QList &actions, const QList &shortcuts); QList getDefaultShortcuts(QAction *action) const; QList getDefaultShortcuts(Shortcut *shortcut) const; - void setUserShortcuts( - const QList &actions = QList(), - const QList &shortcuts = QList()); + void setUserShortcuts(const QList &actions); + void setUserShortcuts(const QList &shortcuts); + void setUserShortcuts(const QList &actions, const QList &shortcuts); QList getUserShortcuts(QAction *action) const; QList getUserShortcuts(Shortcut *shortcut) const; @@ -230,6 +230,21 @@ private: QMultiMap userShortcuts; QMultiMap defaultShortcuts; + enum StoreType { + User, + Default + }; + + void storeShortcuts( + StoreType storeType, + const QList &actions); + void storeShortcuts( + StoreType storeType, + const QList &shortcuts); + void storeShortcut( + StoreType storeType, + const QString &cfgKey, + const QList &keySequences); QString cfgKey(QObject *object) const; }; diff --git a/src/config.cpp b/src/config.cpp index 0c9cbee9..e78ee25c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -738,40 +738,22 @@ QMap ShortcutsConfig::getKeyValueMap() { return map; } +// Call this before applying user shortcuts to be able to restore default shortcuts. +void ShortcutsConfig::setDefaultShortcuts(const QList &actions) { + storeShortcuts(StoreType::Default, actions); + save(); +} + +// Call this before applying user shortcuts to be able to restore default shortcuts. +void ShortcutsConfig::setDefaultShortcuts(const QList &shortcuts) { + storeShortcuts(StoreType::Default, shortcuts); + save(); +} + // Call this before applying user shortcuts to be able to restore default shortcuts. void ShortcutsConfig::setDefaultShortcuts(const QList &actions, const QList &shortcuts) { - defaultShortcuts.clear(); - - for (auto *action : actions) { - if (action->text().isEmpty() || action->objectName().isEmpty()) - continue; - const QString cfg_key = cfgKey(action); - bool addToUserShortcuts = !userShortcuts.contains(cfg_key); - if (action->shortcuts().isEmpty()) { - defaultShortcuts.insert(cfg_key, QKeySequence()); - if (addToUserShortcuts) - userShortcuts.insert(cfg_key, QKeySequence()); - } else { - for (auto keySequence : action->shortcuts()) { - defaultShortcuts.insert(cfg_key, keySequence); - if (addToUserShortcuts) - userShortcuts.insert(cfg_key, keySequence); - } - } - } - - for (auto *shortcut : shortcuts) { - if (shortcut->objectName().isEmpty()) - continue; - const QString cfg_key = cfgKey(shortcut); - bool addToUserShortcuts = !userShortcuts.contains(cfg_key); - for (auto keySequence : shortcut->keys()) { - defaultShortcuts.insert(cfg_key, keySequence); - if (addToUserShortcuts) - userShortcuts.insert(cfg_key, keySequence); - } - } - + storeShortcuts(StoreType::Default, actions); + storeShortcuts(StoreType::Default, shortcuts); save(); } @@ -783,31 +765,19 @@ QList ShortcutsConfig::getDefaultShortcuts(Shortcut *shortcut) con return defaultShortcuts.values(cfgKey(shortcut)); } +void ShortcutsConfig::setUserShortcuts(const QList &actions) { + storeShortcuts(StoreType::User, actions); + save(); +} + +void ShortcutsConfig::setUserShortcuts(const QList &shortcuts) { + storeShortcuts(StoreType::User, shortcuts); + save(); +} + void ShortcutsConfig::setUserShortcuts(const QList &actions, const QList &shortcuts) { - userShortcuts.clear(); - - for (auto *action : actions) { - if (action->text().isEmpty() || action->objectName().isEmpty()) - continue; - const QString cfg_key = cfgKey(action); - if (action->shortcuts().isEmpty()) - userShortcuts.insert(cfg_key, QKeySequence()); - else - for (auto keySequence : action->shortcuts()) - userShortcuts.insert(cfg_key, keySequence); - } - - for (auto *shortcut : shortcuts) { - if (shortcut->objectName().isEmpty()) - continue; - const QString cfg_key = cfgKey(shortcut); - if (shortcut->keys().isEmpty()) - userShortcuts.insert(cfg_key, QKeySequence()); - else - for (auto keySequence : shortcut->keys()) - userShortcuts.insert(cfg_key, keySequence); - } - + storeShortcuts(StoreType::User, actions); + storeShortcuts(StoreType::User, shortcuts); save(); } @@ -819,13 +789,58 @@ QList ShortcutsConfig::getUserShortcuts(Shortcut *shortcut) const return userShortcuts.values(cfgKey(shortcut)); } -// Converts a camelCase object name to snake_case. +void ShortcutsConfig::storeShortcuts(StoreType storeType, const QList &actions) { + for (auto *action : actions) + if (!action->text().isEmpty() && !action->objectName().isEmpty()) + storeShortcut(storeType, cfgKey(action), action->shortcuts()); +} + +void ShortcutsConfig::storeShortcuts(StoreType storeType, const QList &shortcuts) { + for (auto *shortcut : shortcuts) + if (!shortcut->whatsThis().isEmpty() && !shortcut->objectName().isEmpty()) + storeShortcut(storeType, cfgKey(shortcut), shortcut->keys()); +} + +void ShortcutsConfig::storeShortcut( + StoreType storeType, + const QString &cfgKey, + const QList &keySequences) +{ + bool storeUser = (storeType == User) || !userShortcuts.contains(cfgKey); + + if (storeType == Default) + defaultShortcuts.remove(cfgKey); + if (storeUser) + userShortcuts.remove(cfgKey); + + if (keySequences.isEmpty()) { + if (storeType == Default) + defaultShortcuts.insert(cfgKey, QKeySequence()); + if (storeUser) + userShortcuts.insert(cfgKey, QKeySequence()); + } else { + for (auto keySequence : keySequences) { + if (storeType == Default) + defaultShortcuts.insert(cfgKey, keySequence); + if (storeUser) + userShortcuts.insert(cfgKey, keySequence); + } + } +} + +/* Creates a config key from the object's name prepended with the parent + * window's object name, and converts camelCase to snake_case. */ QString ShortcutsConfig::cfgKey(QObject *object) const { - QString cfg_key = object->objectName(); + auto cfg_key = QString(); + auto *parentWidget = static_cast(object->parent()); + if (parentWidget) + cfg_key = parentWidget->window()->objectName() + '_'; + cfg_key += object->objectName(); + QRegularExpression re("[A-Z]"); int i = cfg_key.indexOf(re); while (i != -1) { - if (cfg_key.at(i - 1) != '_') + if (i != 0 && cfg_key.at(i - 1) != '_') cfg_key.insert(i++, '_'); i = cfg_key.indexOf(re, i + 1); } diff --git a/src/ui/shortcut.cpp b/src/ui/shortcut.cpp index 0dd2f30a..e94b4095 100644 --- a/src/ui/shortcut.cpp +++ b/src/ui/shortcut.cpp @@ -128,7 +128,7 @@ int Shortcut::id() const { } QList Shortcut::ids() const { - QList id_list({id()}); + QList id_list; for (auto *sc : sc_vec) id_list.append(sc->id()); return id_list; From f5964fbe7f0350960bf7debb66714c70f7bd8e7e Mon Sep 17 00:00:00 2001 From: BigBahss Date: Fri, 6 Nov 2020 10:20:31 -0500 Subject: [PATCH 09/44] Refactor ActionShortcutEdit into MultiKeyEdit --- include/ui/multikeyedit.h | 50 +++++++++++ porymap.pro | 2 + src/ui/multikeyedit.cpp | 175 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 227 insertions(+) create mode 100644 include/ui/multikeyedit.h create mode 100644 src/ui/multikeyedit.cpp diff --git a/include/ui/multikeyedit.h b/include/ui/multikeyedit.h new file mode 100644 index 00000000..c1736280 --- /dev/null +++ b/include/ui/multikeyedit.h @@ -0,0 +1,50 @@ +#ifndef MULTIKEYEDIT_H +#define MULTIKEYEDIT_H + +#include +#include + +class QLineEdit; + + +// A collection of QKeySequenceEdit's laid out horizontally. +class MultiKeyEdit : public QWidget +{ + Q_OBJECT + +public: + MultiKeyEdit(QWidget *parent = nullptr, int fieldCount = 2); + + bool eventFilter(QObject *watched, QEvent *event) override; + + int fieldCount() const; + void setFieldCount(int count); + QList keySequences() const; + bool removeOne(const QKeySequence &keySequence); + bool contains(const QKeySequence &keySequence) const; + void setContextMenuPolicy(Qt::ContextMenuPolicy policy); + +public slots: + void clear(); + void setKeySequences(const QList &keySequences); + void addKeySequence(const QKeySequence &keySequence); + +signals: + void keySequenceChanged(const QKeySequence &keySequence); + void editingFinished(); + void customContextMenuRequested(const QPoint &pos); + +private: + QVector keySequenceEdit_vec; + QList keySequence_list; // Used to track changes + + void addNewKeySequenceEdit(); + void alignKeySequencesLeft(); + void setFocusToLastNonEmptyKeySequenceEdit(); + +private slots: + void onEditingFinished(); + void showDefaultContextMenu(QLineEdit *lineEdit, const QPoint &pos); +}; + +#endif // MULTIKEYEDIT_H diff --git a/porymap.pro b/porymap.pro index 593b1112..af5a6205 100644 --- a/porymap.pro +++ b/porymap.pro @@ -73,6 +73,7 @@ SOURCES += src/core/block.cpp \ src/ui/mapruler.cpp \ src/ui/shortcut.cpp \ src/ui/shortcutseditor.cpp \ + src/ui/multikeyedit.cpp \ src/config.cpp \ src/editor.cpp \ src/main.cpp \ @@ -144,6 +145,7 @@ HEADERS += include/core/block.h \ include/ui/mapruler.h \ include/ui/shortcut.h \ include/ui/shortcutseditor.h \ + include/ui/multikeyedit.h \ include/config.h \ include/editor.h \ include/mainwindow.h \ diff --git a/src/ui/multikeyedit.cpp b/src/ui/multikeyedit.cpp new file mode 100644 index 00000000..5f66328e --- /dev/null +++ b/src/ui/multikeyedit.cpp @@ -0,0 +1,175 @@ +#include "multikeyedit.h" + +#include +#include +#include +#include +#include + + +MultiKeyEdit::MultiKeyEdit(QWidget *parent, int fieldCount) : + QWidget(parent), + keySequenceEdit_vec(QVector()), + keySequence_list(QList()) +{ + setLayout(new QHBoxLayout(this)); + layout()->setContentsMargins(0, 0, 0, 0); + setFieldCount(fieldCount); +} + +bool MultiKeyEdit::eventFilter(QObject *watched, QEvent *event) { + if (event->type() == QEvent::KeyPress) { + auto *watched_kse = qobject_cast(watched); + if (!watched_kse) + return false; + + auto *keyEvent = static_cast(event); + if (keyEvent->key() == Qt::Key_Escape) { + watched_kse->clearFocus(); + return true; + } else { + watched_kse->clear(); + } + } + + if (event->type() == QEvent::ContextMenu) { + auto *watched_lineEdit = qobject_cast(watched); + if (!watched_lineEdit) + return false; + + auto *contextMenuEvent = static_cast(event); + if (contextMenuPolicy() == Qt::DefaultContextMenu) { + showDefaultContextMenu(watched_lineEdit, contextMenuEvent->pos()); + return true; + } + } + + return false; +} + +int MultiKeyEdit::fieldCount() const { + return keySequenceEdit_vec.count(); +} + +void MultiKeyEdit::setFieldCount(int count) { + if (count < 1) + count = 1; + + while (keySequenceEdit_vec.count() < count) + addNewKeySequenceEdit(); + + while (keySequenceEdit_vec.count() > count) + delete keySequenceEdit_vec.takeLast(); + + alignKeySequencesLeft(); +} + +QList MultiKeyEdit::keySequences() const { + QList current_keySequences; + for (auto *kse : keySequenceEdit_vec) + if (!kse->keySequence().isEmpty()) + current_keySequences.append(kse->keySequence()); + return current_keySequences; +} + +bool MultiKeyEdit::removeOne(const QKeySequence &keySequence) { + for (auto *keySequenceEdit : keySequenceEdit_vec) { + if (keySequenceEdit->keySequence() == keySequence) { + keySequence_list.removeOne(keySequence); + keySequenceEdit->clear(); + alignKeySequencesLeft(); + return true; + } + } + return false; +} + +bool MultiKeyEdit::contains(const QKeySequence &keySequence) const { + for (auto current_keySequence : keySequences()) + if (current_keySequence == keySequence) + return true; + return false; +} + +void MultiKeyEdit::setContextMenuPolicy(Qt::ContextMenuPolicy policy) { + QWidget::setContextMenuPolicy(policy); + auto lineEdit_children = findChildren(); + for (auto *lineEdit : lineEdit_children) + lineEdit->setContextMenuPolicy(policy); +} + +void MultiKeyEdit::clear() { + for (auto *keySequenceEdit : keySequenceEdit_vec) + keySequenceEdit->clear(); + keySequence_list.clear(); +} + +void MultiKeyEdit::setKeySequences(const QList &keySequences) { + clear(); + keySequence_list = keySequences; + int minCount = qMin(keySequenceEdit_vec.count(), keySequence_list.count()); + for (int i = 0; i < minCount; ++i) + keySequenceEdit_vec[i]->setKeySequence(keySequence_list[i]); +} + +void MultiKeyEdit::addKeySequence(const QKeySequence &keySequence) { + keySequenceEdit_vec.last()->setKeySequence(keySequence); + alignKeySequencesLeft(); +} + +void MultiKeyEdit::addNewKeySequenceEdit() { + auto *keySequenceEdit = new QKeySequenceEdit(this); + keySequenceEdit->installEventFilter(this); + connect(keySequenceEdit, &QKeySequenceEdit::editingFinished, + this, &MultiKeyEdit::onEditingFinished); + connect(keySequenceEdit, &QKeySequenceEdit::keySequenceChanged, + this, &MultiKeyEdit::keySequenceChanged); + + auto *lineEdit = keySequenceEdit->findChild(); + lineEdit->installEventFilter(this); + connect(lineEdit, &QLineEdit::customContextMenuRequested, + this, &MultiKeyEdit::customContextMenuRequested); + + layout()->addWidget(keySequenceEdit); + keySequenceEdit_vec.append(keySequenceEdit); +} + +// Shift all key sequences left if there are any empty QKeySequenceEdit's. +void MultiKeyEdit::alignKeySequencesLeft() { + blockSignals(true); + setKeySequences(keySequences()); + blockSignals(false); +} + +void MultiKeyEdit::setFocusToLastNonEmptyKeySequenceEdit() { + for (auto it = keySequenceEdit_vec.rbegin(); it != keySequenceEdit_vec.rend(); ++it) { + if (!(*it)->keySequence().isEmpty()) { + (*it)->setFocus(); + return; + } + } +} + +void MultiKeyEdit::onEditingFinished() { + auto *keySequenceEdit = qobject_cast(sender()); + if (keySequenceEdit && keySequence_list.contains(keySequenceEdit->keySequence())) + removeOne(keySequenceEdit->keySequence()); + alignKeySequencesLeft(); + setFocusToLastNonEmptyKeySequenceEdit(); + + emit editingFinished(); +} + +/* QKeySequenceEdit doesn't send or receive context menu events, but it owns QLineEdit that does. + * This QLineEdit hijacks those events and so we need to filter/connect to it directly, rather than + * the QKeySequenceEdit. I wouldn't be surprised if Qt fixed this in the future, in which case any + * context menu related code in this class might need to change. */ +void MultiKeyEdit::showDefaultContextMenu(QLineEdit *lineEdit, const QPoint &pos) { + QMenu menu(this); + QAction clearAction("Clear Shortcut", &menu); + connect(&clearAction, &QAction::triggered, lineEdit, [&lineEdit]() { + lineEdit->clear(); + }); + menu.addAction(&clearAction); + menu.exec(lineEdit->mapToGlobal(pos)); +} From 2fb3bf4e26b4af7ae41a8dfb513aab946606ff5f Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 8 Nov 2020 08:36:02 -0500 Subject: [PATCH 10/44] Redesign ShortcutsEditor to take an obj list and refactor config to reflect that --- forms/shortcutseditor.ui | 101 ++++++++---- include/config.h | 48 +++--- include/mainwindow.h | 7 +- include/ui/shortcut.h | 8 +- include/ui/shortcutseditor.h | 77 +++------ src/config.cpp | 121 +++++++------- src/mainwindow.cpp | 47 ++++-- src/ui/shortcutseditor.cpp | 312 ++++++++++++++--------------------- 8 files changed, 356 insertions(+), 365 deletions(-) diff --git a/forms/shortcutseditor.ui b/forms/shortcutseditor.ui index 31b7014a..fab28d98 100644 --- a/forms/shortcutseditor.ui +++ b/forms/shortcutseditor.ui @@ -1,47 +1,88 @@ ShortcutsEditor - + 0 0 - 540 - 640 + 800 + 700 Shortcuts Editor - - - - - true - - - - - 0 - 0 - 516 - 580 - + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + QFrame::Plain + + + 0 + + + true + + + + + 0 + 0 + 794 + 642 + + + - - - - - - QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults - - - false - - - - + + + + + QFrame::Box + + + QFrame::Raised + + + + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults + + + false + + + + + + + + diff --git a/include/config.h b/include/config.h index a690ce90..6d7753ac 100644 --- a/include/config.h +++ b/include/config.h @@ -201,53 +201,49 @@ class ShortcutsConfig : public KeyValueConfigBase { public: ShortcutsConfig() : - userShortcuts(QMultiMap()), - defaultShortcuts(QMultiMap()) - { } - - virtual void reset() override { userShortcuts.clear(); } + user_shortcuts({ }), + default_shortcuts({ }) + { } - void setDefaultShortcuts(const QList &actions); - void setDefaultShortcuts(const QList &shortcuts); - void setDefaultShortcuts(const QList &actions, const QList &shortcuts); - QList getDefaultShortcuts(QAction *action) const; - QList getDefaultShortcuts(Shortcut *shortcut) const; + virtual void reset() override { user_shortcuts.clear(); } - void setUserShortcuts(const QList &actions); - void setUserShortcuts(const QList &shortcuts); - void setUserShortcuts(const QList &actions, const QList &shortcuts); - QList getUserShortcuts(QAction *action) const; - QList getUserShortcuts(Shortcut *shortcut) const; + void setDefaultShortcuts(const QObjectList &objects); + void setDefaultShortcuts(const QMultiMap &objects_keySequences); + QList defaultShortcuts(const QObject *object) const; + + void setUserShortcuts(const QObjectList &objects); + void setUserShortcuts(const QMultiMap &objects_keySequences); + QList userShortcuts(const QObject *object) const; + + static bool objectNameIsValid(const QObject *object); protected: virtual QString getConfigFilepath() override; virtual void parseConfigKeyValue(QString key, QString value) override; virtual QMap getKeyValueMap() override; - virtual void onNewConfigFileCreated() override {}; - virtual void setUnreadKeys() override {}; + virtual void onNewConfigFileCreated() override { }; + virtual void setUnreadKeys() override { }; private: - QMultiMap userShortcuts; - QMultiMap defaultShortcuts; + QMultiMap user_shortcuts; + QMultiMap default_shortcuts; enum StoreType { User, Default }; + QString cfgKey(const QObject *object) const; + QList currentShortcuts(const QObject *object) const; + + void storeShortcutsFromList(StoreType storeType, const QObjectList &objects); void storeShortcuts( - StoreType storeType, - const QList &actions); - void storeShortcuts( - StoreType storeType, - const QList &shortcuts); - void storeShortcut( StoreType storeType, const QString &cfgKey, const QList &keySequences); - QString cfgKey(QObject *object) const; }; +// Call setDefaultShortcuts() prior to applying user shortcuts. extern ShortcutsConfig shortcutsConfig; #endif // CONFIG_H diff --git a/include/mainwindow.h b/include/mainwindow.h index f406f87f..6cb2f37d 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -129,6 +129,7 @@ private slots: void openNewMapPopupWindow(int, QVariant); void onNewMapCreated(); void onMapCacheCleared(); + void applyUserShortcuts(); void on_action_NewMap_triggered(); void on_actionNew_Tileset_triggered(); @@ -292,12 +293,12 @@ private: void initWindow(); void initCustomUI(); - void initExtraShortcuts(); void initExtraSignals(); void initEditor(); void initMiscHeapObjects(); void initMapSortOrder(); - void initUserShortcuts(); + void initShortcuts(); + void initExtraShortcuts(); void setProjectSpecificUIVisibility(); void loadUserSettings(); void applyMapListFilter(QString filterText); @@ -312,6 +313,8 @@ private: bool isProjectOpen(); void showExportMapImageWindow(bool stitchMode); void redrawMetatileSelection(); + + QObjectList shortcutableObjects() const; }; enum MapListUserRoles { diff --git a/include/ui/shortcut.h b/include/ui/shortcut.h index 8b0e87ce..58980a3b 100644 --- a/include/ui/shortcut.h +++ b/include/ui/shortcut.h @@ -6,11 +6,17 @@ #include -// Alternative to QShortcut that adds support for multiple QKeySequences. +// Alternative to QShortcut that adds support for multiple key sequences. // Use this to allow the shortcut to be editable in ShortcutsEditor. class Shortcut : public QObject { Q_OBJECT + Q_DECLARE_PRIVATE(QShortcut) + Q_PROPERTY(QKeySequence key READ key WRITE setKey) + Q_PROPERTY(QString whatsThis READ whatsThis WRITE setWhatsThis) + Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) + Q_PROPERTY(bool autoRepeat READ autoRepeat WRITE setAutoRepeat) + Q_PROPERTY(Qt::ShortcutContext context READ context WRITE setContext) public: explicit Shortcut(QWidget *parent); diff --git a/include/ui/shortcutseditor.h b/include/ui/shortcutseditor.h index b5aadc92..85d3fa69 100644 --- a/include/ui/shortcutseditor.h +++ b/include/ui/shortcutseditor.h @@ -1,80 +1,57 @@ #ifndef SHORTCUTSEDITOR_H #define SHORTCUTSEDITOR_H +#include "shortcut.h" + +#include #include #include +#include +#include +class QFormLayout; +class MultiKeyEdit; class QAbstractButton; -class QAction; -class QKeySequenceEdit; -class ActionShortcutEdit; namespace Ui { class ShortcutsEditor; } -class ShortcutsEditor : public QDialog +class ShortcutsEditor : public QMainWindow { Q_OBJECT public: - explicit ShortcutsEditor(QWidget *parent = nullptr); + explicit ShortcutsEditor(const QObjectList &objectList, QWidget *parent = nullptr); ~ShortcutsEditor(); +signals: + void shortcutsSaved(); + private: Ui::ShortcutsEditor *ui; - QMap actions; - QWidget *ase_container; + QWidget *main_container; + QMultiMap labels_objects; + QHash contexts_layouts; + QHash multiKeyEdits_objects; - void populateShortcuts(); + void parseObjectList(const QObjectList &objectList); + QString getLabel(const QObject *object) const; + bool stringPropertyIsNotEmpty(const QObject *object, const char *name) const; + void populateMainContainer(); + QString getShortcutContext(const QObject *object) const; + void addNewContextGroup(const QString &shortcutContext); + void addNewMultiKeyEdit(const QObject *object, const QString &shortcutContext); + QList siblings(MultiKeyEdit *multiKeyEdit) const; + void promptUserOnDuplicateFound(MultiKeyEdit *current, MultiKeyEdit *sender); + void removeKeySequence(const QKeySequence &keySequence, MultiKeyEdit *multiKeyEdit); void saveShortcuts(); void resetShortcuts(); - void promptUser(ActionShortcutEdit *current, ActionShortcutEdit *sender); private slots: - void checkForDuplicates(); + void checkForDuplicates(const QKeySequence &keySequence); void dialogButtonClicked(QAbstractButton *button); }; - -// A collection of QKeySequenceEdit's in a QHBoxLayout with a cooresponding QAction -class ActionShortcutEdit : public QWidget -{ - Q_OBJECT - -public: - explicit ActionShortcutEdit(QWidget *parent = nullptr, QAction *action = nullptr, int count = 1); - - bool eventFilter(QObject *watched, QEvent *event) override; - - int count() const { return kse_children.count(); } - void setCount(int count); - QList shortcuts() const; - void setShortcuts(const QList &keySequences); - void applyShortcuts(); - bool removeOne(const QKeySequence &keySequence); - bool contains(const QKeySequence &keySequence); - bool contains(QKeySequenceEdit *keySequenceEdit); - QKeySequence last() const { return shortcuts().last(); } - - QAction *action; - -public slots: - void clear(); - -signals: - void editingFinished(); - -private: - QVector kse_children; - QList ks_list; - - void updateShortcuts() { setShortcuts(shortcuts()); } - void focusLast(); - -private slots: - void onEditingFinished(); -}; - #endif // SHORTCUTSEDITOR_H diff --git a/src/config.cpp b/src/config.cpp index e78ee25c..a50f3c3f 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -13,6 +13,7 @@ #include #include #include +#include KeyValueConfigBase::~KeyValueConfigBase() { @@ -722,13 +723,13 @@ QString ShortcutsConfig::getConfigFilepath() { void ShortcutsConfig::parseConfigKeyValue(QString key, QString value) { QStringList keySequences = value.split(' '); for (auto keySequence : keySequences) - userShortcuts.insert(key, keySequence); + user_shortcuts.insert(key, keySequence); } QMap ShortcutsConfig::getKeyValueMap() { QMap map; - for (auto cfg_key : userShortcuts.uniqueKeys()) { - auto keySequences = userShortcuts.values(cfg_key); + for (auto cfg_key : user_shortcuts.uniqueKeys()) { + auto keySequences = user_shortcuts.values(cfg_key); QStringList values; for (auto keySequence : keySequences) values.append(keySequence.toString()); @@ -738,99 +739,77 @@ QMap ShortcutsConfig::getKeyValueMap() { return map; } -// Call this before applying user shortcuts to be able to restore default shortcuts. -void ShortcutsConfig::setDefaultShortcuts(const QList &actions) { - storeShortcuts(StoreType::Default, actions); +void ShortcutsConfig::setDefaultShortcuts(const QObjectList &objects) { + storeShortcutsFromList(StoreType::Default, objects); save(); } -// Call this before applying user shortcuts to be able to restore default shortcuts. -void ShortcutsConfig::setDefaultShortcuts(const QList &shortcuts) { - storeShortcuts(StoreType::Default, shortcuts); +void ShortcutsConfig::setDefaultShortcuts(const QMultiMap &objects_keySequences) { + for (auto *object : objects_keySequences.uniqueKeys()) + storeShortcuts(StoreType::Default, cfgKey(object), objects_keySequences.values(object)); save(); } -// Call this before applying user shortcuts to be able to restore default shortcuts. -void ShortcutsConfig::setDefaultShortcuts(const QList &actions, const QList &shortcuts) { - storeShortcuts(StoreType::Default, actions); - storeShortcuts(StoreType::Default, shortcuts); +QList ShortcutsConfig::defaultShortcuts(const QObject *object) const { + return default_shortcuts.values(cfgKey(object)); +} + +void ShortcutsConfig::setUserShortcuts(const QObjectList &objects) { + storeShortcutsFromList(StoreType::User, objects); save(); } -QList ShortcutsConfig::getDefaultShortcuts(QAction *action) const { - return defaultShortcuts.values(cfgKey(action)); -} - -QList ShortcutsConfig::getDefaultShortcuts(Shortcut *shortcut) const { - return defaultShortcuts.values(cfgKey(shortcut)); -} - -void ShortcutsConfig::setUserShortcuts(const QList &actions) { - storeShortcuts(StoreType::User, actions); +void ShortcutsConfig::setUserShortcuts(const QMultiMap &objects_keySequences) { + for (auto *object : objects_keySequences.uniqueKeys()) + storeShortcuts(StoreType::User, cfgKey(object), objects_keySequences.values(object)); save(); } -void ShortcutsConfig::setUserShortcuts(const QList &shortcuts) { - storeShortcuts(StoreType::User, shortcuts); - save(); +QList ShortcutsConfig::userShortcuts(const QObject *object) const { + return user_shortcuts.values(cfgKey(object)); } -void ShortcutsConfig::setUserShortcuts(const QList &actions, const QList &shortcuts) { - storeShortcuts(StoreType::User, actions); - storeShortcuts(StoreType::User, shortcuts); - save(); +void ShortcutsConfig::storeShortcutsFromList(StoreType storeType, const QObjectList &objects) { + for (const auto *object : objects) + if (objectNameIsValid(object)) + storeShortcuts(storeType, cfgKey(object), currentShortcuts(object)); } -QList ShortcutsConfig::getUserShortcuts(QAction *action) const { - return userShortcuts.values(cfgKey(action)); -} - -QList ShortcutsConfig::getUserShortcuts(Shortcut *shortcut) const { - return userShortcuts.values(cfgKey(shortcut)); -} - -void ShortcutsConfig::storeShortcuts(StoreType storeType, const QList &actions) { - for (auto *action : actions) - if (!action->text().isEmpty() && !action->objectName().isEmpty()) - storeShortcut(storeType, cfgKey(action), action->shortcuts()); -} - -void ShortcutsConfig::storeShortcuts(StoreType storeType, const QList &shortcuts) { - for (auto *shortcut : shortcuts) - if (!shortcut->whatsThis().isEmpty() && !shortcut->objectName().isEmpty()) - storeShortcut(storeType, cfgKey(shortcut), shortcut->keys()); -} - -void ShortcutsConfig::storeShortcut( +void ShortcutsConfig::storeShortcuts( StoreType storeType, const QString &cfgKey, const QList &keySequences) { - bool storeUser = (storeType == User) || !userShortcuts.contains(cfgKey); + bool storeUser = (storeType == User) || !user_shortcuts.contains(cfgKey); if (storeType == Default) - defaultShortcuts.remove(cfgKey); + default_shortcuts.remove(cfgKey); if (storeUser) - userShortcuts.remove(cfgKey); + user_shortcuts.remove(cfgKey); if (keySequences.isEmpty()) { if (storeType == Default) - defaultShortcuts.insert(cfgKey, QKeySequence()); + default_shortcuts.insert(cfgKey, QKeySequence()); if (storeUser) - userShortcuts.insert(cfgKey, QKeySequence()); + user_shortcuts.insert(cfgKey, QKeySequence()); } else { for (auto keySequence : keySequences) { if (storeType == Default) - defaultShortcuts.insert(cfgKey, keySequence); + default_shortcuts.insert(cfgKey, keySequence); if (storeUser) - userShortcuts.insert(cfgKey, keySequence); + user_shortcuts.insert(cfgKey, keySequence); } } } +bool ShortcutsConfig::objectNameIsValid(const QObject *object) { + // Qt internal action names start with "_q_" so we filter those out. + return !object->objectName().isEmpty() && !object->objectName().startsWith("_q_"); +} + /* Creates a config key from the object's name prepended with the parent * window's object name, and converts camelCase to snake_case. */ -QString ShortcutsConfig::cfgKey(QObject *object) const { +QString ShortcutsConfig::cfgKey(const QObject *object) const { auto cfg_key = QString(); auto *parentWidget = static_cast(object->parent()); if (parentWidget) @@ -838,11 +817,31 @@ QString ShortcutsConfig::cfgKey(QObject *object) const { cfg_key += object->objectName(); QRegularExpression re("[A-Z]"); - int i = cfg_key.indexOf(re); + int i = cfg_key.indexOf(re, 1); while (i != -1) { - if (i != 0 && cfg_key.at(i - 1) != '_') + if (cfg_key.at(i - 1) != '_') cfg_key.insert(i++, '_'); i = cfg_key.indexOf(re, i + 1); } return cfg_key.toLower(); } + +QList ShortcutsConfig::currentShortcuts(const QObject *object) const { + if (object->inherits("QAction")) { + const auto *action = qobject_cast(object); + return action->shortcuts(); + } else if (object->inherits("QAbstractButton")) { + const auto *button = qobject_cast(object); + return { button->shortcut() }; + } else if (object->inherits("Shortcut")) { + const auto *shortcut = qobject_cast(object); + return shortcut->keys(); + } else if (object->inherits("QShortcut")) { + const auto *qshortcut = qobject_cast(object); + return { qshortcut->key() }; + } else if (object->property("shortcut").isValid()) { + return { object->property("shortcut").value() }; + } else { + return { }; + } +} diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 2b242876..5085483b 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -88,40 +88,63 @@ void MainWindow::initWindow() { porymapConfig.load(); this->initCustomUI(); this->initExtraSignals(); - this->initExtraShortcuts(); this->initEditor(); this->initMiscHeapObjects(); this->initMapSortOrder(); - this->initUserShortcuts(); + this->initShortcuts(); this->restoreWindowState(); setWindowDisabled(true); } +void MainWindow::initShortcuts() { + initExtraShortcuts(); + + shortcutsConfig.load(); + shortcutsConfig.setDefaultShortcuts(shortcutableObjects()); + applyUserShortcuts(); +} + void MainWindow::initExtraShortcuts() { auto *shortcutReset_Zoom = new Shortcut(QKeySequence("Ctrl+0"), this, SLOT(resetMapViewScale())); - shortcutReset_Zoom->setObjectName("shortcutReset_Zoom"); + shortcutReset_Zoom->setObjectName("shortcutZoom_Reset"); + shortcutReset_Zoom->setWhatsThis("Zoom Reset"); auto *shortcutToggle_Grid = new Shortcut(QKeySequence("Ctrl+G"), ui->checkBox_ToggleGrid, SLOT(toggle())); shortcutToggle_Grid->setObjectName("shortcutToggle_Grid"); + shortcutToggle_Grid->setWhatsThis("Toggle Grid"); auto *shortcutDuplicate_Events = new Shortcut(QKeySequence("Ctrl+D"), this, SLOT(duplicate())); shortcutDuplicate_Events->setObjectName("shortcutDuplicate_Events"); + shortcutDuplicate_Events->setWhatsThis("Duplicate Selected Event(s)"); auto *shortcutDelete_Object = new Shortcut( {QKeySequence("Del"), QKeySequence("Backspace")}, this, SLOT(on_toolButton_deleteObject_clicked())); shortcutDelete_Object->setObjectName("shortcutDelete_Object"); + shortcutDelete_Object->setWhatsThis("Delete Selected Event(s)"); ui->actionZoom_In->setShortcuts({ui->actionZoom_In->shortcut(), QKeySequence("Ctrl+=")}); } -void MainWindow::initUserShortcuts() { - shortcutsConfig.load(); - shortcutsConfig.setDefaultShortcuts(findChildren(), findChildren()); +QObjectList MainWindow::shortcutableObjects() const { + QObjectList shortcutable_objects; for (auto *action : findChildren()) - action->setShortcuts(shortcutsConfig.getUserShortcuts(action)); + if (!action->objectName().isEmpty()) + shortcutable_objects.append(qobject_cast(action)); for (auto *shortcut : findChildren()) - shortcut->setKeys(shortcutsConfig.getUserShortcuts(shortcut)); + if (!shortcut->objectName().isEmpty()) + shortcutable_objects.append(qobject_cast(shortcut)); + + return shortcutable_objects; +} + +void MainWindow::applyUserShortcuts() { + for (auto *action : findChildren()) + if (!action->objectName().isEmpty()) + action->setShortcuts(shortcutsConfig.userShortcuts(action)); + for (auto *shortcut : findChildren()) + if (!shortcut->objectName().isEmpty()) + shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); } void MainWindow::initCustomUI() { @@ -1426,8 +1449,12 @@ void MainWindow::on_actionUse_Poryscript_triggered(bool checked) void MainWindow::on_actionEdit_Shortcuts_triggered() { - if (!shortcutsEditor) - shortcutsEditor = new ShortcutsEditor(this); + if (!shortcutsEditor) { + shortcutsEditor = new ShortcutsEditor(shortcutableObjects(), this); + connect(shortcutsEditor, &QObject::destroyed, [=](QObject *) { shortcutsEditor = nullptr; }); + connect(shortcutsEditor, &ShortcutsEditor::shortcutsSaved, + this, &MainWindow::applyUserShortcuts); + } if (shortcutsEditor->isHidden()) shortcutsEditor->show(); diff --git a/src/ui/shortcutseditor.cpp b/src/ui/shortcutseditor.cpp index 97a3ebf4..efafc556 100644 --- a/src/ui/shortcutseditor.cpp +++ b/src/ui/shortcutseditor.cpp @@ -1,26 +1,32 @@ #include "shortcutseditor.h" #include "ui_shortcutseditor.h" #include "config.h" +#include "multikeyedit.h" #include "log.h" +#include #include #include #include #include -#include -#include +#include +#include -ShortcutsEditor::ShortcutsEditor(QWidget *parent) : - QDialog(parent), +ShortcutsEditor::ShortcutsEditor(const QObjectList &objectList, QWidget *parent) : + QMainWindow(parent), ui(new Ui::ShortcutsEditor), - actions(QMap()) + main_container(nullptr) { ui->setupUi(this); - ase_container = ui->scrollAreaWidgetContents_Shortcuts; + setAttribute(Qt::WA_DeleteOnClose); + main_container = ui->scrollAreaWidgetContents_Shortcuts; + main_container->setLayout(new QVBoxLayout(main_container)); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &ShortcutsEditor::dialogButtonClicked); - populateShortcuts(); + + parseObjectList(objectList); + populateMainContainer(); } ShortcutsEditor::~ShortcutsEditor() @@ -28,207 +34,143 @@ ShortcutsEditor::~ShortcutsEditor() delete ui; } -void ShortcutsEditor::populateShortcuts() { - if (!parent()) - return; +void ShortcutsEditor::saveShortcuts() { + QMultiMap objects_keySequences; + for (auto it = multiKeyEdits_objects.cbegin(); it != multiKeyEdits_objects.cend(); ++it) + for (auto keySequence : it.key()->keySequences()) + objects_keySequences.insert(it.value(), keySequence); - for (auto action : parent()->findChildren()) - if (!action->text().isEmpty() && !action->objectName().isEmpty()) - actions.insert(action->text().remove('&'), action); + shortcutsConfig.setUserShortcuts(objects_keySequences); + emit shortcutsSaved(); +} - auto *formLayout = new QFormLayout(ase_container); - for (auto *action : actions) { - auto userShortcuts = shortcutsConfig.getUserShortcuts(action); - auto *ase = new ActionShortcutEdit(ase_container, action, 2); - connect(ase, &ActionShortcutEdit::editingFinished, - this, &ShortcutsEditor::checkForDuplicates); - ase->setShortcuts(userShortcuts); - formLayout->addRow(action->text(), ase); +// Restores default shortcuts but doesn't save until Apply or OK is clicked. +void ShortcutsEditor::resetShortcuts() { + for (auto it = multiKeyEdits_objects.begin(); it != multiKeyEdits_objects.end(); ++it) { + it.key()->blockSignals(true); + const auto defaults = shortcutsConfig.defaultShortcuts(it.value()); + it.key()->setKeySequences(defaults); + it.key()->blockSignals(false); } } -void ShortcutsEditor::saveShortcuts() { - auto ase_children = ase_container->findChildren(QString(), Qt::FindDirectChildrenOnly); - for (auto *ase : ase_children) - ase->applyShortcuts(); - shortcutsConfig.setUserShortcuts(actions.values()); +void ShortcutsEditor::parseObjectList(const QObjectList &objectList) { + for (auto *object : objectList) { + const auto label = getLabel(object); + if (!label.isEmpty() && ShortcutsConfig::objectNameIsValid(object)) + labels_objects.insert(label, object); + } } -void ShortcutsEditor::resetShortcuts() { - auto ase_children = ase_container->findChildren(QString(), Qt::FindDirectChildrenOnly); - for (auto *ase : ase_children) - ase->setShortcuts(shortcutsConfig.getDefaultShortcuts(ase->action)); +QString ShortcutsEditor::getLabel(const QObject *object) const { + if (stringPropertyIsNotEmpty(object, "text")) + return object->property("text").toString().remove('&'); + else if (stringPropertyIsNotEmpty(object, "whatsThis")) + return object->property("whatsThis").toString().remove('&'); + else + return QString(); } -void ShortcutsEditor::promptUser(ActionShortcutEdit *current, ActionShortcutEdit *sender) { - auto result = QMessageBox::question( - this, - "porymap", - QString("Shortcut \"%1\" is already used by \"%2\", would you like to replace it?") - .arg(sender->last().toString()).arg(current->action->text()), - QMessageBox::Yes | QMessageBox::No, QMessageBox::No); +bool ShortcutsEditor::stringPropertyIsNotEmpty(const QObject *object, const char *name) const { + return object->property(name).isValid() && !object->property(name).toString().isEmpty(); +} + +void ShortcutsEditor::populateMainContainer() { + for (auto object : labels_objects) { + const auto shortcutContext = getShortcutContext(object); + if (!contexts_layouts.contains(shortcutContext)) + addNewContextGroup(shortcutContext); + + addNewMultiKeyEdit(object, shortcutContext); + } +} + +// The context for which the object's shortcut is active (Displayed in group box title). +// Uses the parent window's objectName and adds spaces between words. +QString ShortcutsEditor::getShortcutContext(const QObject *object) const { + auto objectParentWidget = static_cast(object->parent()); + auto context = objectParentWidget->window()->objectName(); + QRegularExpression re("[A-Z]"); + int i = context.indexOf(re, 1); + while (i != -1) { + if (context.at(i - 1) != ' ') + context.insert(i++, ' '); + i = context.indexOf(re, i + 1); + } + return context; +} + +// Seperate shortcuts into context groups for duplicate checking. +void ShortcutsEditor::addNewContextGroup(const QString &shortcutContext) { + auto *groupBox = new QGroupBox(shortcutContext, main_container); + main_container->layout()->addWidget(groupBox); + auto *formLayout = new QFormLayout(groupBox); + contexts_layouts.insert(shortcutContext, formLayout); +} + +void ShortcutsEditor::addNewMultiKeyEdit(const QObject *object, const QString &shortcutContext) { + auto *container = contexts_layouts.value(shortcutContext)->parentWidget(); + auto *multiKeyEdit = new MultiKeyEdit(container); + multiKeyEdit->setKeySequences(shortcutsConfig.userShortcuts(object)); + connect(multiKeyEdit, &MultiKeyEdit::keySequenceChanged, + this, &ShortcutsEditor::checkForDuplicates); + contexts_layouts.value(shortcutContext)->addRow(labels_objects.key(object), multiKeyEdit); + multiKeyEdits_objects.insert(multiKeyEdit, object); +} + +void ShortcutsEditor::checkForDuplicates(const QKeySequence &keySequence) { + if (keySequence.isEmpty()) + return; + + auto *sender_multiKeyEdit = qobject_cast(sender()); + if (!sender_multiKeyEdit) + return; + + for (auto *sibling_multiKeyEdit : siblings(sender_multiKeyEdit)) + if (sibling_multiKeyEdit->contains(keySequence)) + promptUserOnDuplicateFound(sender_multiKeyEdit, sibling_multiKeyEdit); +} + +QList ShortcutsEditor::siblings(MultiKeyEdit *multiKeyEdit) const { + auto list = multiKeyEdit->parent()->findChildren(QString(), Qt::FindDirectChildrenOnly); + list.removeOne(multiKeyEdit); + return list; +} + +void ShortcutsEditor::promptUserOnDuplicateFound(MultiKeyEdit *sender, MultiKeyEdit *sibling) { + const auto duplicateKeySequence = sender->keySequences().last(); + const auto siblingLabel = getLabel(multiKeyEdits_objects.value(sibling)); + const auto message = QString( + "Shortcut '%1' is already used by '%2', would you like to replace it?") + .arg(duplicateKeySequence.toString()).arg(siblingLabel); + + const auto result = QMessageBox::question( + this, "porymap", message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No); if (result == QMessageBox::Yes) - current->removeOne(sender->last()); - else if (result == QMessageBox::No) - sender->removeOne(sender->last()); + removeKeySequence(duplicateKeySequence, sibling); + else + removeKeySequence(duplicateKeySequence, sender); + + activateWindow(); } -void ShortcutsEditor::checkForDuplicates() { - auto *sender_ase = qobject_cast(sender()); - if (!sender_ase) - return; - - for (auto *child_kse : findChildren()) { - if (child_kse->keySequence().isEmpty() || child_kse->parent() == sender()) - continue; - - if (sender_ase->contains(child_kse->keySequence())) { - auto *current_ase = qobject_cast(child_kse->parent()); - if (!current_ase) - continue; - - promptUser(current_ase, sender_ase); - activateWindow(); - return; - } - } +void ShortcutsEditor::removeKeySequence(const QKeySequence &keySequence, MultiKeyEdit *multiKeyEdit) { + multiKeyEdit->blockSignals(true); + multiKeyEdit->removeOne(keySequence); + multiKeyEdit->blockSignals(false); } void ShortcutsEditor::dialogButtonClicked(QAbstractButton *button) { auto buttonRole = ui->buttonBox->buttonRole(button); if (buttonRole == QDialogButtonBox::AcceptRole) { saveShortcuts(); - hide(); + close(); } else if (buttonRole == QDialogButtonBox::ApplyRole) { saveShortcuts(); } else if (buttonRole == QDialogButtonBox::RejectRole) { - hide(); + close(); } else if (buttonRole == QDialogButtonBox::ResetRole) { resetShortcuts(); } } - - -ActionShortcutEdit::ActionShortcutEdit(QWidget *parent, QAction *action, int count) : - QWidget(parent), - action(action), - kse_children(QVector()), - ks_list(QList()) -{ - setLayout(new QHBoxLayout(this)); - layout()->setContentsMargins(0, 0, 0, 0); - setCount(count); -} - -bool ActionShortcutEdit::eventFilter(QObject *watched, QEvent *event) { - auto *watched_kse = qobject_cast(watched); - if (!watched_kse) - return false; - - if (event->type() == QEvent::KeyPress) { - auto *keyEvent = static_cast(event); - if (keyEvent->key() == Qt::Key_Escape) { - watched_kse->clearFocus(); - return true; - } else if (keyEvent->key() == Qt::Key_Backspace) { - removeOne(watched_kse->keySequence()); - return true; - } else { - watched_kse->clear(); - } - } - return false; -} - -void ActionShortcutEdit::setCount(int count) { - if (count < 1) - count = 1; - - while (kse_children.count() > count) { - layout()->removeWidget(kse_children.last()); - delete kse_children.last(); - kse_children.removeLast(); - } - - while (kse_children.count() < count) { - auto *kse = new QKeySequenceEdit(this); - connect(kse, &QKeySequenceEdit::editingFinished, - this, &ActionShortcutEdit::onEditingFinished); - kse->installEventFilter(this); - layout()->addWidget(kse); - kse_children.append(kse); - } -} - -QList ActionShortcutEdit::shortcuts() const { - QList current_ks_list; - for (auto *kse : kse_children) - if (!kse->keySequence().isEmpty()) - current_ks_list.append(kse->keySequence()); - return current_ks_list; -} - -void ActionShortcutEdit::setShortcuts(const QList &keySequences) { - clear(); - ks_list = keySequences; - int minCount = qMin(kse_children.count(), ks_list.count()); - for (int i = 0; i < minCount; ++i) - kse_children[i]->setKeySequence(ks_list[i]); -} - -void ActionShortcutEdit::applyShortcuts() { - action->setShortcuts(shortcuts()); -} - -bool ActionShortcutEdit::removeOne(const QKeySequence &keySequence) { - for (auto *kse : kse_children) { - if (kse->keySequence() == keySequence) { - ks_list.removeOne(keySequence); - kse->clear(); - updateShortcuts(); - return true; - } - } - return false; -} - -bool ActionShortcutEdit::contains(const QKeySequence &keySequence) { - for (auto ks : shortcuts()) - if (ks == keySequence) - return true; - return false; -} - -bool ActionShortcutEdit::contains(QKeySequenceEdit *keySequenceEdit) { - for (auto *kse : kse_children) - if (kse == keySequenceEdit) - return true; - return false; -} - -void ActionShortcutEdit::clear() { - for (auto *kse : kse_children) - kse->clear(); -} - -void ActionShortcutEdit::focusLast() { - for (int i = count() - 1; i >= 0; --i) { - if (!kse_children[i]->keySequence().isEmpty()) { - kse_children[i]->setFocus(); - return; - } - } -} - -void ActionShortcutEdit::onEditingFinished() { - auto *kse = qobject_cast(sender()); - if (!kse) - return; - - if (ks_list.contains(kse->keySequence())) - removeOne(kse->keySequence()); - updateShortcuts(); - focusLast(); - emit editingFinished(); -} From 9a3609ee6d7c9fa37a78963caf11a4b4b4ba6371 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Mon, 9 Nov 2020 02:56:22 -0500 Subject: [PATCH 11/44] Fix MultiKeyEdit clear action not re-aligning key sequences --- src/ui/multikeyedit.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ui/multikeyedit.cpp b/src/ui/multikeyedit.cpp index 5f66328e..34ac19c8 100644 --- a/src/ui/multikeyedit.cpp +++ b/src/ui/multikeyedit.cpp @@ -167,8 +167,8 @@ void MultiKeyEdit::onEditingFinished() { void MultiKeyEdit::showDefaultContextMenu(QLineEdit *lineEdit, const QPoint &pos) { QMenu menu(this); QAction clearAction("Clear Shortcut", &menu); - connect(&clearAction, &QAction::triggered, lineEdit, [&lineEdit]() { - lineEdit->clear(); + connect(&clearAction, &QAction::triggered, lineEdit, [this, &lineEdit]() { + removeOne(lineEdit->text()); }); menu.addAction(&clearAction); menu.exec(lineEdit->mapToGlobal(pos)); From f044672d2edf82b79f1a6db075a788d062028fa6 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Mon, 9 Nov 2020 05:50:15 -0500 Subject: [PATCH 12/44] Add support for sub-editor shortcut customization --- include/mainwindow.h | 5 ++ include/ui/regionmapeditor.h | 6 +++ include/ui/shortcutseditor.h | 5 +- include/ui/tileseteditor.h | 7 +++ src/mainwindow.cpp | 91 ++++++++++++++++++++++++++---------- src/ui/regionmapeditor.cpp | 28 +++++++++++ src/ui/shortcutseditor.cpp | 24 +++++++--- src/ui/tileseteditor.cpp | 32 ++++++++++++- 8 files changed, 165 insertions(+), 33 deletions(-) diff --git a/include/mainwindow.h b/include/mainwindow.h index 6cb2f37d..59e13ed7 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -310,6 +310,11 @@ private: void closeSupplementaryWindows(); void setWindowDisabled(bool); + void initTilesetEditor(); + bool initRegionMapEditor(); + void initShortcutsEditor(); + void connectSubEditorsToShortcutsEditor(); + bool isProjectOpen(); void showExportMapImageWindow(bool stitchMode); void redrawMetatileSelection(); diff --git a/include/ui/regionmapeditor.h b/include/ui/regionmapeditor.h index 484103f3..cba14251 100644 --- a/include/ui/regionmapeditor.h +++ b/include/ui/regionmapeditor.h @@ -47,6 +47,11 @@ public: void resize(int width, int height); + QObjectList shortcutableObjects() const; + +public slots: + void applyUserShortcuts(); + private: Ui::RegionMapEditor *ui; Project *project; @@ -81,6 +86,7 @@ private: RegionMapPixmapItem *region_map_item = nullptr; CityMapPixmapItem *city_map_item = nullptr; + void initShortcuts(); void displayRegionMap(); void displayRegionMapImage(); void displayRegionMapLayout(); diff --git a/include/ui/shortcutseditor.h b/include/ui/shortcutseditor.h index 85d3fa69..31b0279e 100644 --- a/include/ui/shortcutseditor.h +++ b/include/ui/shortcutseditor.h @@ -23,9 +23,12 @@ class ShortcutsEditor : public QMainWindow Q_OBJECT public: - explicit ShortcutsEditor(const QObjectList &objectList, QWidget *parent = nullptr); + explicit ShortcutsEditor(QWidget *parent = nullptr); + explicit ShortcutsEditor(const QObjectList &shortcutableObjects, QWidget *parent = nullptr); ~ShortcutsEditor(); + void setShortcutableObjects(const QObjectList &shortcutableObjects); + signals: void shortcutsSaved(); diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h index 283f9cde..6cf7350c 100644 --- a/include/ui/tileseteditor.h +++ b/include/ui/tileseteditor.h @@ -42,6 +42,11 @@ public: void updateTilesets(QString primaryTilsetLabel, QString secondaryTilesetLabel); bool selectMetatile(uint16_t metatileId); + QObjectList shortcutableObjects() const; + +public slots: + void applyUserShortcuts(); + private slots: void onHoveredMetatileChanged(uint16_t); void onHoveredMetatileCleared(); @@ -102,6 +107,7 @@ private: void initTileSelector(); void initSelectedTileItem(); void initMetatileLayersItem(); + void initShortcuts(); void restoreWindowState(); void initMetatileHistory(); void setTilesets(QString primaryTilesetLabel, QString secondaryTilesetLabel); @@ -112,6 +118,7 @@ private: void refresh(); void saveMetatileLabel(); void closeEvent(QCloseEvent*); + Ui::TilesetEditor *ui; History metatileHistory; TilesetEditorMetatileSelector *metatileSelector = nullptr; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 5085483b..489365aa 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -129,10 +129,10 @@ void MainWindow::initExtraShortcuts() { QObjectList MainWindow::shortcutableObjects() const { QObjectList shortcutable_objects; for (auto *action : findChildren()) - if (!action->objectName().isEmpty()) + if (ShortcutsConfig::objectNameIsValid(action)) shortcutable_objects.append(qobject_cast(action)); for (auto *shortcut : findChildren()) - if (!shortcut->objectName().isEmpty()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) shortcutable_objects.append(qobject_cast(shortcut)); return shortcutable_objects; @@ -140,10 +140,10 @@ QObjectList MainWindow::shortcutableObjects() const { void MainWindow::applyUserShortcuts() { for (auto *action : findChildren()) - if (!action->objectName().isEmpty()) + if (ShortcutsConfig::objectNameIsValid(action)) action->setShortcuts(shortcutsConfig.userShortcuts(action)); for (auto *shortcut : findChildren()) - if (!shortcut->objectName().isEmpty()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); } @@ -1449,12 +1449,8 @@ void MainWindow::on_actionUse_Poryscript_triggered(bool checked) void MainWindow::on_actionEdit_Shortcuts_triggered() { - if (!shortcutsEditor) { - shortcutsEditor = new ShortcutsEditor(shortcutableObjects(), this); - connect(shortcutsEditor, &QObject::destroyed, [=](QObject *) { shortcutsEditor = nullptr; }); - connect(shortcutsEditor, &ShortcutsEditor::shortcutsSaved, - this, &MainWindow::applyUserShortcuts); - } + if (!shortcutsEditor) + initShortcutsEditor(); if (shortcutsEditor->isHidden()) shortcutsEditor->show(); @@ -1464,6 +1460,35 @@ void MainWindow::on_actionEdit_Shortcuts_triggered() shortcutsEditor->activateWindow(); } +void MainWindow::initShortcutsEditor() { + shortcutsEditor = new ShortcutsEditor(this); + connect(shortcutsEditor, &ShortcutsEditor::shortcutsSaved, + this, &MainWindow::applyUserShortcuts); + connect(shortcutsEditor, &QObject::destroyed, [=](QObject *) { shortcutsEditor = nullptr; }); + + connectSubEditorsToShortcutsEditor(); + + shortcutsEditor->setShortcutableObjects(shortcutableObjects()); +} + +void MainWindow::connectSubEditorsToShortcutsEditor() { + /* Initialize sub-editors so that their children are added to MainWindow's object tree and will + * be returned by shortcutableObjects() to be passed to ShortcutsEditor. */ + if (!tilesetEditor) + initTilesetEditor(); + connect(shortcutsEditor, &ShortcutsEditor::shortcutsSaved, + tilesetEditor, &TilesetEditor::applyUserShortcuts); + + // TODO: Remove this check when the region map editor supports pokefirered. + if (projectConfig.getBaseGameVersion() != BaseGameVersion::pokefirered) { + if (!regionMapEditor) + initRegionMapEditor(); + if (regionMapEditor) + connect(shortcutsEditor, &ShortcutsEditor::shortcutsSaved, + regionMapEditor, &RegionMapEditor::applyUserShortcuts); + } +} + void MainWindow::on_actionPencil_triggered() { on_toolButton_Paint_clicked(); @@ -2551,9 +2576,7 @@ void MainWindow::on_checkBox_ToggleBorder_stateChanged(int selected) void MainWindow::on_actionTileset_Editor_triggered() { if (!this->tilesetEditor) { - this->tilesetEditor = new TilesetEditor(this->editor->project, this->editor->map, this); - connect(this->tilesetEditor, SIGNAL(tilesetsSaved(QString, QString)), this, SLOT(onTilesetsSaved(QString, QString))); - connect(this->tilesetEditor, &QObject::destroyed, [=](QObject *) { this->tilesetEditor = nullptr; }); + initTilesetEditor(); } if (!this->tilesetEditor->isVisible()) { @@ -2566,6 +2589,12 @@ void MainWindow::on_actionTileset_Editor_triggered() this->tilesetEditor->selectMetatile(this->editor->metatile_selector_item->getSelectedMetatiles()->at(0)); } +void MainWindow::initTilesetEditor() { + this->tilesetEditor = new TilesetEditor(this->editor->project, this->editor->map, this); + connect(this->tilesetEditor, SIGNAL(tilesetsSaved(QString, QString)), this, SLOT(onTilesetsSaved(QString, QString))); + connect(this->tilesetEditor, &QObject::destroyed, [=](QObject *) { this->tilesetEditor = nullptr; }); +} + void MainWindow::on_toolButton_ExpandAll_clicked() { if (ui->mapList) { @@ -2680,20 +2709,9 @@ void MainWindow::on_horizontalSlider_MetatileZoom_valueChanged(int value) { void MainWindow::on_actionRegion_Map_Editor_triggered() { if (!this->regionMapEditor) { - this->regionMapEditor = new RegionMapEditor(this, this->editor->project); - bool success = this->regionMapEditor->loadRegionMapData() - && this->regionMapEditor->loadCityMaps(); - if (!success) { - delete this->regionMapEditor; - this->regionMapEditor = nullptr; - QMessageBox msgBox(this); - QString errorMsg = QString("There was an error opening the region map data. Please see %1 for full error details.\n\n%3") - .arg(getLogPath()) - .arg(getMostRecentError()); - msgBox.critical(nullptr, "Error Opening Region Map Editor", errorMsg); + if (!initRegionMapEditor()) { return; } - connect(this->regionMapEditor, &QObject::destroyed, [=](QObject *) { this->regionMapEditor = nullptr; }); } if (!this->regionMapEditor->isVisible()) { @@ -2705,6 +2723,26 @@ void MainWindow::on_actionRegion_Map_Editor_triggered() { } } +bool MainWindow::initRegionMapEditor() { + this->regionMapEditor = new RegionMapEditor(this, this->editor->project); + bool success = this->regionMapEditor->loadRegionMapData() + && this->regionMapEditor->loadCityMaps(); + if (!success) { + delete this->regionMapEditor; + this->regionMapEditor = nullptr; + QMessageBox msgBox(this); + QString errorMsg = QString("There was an error opening the region map data. Please see %1 for full error details.\n\n%3") + .arg(getLogPath()) + .arg(getMostRecentError()); + msgBox.critical(nullptr, "Error Opening Region Map Editor", errorMsg); + + return false; + } + connect(this->regionMapEditor, &QObject::destroyed, [=](QObject *) { this->regionMapEditor = nullptr; }); + + return true; +} + void MainWindow::closeSupplementaryWindows() { if (this->tilesetEditor) delete this->tilesetEditor; @@ -2714,6 +2752,8 @@ void MainWindow::closeSupplementaryWindows() { delete this->mapImageExporter; if (this->newmapprompt) delete this->newmapprompt; + if (this->shortcutsEditor) + delete this->shortcutsEditor; } void MainWindow::closeEvent(QCloseEvent *event) { @@ -2740,6 +2780,7 @@ void MainWindow::closeEvent(QCloseEvent *event) { ); porymapConfig.save(); projectConfig.save(); + shortcutsConfig.save(); QMainWindow::closeEvent(event); } diff --git a/src/ui/regionmapeditor.cpp b/src/ui/regionmapeditor.cpp index ce3440dd..b025b90e 100644 --- a/src/ui/regionmapeditor.cpp +++ b/src/ui/regionmapeditor.cpp @@ -1,6 +1,7 @@ #include "regionmapeditor.h" #include "ui_regionmapeditor.h" #include "imageexport.h" +#include "shortcut.h" #include "config.h" #include "log.h" @@ -92,6 +93,33 @@ bool RegionMapEditor::loadCityMaps() { return true; } +void RegionMapEditor::initShortcuts() { + shortcutsConfig.load(); + shortcutsConfig.setDefaultShortcuts(shortcutableObjects()); + applyUserShortcuts(); +} + +QObjectList RegionMapEditor::shortcutableObjects() const { + QObjectList shortcutable_objects; + for (auto *action : findChildren()) + if (ShortcutsConfig::objectNameIsValid(action)) + shortcutable_objects.append(qobject_cast(action)); + for (auto *shortcut : findChildren()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) + shortcutable_objects.append(qobject_cast(shortcut)); + + return shortcutable_objects; +} + +void RegionMapEditor::applyUserShortcuts() { + for (auto *action : findChildren()) + if (ShortcutsConfig::objectNameIsValid(action)) + action->setShortcuts(shortcutsConfig.userShortcuts(action)); + for (auto *shortcut : findChildren()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) + shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); +} + void RegionMapEditor::displayRegionMap() { displayRegionMapTileSelector(); displayCityMapTileSelector(); diff --git a/src/ui/shortcutseditor.cpp b/src/ui/shortcutseditor.cpp index efafc556..0e0843f0 100644 --- a/src/ui/shortcutseditor.cpp +++ b/src/ui/shortcutseditor.cpp @@ -13,7 +13,7 @@ #include -ShortcutsEditor::ShortcutsEditor(const QObjectList &objectList, QWidget *parent) : +ShortcutsEditor::ShortcutsEditor(QWidget *parent) : QMainWindow(parent), ui(new Ui::ShortcutsEditor), main_container(nullptr) @@ -21,12 +21,16 @@ ShortcutsEditor::ShortcutsEditor(const QObjectList &objectList, QWidget *parent) ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); main_container = ui->scrollAreaWidgetContents_Shortcuts; - main_container->setLayout(new QVBoxLayout(main_container)); + auto *formLayout = new QVBoxLayout(main_container); + formLayout->setSpacing(12); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &ShortcutsEditor::dialogButtonClicked); - - parseObjectList(objectList); - populateMainContainer(); +} + +ShortcutsEditor::ShortcutsEditor(const QObjectList &shortcutableObjects, QWidget *parent) : + ShortcutsEditor(parent) +{ + setShortcutableObjects(shortcutableObjects); } ShortcutsEditor::~ShortcutsEditor() @@ -34,11 +38,19 @@ ShortcutsEditor::~ShortcutsEditor() delete ui; } +void ShortcutsEditor::setShortcutableObjects(const QObjectList &shortcutableObjects) { + parseObjectList(shortcutableObjects); + populateMainContainer(); +} + void ShortcutsEditor::saveShortcuts() { QMultiMap objects_keySequences; - for (auto it = multiKeyEdits_objects.cbegin(); it != multiKeyEdits_objects.cend(); ++it) + for (auto it = multiKeyEdits_objects.cbegin(); it != multiKeyEdits_objects.cend(); ++it) { + if (it.key()->keySequences().isEmpty()) + objects_keySequences.insert(it.value(), QKeySequence()); for (auto keySequence : it.key()->keySequences()) objects_keySequences.insert(it.value(), keySequence); + } shortcutsConfig.setUserShortcuts(objects_keySequences); emit shortcutsSaved(); diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 1c6b620e..5e0b9eed 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -6,6 +6,7 @@ #include "paletteutil.h" #include "imageexport.h" #include "config.h" +#include "shortcut.h" #include #include #include @@ -86,7 +87,6 @@ void TilesetEditor::setTilesets(QString primaryTilesetLabel, QString secondaryTi void TilesetEditor::initUi() { ui->setupUi(this); - ui->actionRedo->setShortcuts({ui->actionRedo->shortcut(), QKeySequence("Ctrl+Shift+Z")}); this->tileXFlip = ui->checkBox_xFlip->isChecked(); this->tileYFlip = ui->checkBox_yFlip->isChecked(); this->paletteId = ui->spinBox_paletteSelector->value(); @@ -102,6 +102,7 @@ void TilesetEditor::initUi() { this->initMetatileLayersItem(); this->initTileSelector(); this->initSelectedTileItem(); + this->initShortcuts(); this->metatileSelector->select(0); this->restoreWindowState(); } @@ -209,6 +210,35 @@ void TilesetEditor::initSelectedTileItem() { this->ui->graphicsView_selectedTile->setFixedSize(this->selectedTilePixmapItem->pixmap().width() + 2, this->selectedTilePixmapItem->pixmap().height() + 2); } +void TilesetEditor::initShortcuts() { + ui->actionRedo->setShortcuts({ui->actionRedo->shortcut(), QKeySequence("Ctrl+Shift+Z")}); + + shortcutsConfig.load(); + shortcutsConfig.setDefaultShortcuts(shortcutableObjects()); + applyUserShortcuts(); +} + +QObjectList TilesetEditor::shortcutableObjects() const { + QObjectList shortcutable_objects; + for (auto *action : findChildren()) + if (ShortcutsConfig::objectNameIsValid(action)) + shortcutable_objects.append(qobject_cast(action)); + for (auto *shortcut : findChildren()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) + shortcutable_objects.append(qobject_cast(shortcut)); + + return shortcutable_objects; +} + +void TilesetEditor::applyUserShortcuts() { + for (auto *action : findChildren()) + if (ShortcutsConfig::objectNameIsValid(action)) + action->setShortcuts(shortcutsConfig.userShortcuts(action)); + for (auto *shortcut : findChildren()) + if (ShortcutsConfig::objectNameIsValid(shortcut)) + shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); +} + void TilesetEditor::restoreWindowState() { logInfo("Restoring tileset editor geometry from previous session."); QMap geometry = porymapConfig.getTilesetEditorGeometry(); From bb6786f24eda12377c0a111a3c8c9d9bdeaa400a Mon Sep 17 00:00:00 2001 From: BigBahss Date: Thu, 12 Nov 2020 23:48:03 -0500 Subject: [PATCH 13/44] Add extra shortcuts to main window and sub-editors --- include/config.h | 5 +---- include/ui/tileseteditor.h | 1 + src/config.cpp | 26 ++++++-------------------- src/mainwindow.cpp | 33 +++++++++++++++++++++++++++------ src/ui/regionmapeditor.cpp | 17 ++++++++++++----- src/ui/shortcutseditor.cpp | 6 +++--- src/ui/tileseteditor.cpp | 25 +++++++++++++++++++------ 7 files changed, 69 insertions(+), 44 deletions(-) diff --git a/include/config.h b/include/config.h index 6d7753ac..4b0db13c 100644 --- a/include/config.h +++ b/include/config.h @@ -207,16 +207,14 @@ public: virtual void reset() override { user_shortcuts.clear(); } + // Call this before applying user shortcuts so that the user can restore defaults. void setDefaultShortcuts(const QObjectList &objects); - void setDefaultShortcuts(const QMultiMap &objects_keySequences); QList defaultShortcuts(const QObject *object) const; void setUserShortcuts(const QObjectList &objects); void setUserShortcuts(const QMultiMap &objects_keySequences); QList userShortcuts(const QObject *object) const; - static bool objectNameIsValid(const QObject *object); - protected: virtual QString getConfigFilepath() override; virtual void parseConfigKeyValue(QString key, QString value) override; @@ -243,7 +241,6 @@ private: const QList &keySequences); }; -// Call setDefaultShortcuts() prior to applying user shortcuts. extern ShortcutsConfig shortcutsConfig; #endif // CONFIG_H diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h index 6cf7350c..1af92f35 100644 --- a/include/ui/tileseteditor.h +++ b/include/ui/tileseteditor.h @@ -108,6 +108,7 @@ private: void initSelectedTileItem(); void initMetatileLayersItem(); void initShortcuts(); + void initExtraShortcuts(); void restoreWindowState(); void initMetatileHistory(); void setTilesets(QString primaryTilesetLabel, QString secondaryTilesetLabel); diff --git a/src/config.cpp b/src/config.cpp index a50f3c3f..ae562334 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -730,11 +730,10 @@ QMap ShortcutsConfig::getKeyValueMap() { QMap map; for (auto cfg_key : user_shortcuts.uniqueKeys()) { auto keySequences = user_shortcuts.values(cfg_key); - QStringList values; + QStringList keySequenceStrings; for (auto keySequence : keySequences) - values.append(keySequence.toString()); - QString value = values.join(' '); - map.insert(cfg_key, value); + keySequenceStrings.append(keySequence.toString()); + map.insert(cfg_key, keySequenceStrings.join(' ')); } return map; } @@ -744,12 +743,6 @@ void ShortcutsConfig::setDefaultShortcuts(const QObjectList &objects) { save(); } -void ShortcutsConfig::setDefaultShortcuts(const QMultiMap &objects_keySequences) { - for (auto *object : objects_keySequences.uniqueKeys()) - storeShortcuts(StoreType::Default, cfgKey(object), objects_keySequences.values(object)); - save(); -} - QList ShortcutsConfig::defaultShortcuts(const QObject *object) const { return default_shortcuts.values(cfgKey(object)); } @@ -761,7 +754,8 @@ void ShortcutsConfig::setUserShortcuts(const QObjectList &objects) { void ShortcutsConfig::setUserShortcuts(const QMultiMap &objects_keySequences) { for (auto *object : objects_keySequences.uniqueKeys()) - storeShortcuts(StoreType::User, cfgKey(object), objects_keySequences.values(object)); + if (!object->objectName().isEmpty() && !object->objectName().startsWith("_q_")) + storeShortcuts(StoreType::User, cfgKey(object), objects_keySequences.values(object)); save(); } @@ -771,7 +765,7 @@ QList ShortcutsConfig::userShortcuts(const QObject *object) const void ShortcutsConfig::storeShortcutsFromList(StoreType storeType, const QObjectList &objects) { for (const auto *object : objects) - if (objectNameIsValid(object)) + if (!object->objectName().isEmpty() && !object->objectName().startsWith("_q_")) storeShortcuts(storeType, cfgKey(object), currentShortcuts(object)); } @@ -802,11 +796,6 @@ void ShortcutsConfig::storeShortcuts( } } -bool ShortcutsConfig::objectNameIsValid(const QObject *object) { - // Qt internal action names start with "_q_" so we filter those out. - return !object->objectName().isEmpty() && !object->objectName().startsWith("_q_"); -} - /* Creates a config key from the object's name prepended with the parent * window's object name, and converts camelCase to snake_case. */ QString ShortcutsConfig::cfgKey(const QObject *object) const { @@ -830,9 +819,6 @@ QList ShortcutsConfig::currentShortcuts(const QObject *object) con if (object->inherits("QAction")) { const auto *action = qobject_cast(object); return action->shortcuts(); - } else if (object->inherits("QAbstractButton")) { - const auto *button = qobject_cast(object); - return { button->shortcut() }; } else if (object->inherits("Shortcut")) { const auto *shortcut = qobject_cast(object); return shortcut->keys(); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 489365aa..dcc90c9c 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -106,6 +106,8 @@ void MainWindow::initShortcuts() { } void MainWindow::initExtraShortcuts() { + ui->actionZoom_In->setShortcuts({ui->actionZoom_In->shortcut(), QKeySequence("Ctrl+=")}); + auto *shortcutReset_Zoom = new Shortcut(QKeySequence("Ctrl+0"), this, SLOT(resetMapViewScale())); shortcutReset_Zoom->setObjectName("shortcutZoom_Reset"); shortcutReset_Zoom->setWhatsThis("Zoom Reset"); @@ -123,27 +125,46 @@ void MainWindow::initExtraShortcuts() { shortcutDelete_Object->setObjectName("shortcutDelete_Object"); shortcutDelete_Object->setWhatsThis("Delete Selected Event(s)"); - ui->actionZoom_In->setShortcuts({ui->actionZoom_In->shortcut(), QKeySequence("Ctrl+=")}); + auto *shortcutToggle_Border = new Shortcut(QKeySequence(), ui->checkBox_ToggleBorder, SLOT(toggle())); + shortcutToggle_Border->setObjectName("shortcutToggle_Border"); + shortcutToggle_Border->setWhatsThis("Toggle Border"); + + auto *shortcutToggle_Smart_Paths = new Shortcut(QKeySequence(), ui->checkBox_smartPaths, SLOT(toggle())); + shortcutToggle_Smart_Paths->setObjectName("shortcutToggle_Smart_Paths"); + shortcutToggle_Smart_Paths->setWhatsThis("Toggle Smart Paths"); + + auto *shortcutExpand_All = new Shortcut(QKeySequence(), this, SLOT(on_toolButton_ExpandAll_clicked())); + shortcutExpand_All->setObjectName("shortcutExpand_All"); + shortcutExpand_All->setWhatsThis("Map List: Expand all folders"); + + auto *shortcutCollapse_All = new Shortcut(QKeySequence(), this, SLOT(on_toolButton_CollapseAll_clicked())); + shortcutCollapse_All->setObjectName("shortcutCollapse_All"); + shortcutCollapse_All->setWhatsThis("Map List: Collapse all folders"); + + auto *shortcutNew_Event = new Shortcut(QKeySequence(), this, SLOT(on_toolButton_Open_Scripts_clicked())); + shortcutNew_Event->setObjectName("shortcut_Open_Scripts"); + shortcutNew_Event->setWhatsThis("Open Map Scripts"); } QObjectList MainWindow::shortcutableObjects() const { QObjectList shortcutable_objects; + for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(shortcut)); - + return shortcutable_objects; } void MainWindow::applyUserShortcuts() { for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) action->setShortcuts(shortcutsConfig.userShortcuts(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); } diff --git a/src/ui/regionmapeditor.cpp b/src/ui/regionmapeditor.cpp index b025b90e..a116aa5a 100644 --- a/src/ui/regionmapeditor.cpp +++ b/src/ui/regionmapeditor.cpp @@ -25,6 +25,7 @@ RegionMapEditor::RegionMapEditor(QWidget *parent, Project *project_) : this->project = project_; this->region_map = new RegionMap; this->ui->action_RegionMap_Resize->setVisible(false); + this->initShortcuts(); this->restoreWindowState(); } @@ -94,6 +95,11 @@ bool RegionMapEditor::loadCityMaps() { } void RegionMapEditor::initShortcuts() { + auto *shortcut_RM_Options_delete = new Shortcut( + {QKeySequence("Del"), QKeySequence("Backspace")}, this, SLOT(on_pushButton_RM_Options_delete_clicked())); + shortcut_RM_Options_delete->setObjectName("shortcut_RM_Options_delete"); + shortcut_RM_Options_delete->setWhatsThis("Map Layout: Delete Square"); + shortcutsConfig.load(); shortcutsConfig.setDefaultShortcuts(shortcutableObjects()); applyUserShortcuts(); @@ -101,22 +107,23 @@ void RegionMapEditor::initShortcuts() { QObjectList RegionMapEditor::shortcutableObjects() const { QObjectList shortcutable_objects; + for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(shortcut)); - + return shortcutable_objects; } void RegionMapEditor::applyUserShortcuts() { for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) action->setShortcuts(shortcutsConfig.userShortcuts(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); } diff --git a/src/ui/shortcutseditor.cpp b/src/ui/shortcutseditor.cpp index 0e0843f0..0f9e77ac 100644 --- a/src/ui/shortcutseditor.cpp +++ b/src/ui/shortcutseditor.cpp @@ -21,8 +21,8 @@ ShortcutsEditor::ShortcutsEditor(QWidget *parent) : ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); main_container = ui->scrollAreaWidgetContents_Shortcuts; - auto *formLayout = new QVBoxLayout(main_container); - formLayout->setSpacing(12); + auto *main_layout = new QVBoxLayout(main_container); + main_layout->setSpacing(12); connect(ui->buttonBox, &QDialogButtonBox::clicked, this, &ShortcutsEditor::dialogButtonClicked); } @@ -69,7 +69,7 @@ void ShortcutsEditor::resetShortcuts() { void ShortcutsEditor::parseObjectList(const QObjectList &objectList) { for (auto *object : objectList) { const auto label = getLabel(object); - if (!label.isEmpty() && ShortcutsConfig::objectNameIsValid(object)) + if (!label.isEmpty() && !object->objectName().isEmpty() && !object->objectName().startsWith("_q_")) labels_objects.insert(label, object); } } diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 5e0b9eed..a63b6680 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -211,31 +211,44 @@ void TilesetEditor::initSelectedTileItem() { } void TilesetEditor::initShortcuts() { - ui->actionRedo->setShortcuts({ui->actionRedo->shortcut(), QKeySequence("Ctrl+Shift+Z")}); + initExtraShortcuts(); shortcutsConfig.load(); shortcutsConfig.setDefaultShortcuts(shortcutableObjects()); applyUserShortcuts(); } +void TilesetEditor::initExtraShortcuts() { + ui->actionRedo->setShortcuts({ui->actionRedo->shortcut(), QKeySequence("Ctrl+Shift+Z")}); + + auto *shortcut_xFlip = new Shortcut(QKeySequence(), ui->checkBox_xFlip, SLOT(toggle())); + shortcut_xFlip->setObjectName("shortcut_xFlip"); + shortcut_xFlip->setWhatsThis("X Flip"); + + auto *shortcut_yFlip = new Shortcut(QKeySequence(), ui->checkBox_yFlip, SLOT(toggle())); + shortcut_yFlip->setObjectName("shortcut_yFlip"); + shortcut_yFlip->setWhatsThis("Y Flip"); +} + QObjectList TilesetEditor::shortcutableObjects() const { QObjectList shortcutable_objects; + for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcutable_objects.append(qobject_cast(shortcut)); - + return shortcutable_objects; } void TilesetEditor::applyUserShortcuts() { for (auto *action : findChildren()) - if (ShortcutsConfig::objectNameIsValid(action)) + if (!action->objectName().isEmpty()) action->setShortcuts(shortcutsConfig.userShortcuts(action)); for (auto *shortcut : findChildren()) - if (ShortcutsConfig::objectNameIsValid(shortcut)) + if (!shortcut->objectName().isEmpty()) shortcut->setKeys(shortcutsConfig.userShortcuts(shortcut)); } From 300a41c149efa7334f151f663e497cf9b21e992e Mon Sep 17 00:00:00 2001 From: BigBahss Date: Fri, 13 Nov 2020 02:52:37 -0500 Subject: [PATCH 14/44] Add clear button to MultiKeyEdit --- include/ui/multikeyedit.h | 2 ++ src/ui/multikeyedit.cpp | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/include/ui/multikeyedit.h b/include/ui/multikeyedit.h index c1736280..27231330 100644 --- a/include/ui/multikeyedit.h +++ b/include/ui/multikeyedit.h @@ -23,6 +23,8 @@ public: bool removeOne(const QKeySequence &keySequence); bool contains(const QKeySequence &keySequence) const; void setContextMenuPolicy(Qt::ContextMenuPolicy policy); + bool isClearButtonEnabled() const; + void setClearButtonEnabled(bool enable); public slots: void clear(); diff --git a/src/ui/multikeyedit.cpp b/src/ui/multikeyedit.cpp index 34ac19c8..09943861 100644 --- a/src/ui/multikeyedit.cpp +++ b/src/ui/multikeyedit.cpp @@ -98,6 +98,15 @@ void MultiKeyEdit::setContextMenuPolicy(Qt::ContextMenuPolicy policy) { lineEdit->setContextMenuPolicy(policy); } +bool MultiKeyEdit::isClearButtonEnabled() const { + return findChild()->isClearButtonEnabled(); +} + +void MultiKeyEdit::setClearButtonEnabled(bool enable) { + for (auto *lineEdit : findChildren()) + lineEdit->setClearButtonEnabled(enable); +} + void MultiKeyEdit::clear() { for (auto *keySequenceEdit : keySequenceEdit_vec) keySequenceEdit->clear(); @@ -126,6 +135,7 @@ void MultiKeyEdit::addNewKeySequenceEdit() { this, &MultiKeyEdit::keySequenceChanged); auto *lineEdit = keySequenceEdit->findChild(); + lineEdit->setClearButtonEnabled(true); lineEdit->installEventFilter(this); connect(lineEdit, &QLineEdit::customContextMenuRequested, this, &MultiKeyEdit::customContextMenuRequested); From b310ccba79d5b476cf25b10486a8b51ef602ec4e Mon Sep 17 00:00:00 2001 From: BigBahss Date: Fri, 13 Nov 2020 09:06:03 -0500 Subject: [PATCH 15/44] Fix map sorting via shortcut --- src/mainwindow.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index dcc90c9c..b6996ced 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -280,7 +280,7 @@ void MainWindow::initMapSortOrder() { mapSortOrderActionGroup->addAction(ui->actionSort_by_Area); mapSortOrderActionGroup->addAction(ui->actionSort_by_Layout); - connect(ui->toolButton_MapSortOrder, &QToolButton::triggered, this, &MainWindow::mapSortOrder_changed); + connect(mapSortOrderActionGroup, &QActionGroup::triggered, this, &MainWindow::mapSortOrder_changed); QAction* sortOrder = ui->toolButton_MapSortOrder->menu()->actions()[mapSortOrder]; ui->toolButton_MapSortOrder->setIcon(sortOrder->icon()); From 0a15dfbf4c964d073ada2f9e1524d465a0b54b1d Mon Sep 17 00:00:00 2001 From: BigBahss Date: Mon, 16 Nov 2020 06:46:21 -0500 Subject: [PATCH 16/44] Add preferred text editor to PorymapConfig --- include/config.h | 3 +++ src/config.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/config.h b/include/config.h index 008eeeb7..a680c55d 100644 --- a/include/config.h +++ b/include/config.h @@ -61,6 +61,7 @@ public: void setMonitorFiles(bool monitor); void setRegionMapDimensions(int width, int height); void setTheme(QString theme); + void setTextEditorCommand(const QString &command); QString getRecentProject(); QString getRecentMap(); MapSortOrder getMapSortOrder(); @@ -76,6 +77,7 @@ public: bool getMonitorFiles(); QSize getRegionMapDimensions(); QString getTheme(); + QString getTextEditorCommand(); protected: virtual QString getConfigFilepath() override; virtual void parseConfigKeyValue(QString key, QString value) override; @@ -107,6 +109,7 @@ private: bool monitorFiles; QSize regionMapDimensions; QString theme; + QString textEditorCommand; }; extern PorymapConfig porymapConfig; diff --git a/src/config.cpp b/src/config.cpp index 3c9fe33d..2a1b16c7 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -187,6 +187,8 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) { } } else if (key == "theme") { this->theme = value; + } else if (key == "text_editor") { + this->textEditorCommand = value; } else { logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key)); } @@ -216,6 +218,7 @@ QMap PorymapConfig::getKeyValueMap() { map.insert("region_map_dimensions", QString("%1x%2").arg(this->regionMapDimensions.width()) .arg(this->regionMapDimensions.height())); map.insert("theme", this->theme); + map.insert("text_editor", this->textEditorCommand); return map; } @@ -316,6 +319,11 @@ void PorymapConfig::setTheme(QString theme) { this->theme = theme; } +void PorymapConfig::setTextEditorCommand(const QString &command) { + this->textEditorCommand = command; + this->save(); +} + QString PorymapConfig::getRecentProject() { return this->recentProject; } @@ -398,6 +406,10 @@ QString PorymapConfig::getTheme() { return this->theme; } +QString PorymapConfig::getTextEditorCommand() { + return this->textEditorCommand; +} + const QMap baseGameVersionMap = { {BaseGameVersion::pokeruby, "pokeruby"}, {BaseGameVersion::pokefirered, "pokefirered"}, From ea9cfa47e55d9c432898a6895b7ddae9341c918f Mon Sep 17 00:00:00 2001 From: BigBahss Date: Mon, 16 Nov 2020 07:39:42 -0500 Subject: [PATCH 17/44] Add basic prefences window with text editor command field --- forms/mainwindow.ui | 7 ++++ forms/preferenceeditor.ui | 75 +++++++++++++++++++++++++++++++++++ include/mainwindow.h | 3 ++ include/ui/preferenceeditor.h | 31 +++++++++++++++ porymap.pro | 5 ++- src/mainwindow.cpp | 15 +++++++ src/ui/preferenceeditor.cpp | 42 ++++++++++++++++++++ 7 files changed, 177 insertions(+), 1 deletion(-) create mode 100644 forms/preferenceeditor.ui create mode 100644 include/ui/preferenceeditor.h create mode 100644 src/ui/preferenceeditor.cpp diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index f1061bdb..fd97121e 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2639,6 +2639,8 @@ + + @@ -2905,6 +2907,11 @@ Export Map Stitch Image... + + + Edit Preferences... + + diff --git a/forms/preferenceeditor.ui b/forms/preferenceeditor.ui new file mode 100644 index 00000000..78b6da04 --- /dev/null +++ b/forms/preferenceeditor.ui @@ -0,0 +1,75 @@ + + + PreferenceEditor + + + + 0 + 0 + 480 + 320 + + + + Preferences + + + + + + + Preferred Text Editor + + + + + + Command + + + + + + + The command (including the necessary parameters) to perform the action. See the command parameter legend below for a list of supported parameter variables, which will be substituted when launching the command. When upper-case letters (e.g. %F, $D, %N) are used, the action will be applicable even if more than one item is selected. Esle the action will only be applicable f exactly one item is selected. + + + e.g. code --goto %F:%L + + + true + + + + + + + <html><head/><body><p>The command that will be executed when clicking the &quot;Open Map Scripts&quot; button. You may optionally include '%F' and '%L' in the command. '%F' will be substituted with the scripts file path and '%L' will be substituted with a line number. If '%L' is specified then the scripts file will be opened to map script cooresponding to the currently selected event (If the script can be found). If '%F' is <span style=" font-weight:600;">not</span> specified then the map scripts file path will be appended to the end of the command.</p></body></html> + + + false + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + + + QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + diff --git a/include/mainwindow.h b/include/mainwindow.h index a9180402..7cc74e6a 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -21,6 +21,7 @@ #include "filterchildrenproxymodel.h" #include "newmappopup.h" #include "newtilesetdialog.h" +#include "preferenceeditor.h" namespace Ui { class MainWindow; @@ -226,6 +227,7 @@ private slots: void on_pushButton_ConfigureEncountersJSON_clicked(); void on_actionRegion_Map_Editor_triggered(); + void on_actionEdit_Preferences_triggered(); private: Ui::MainWindow *ui; @@ -234,6 +236,7 @@ private: MapImageExporter *mapImageExporter = nullptr; FilterChildrenProxyModel *mapListProxyModel; NewMapPopup *newmapprompt = nullptr; + PreferenceEditor *preferenceEditor = nullptr; QStandardItemModel *mapListModel; QList *mapGroupItemsList; QMap mapListIndexes; diff --git a/include/ui/preferenceeditor.h b/include/ui/preferenceeditor.h new file mode 100644 index 00000000..74085b6a --- /dev/null +++ b/include/ui/preferenceeditor.h @@ -0,0 +1,31 @@ +#ifndef PREFERENCES_H +#define PREFERENCES_H + +#include + +class QAbstractButton; + + +namespace Ui { +class PreferenceEditor; +} + +class PreferenceEditor : public QMainWindow +{ + Q_OBJECT + +public: + explicit PreferenceEditor(QWidget *parent = nullptr); + ~PreferenceEditor(); + +private: + Ui::PreferenceEditor *ui; + + void populateFields(); + void saveFields(); + +private slots: + void dialogButtonClicked(QAbstractButton *button); +}; + +#endif // PREFERENCES_H diff --git a/porymap.pro b/porymap.pro index 0da4a14b..806f3b5b 100644 --- a/porymap.pro +++ b/porymap.pro @@ -71,6 +71,7 @@ SOURCES += src/core/block.cpp \ src/ui/newtilesetdialog.cpp \ src/ui/flowlayout.cpp \ src/ui/mapruler.cpp \ + src/ui/preferenceeditor.cpp \ src/config.cpp \ src/editor.cpp \ src/main.cpp \ @@ -140,6 +141,7 @@ HEADERS += include/core/block.h \ include/ui/overlay.h \ include/ui/flowlayout.h \ include/ui/mapruler.h \ + include/ui/preferenceeditor.h \ include/config.h \ include/editor.h \ include/mainwindow.h \ @@ -156,7 +158,8 @@ FORMS += forms/mainwindow.ui \ forms/newmappopup.ui \ forms/aboutporymap.ui \ forms/newtilesetdialog.ui \ - forms/mapimageexporter.ui + forms/mapimageexporter.ui \ + forms/preferenceeditor.ui RESOURCES += \ resources/images.qrc \ diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f239d4d6..31ad9da1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2560,6 +2560,21 @@ void MainWindow::on_actionThemes_triggered() themeSelectorWindow.exec(); } +void MainWindow::on_actionEdit_Preferences_triggered() { + if (!preferenceEditor) { + preferenceEditor = new PreferenceEditor(this); + connect(preferenceEditor, &QObject::destroyed, [=](QObject *) { preferenceEditor = nullptr; }); + } + + if (!preferenceEditor->isVisible()) { + preferenceEditor->show(); + } else if (preferenceEditor->isMinimized()) { + preferenceEditor->showNormal(); + } else { + preferenceEditor->activateWindow(); + } +} + void MainWindow::on_pushButton_AddCustomHeaderField_clicked() { int rowIndex = this->ui->tableWidget_CustomHeaderFields->rowCount(); diff --git a/src/ui/preferenceeditor.cpp b/src/ui/preferenceeditor.cpp new file mode 100644 index 00000000..25476dfe --- /dev/null +++ b/src/ui/preferenceeditor.cpp @@ -0,0 +1,42 @@ +#include "preferenceeditor.h" +#include "ui_preferenceeditor.h" +#include "config.h" + +#include + + +PreferenceEditor::PreferenceEditor(QWidget *parent) : + QMainWindow(parent), + ui(new Ui::PreferenceEditor) +{ + ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + connect(ui->buttonBox, &QDialogButtonBox::clicked, + this, &PreferenceEditor::dialogButtonClicked); + populateFields(); +} + +PreferenceEditor::~PreferenceEditor() +{ + delete ui; +} + +void PreferenceEditor::populateFields() { + ui->lineEdit_TextEditor->setText(porymapConfig.getTextEditorCommand()); +} + +void PreferenceEditor::saveFields() { + porymapConfig.setTextEditorCommand(ui->lineEdit_TextEditor->text()); +} + +void PreferenceEditor::dialogButtonClicked(QAbstractButton *button) { + auto buttonRole = ui->buttonBox->buttonRole(button); + if (buttonRole == QDialogButtonBox::AcceptRole) { + saveFields(); + close(); + } else if (buttonRole == QDialogButtonBox::ApplyRole) { + saveFields(); + } else if (buttonRole == QDialogButtonBox::RejectRole) { + close(); + } +} From 662fb2a367333c8a54c61a80088d4665b3bb39bd Mon Sep 17 00:00:00 2001 From: BigBahss Date: Mon, 16 Nov 2020 09:35:55 -0500 Subject: [PATCH 18/44] Move themes to PreferenceEditor --- forms/mainwindow.ui | 7 ------- forms/preferenceeditor.ui | 15 +++++++++++++- include/editor.h | 4 +++- include/mainwindow.h | 1 - include/ui/preferenceeditor.h | 6 ++++++ src/mainwindow.cpp | 38 ++++------------------------------- src/ui/preferenceeditor.cpp | 28 +++++++++++++++++++++++++- 7 files changed, 54 insertions(+), 45 deletions(-) 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) { From 3478846b6019efff0d8b8d5d4f0d7cbeba91ee3a Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sat, 21 Nov 2020 17:33:16 -0500 Subject: [PATCH 19/44] Add Project::getMapScriptsFilePath() and rename text editor config members --- include/config.h | 6 +++--- include/project.h | 5 +++-- src/config.cpp | 12 ++++++------ src/project.cpp | 14 ++++++++++++-- src/ui/preferenceeditor.cpp | 4 ++-- 5 files changed, 26 insertions(+), 15 deletions(-) diff --git a/include/config.h b/include/config.h index a680c55d..bb740d41 100644 --- a/include/config.h +++ b/include/config.h @@ -61,7 +61,7 @@ public: void setMonitorFiles(bool monitor); void setRegionMapDimensions(int width, int height); void setTheme(QString theme); - void setTextEditorCommand(const QString &command); + void setTextEditorCommandTemplate(const QString &commandTemplate); QString getRecentProject(); QString getRecentMap(); MapSortOrder getMapSortOrder(); @@ -77,7 +77,7 @@ public: bool getMonitorFiles(); QSize getRegionMapDimensions(); QString getTheme(); - QString getTextEditorCommand(); + QString getTextEditorCommandTemplate(); protected: virtual QString getConfigFilepath() override; virtual void parseConfigKeyValue(QString key, QString value) override; @@ -109,7 +109,7 @@ private: bool monitorFiles; QSize regionMapDimensions; QString theme; - QString textEditorCommand; + QString textEditorCommandTemplate; }; extern PorymapConfig porymapConfig; diff --git a/include/project.h b/include/project.h index 179a5a93..2dcaa345 100644 --- a/include/project.h +++ b/include/project.h @@ -172,8 +172,9 @@ public: QString fixPalettePath(QString path); QString fixGraphicPath(QString path); - QString getScriptFileExtension(bool usePoryScript); - QString getScriptDefaultString(bool usePoryScript, QString mapName); + QString getScriptFileExtension(bool usePoryScript) const; + QString getScriptDefaultString(bool usePoryScript, QString mapName) const; + QString getMapScriptsFilePath(const QString &mapName) const; bool loadMapBorder(Map *map); diff --git a/src/config.cpp b/src/config.cpp index 2a1b16c7..24798f7c 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -188,7 +188,7 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) { } else if (key == "theme") { this->theme = value; } else if (key == "text_editor") { - this->textEditorCommand = value; + this->textEditorCommandTemplate = value; } else { logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key)); } @@ -218,7 +218,7 @@ QMap PorymapConfig::getKeyValueMap() { map.insert("region_map_dimensions", QString("%1x%2").arg(this->regionMapDimensions.width()) .arg(this->regionMapDimensions.height())); map.insert("theme", this->theme); - map.insert("text_editor", this->textEditorCommand); + map.insert("text_editor", this->textEditorCommandTemplate); return map; } @@ -319,8 +319,8 @@ void PorymapConfig::setTheme(QString theme) { this->theme = theme; } -void PorymapConfig::setTextEditorCommand(const QString &command) { - this->textEditorCommand = command; +void PorymapConfig::setTextEditorCommandTemplate(const QString &commandTemplate) { + this->textEditorCommandTemplate = commandTemplate; this->save(); } @@ -406,8 +406,8 @@ QString PorymapConfig::getTheme() { return this->theme; } -QString PorymapConfig::getTextEditorCommand() { - return this->textEditorCommand; +QString PorymapConfig::getTextEditorCommandTemplate() { + return this->textEditorCommandTemplate; } const QMap baseGameVersionMap = { diff --git a/src/project.cpp b/src/project.cpp index 270e9346..6cbd7c92 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -2410,7 +2410,7 @@ QString Project::fixGraphicPath(QString path) { return path; } -QString Project::getScriptFileExtension(bool usePoryScript) { +QString Project::getScriptFileExtension(bool usePoryScript) const { if(usePoryScript) { return ".pory"; } else { @@ -2418,13 +2418,23 @@ QString Project::getScriptFileExtension(bool usePoryScript) { } } -QString Project::getScriptDefaultString(bool usePoryScript, QString mapName) { +QString Project::getScriptDefaultString(bool usePoryScript, QString mapName) const { if(usePoryScript) return QString("mapscripts %1_MapScripts {}").arg(mapName); else return QString("%1_MapScripts::\n\t.byte 0\n").arg(mapName); } +QString Project::getMapScriptsFilePath(const QString &mapName) const { + const bool usePoryscript = projectConfig.getUsePoryScript(); + auto path = QDir::cleanPath(root + "/data/maps/" + mapName + "/scripts"); + auto extension = getScriptFileExtension(usePoryscript); + if (usePoryscript && !QFile::exists(path + extension)) + extension = getScriptFileExtension(false); + path += extension; + return path; +} + void Project::loadEventPixmaps(QList objects) { bool needs_update = false; for (Event *object : objects) { diff --git a/src/ui/preferenceeditor.cpp b/src/ui/preferenceeditor.cpp index 42edd313..9a22a250 100644 --- a/src/ui/preferenceeditor.cpp +++ b/src/ui/preferenceeditor.cpp @@ -30,7 +30,7 @@ PreferenceEditor::~PreferenceEditor() } void PreferenceEditor::populateFields() { - ui->lineEdit_TextEditor->setText(porymapConfig.getTextEditorCommand()); + ui->lineEdit_TextEditor->setText(porymapConfig.getTextEditorCommandTemplate()); QStringList themes = { "default" }; QRegularExpression re(":/themes/([A-z0-9_-]+).qss"); @@ -44,7 +44,7 @@ void PreferenceEditor::populateFields() { } void PreferenceEditor::saveFields() { - porymapConfig.setTextEditorCommand(ui->lineEdit_TextEditor->text()); + porymapConfig.setTextEditorCommandTemplate(ui->lineEdit_TextEditor->text()); if (themeSelector->currentText() != porymapConfig.getTheme()) { const auto theme = themeSelector->currentText(); From 4aaae1a264bd427d06fe276b1f0d6891d3e26f25 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 22 Nov 2020 01:04:46 -0500 Subject: [PATCH 20/44] Add support for opening .inc scripts to the selected event script --- include/core/parseutil.h | 8 ++++++-- include/editor.h | 2 ++ include/mainwindow.h | 3 --- src/core/parseutil.cpp | 19 +++++++++++++++++++ src/editor.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/mainwindow.cpp | 16 +--------------- 6 files changed, 67 insertions(+), 20 deletions(-) diff --git a/include/core/parseutil.h b/include/core/parseutil.h index 22abe367..4bc5301e 100644 --- a/include/core/parseutil.h +++ b/include/core/parseutil.h @@ -40,8 +40,8 @@ class ParseUtil public: ParseUtil(); void set_root(QString); - QString readTextFile(QString); - void strip_comment(QString*); + static QString readTextFile(QString); + static void strip_comment(QString*); QList* parseAsm(QString); int evaluateDefine(QString, QMap*); QStringList readCArray(QString text, QString label); @@ -54,6 +54,10 @@ public: bool tryParseJsonFile(QJsonDocument *out, QString filepath); bool ensureFieldsExist(QJsonObject obj, QList fields); + // Returns the 1-indexed line number for the definition of scriptLabel in the scripts file at filePath. + // Returns 0 if a definition for scriptLabel cannot be found. + static int getScriptLineNumber(const QString &scriptLabel, const QString &filePath); + private: QString root; QString text; diff --git a/include/editor.h b/include/editor.h index 748759b6..6e04262e 100644 --- a/include/editor.h +++ b/include/editor.h @@ -154,6 +154,7 @@ public: void scaleMapView(int); public slots: + void openMapScripts() const; void maskNonVisibleConnectionTiles(); private: @@ -183,6 +184,7 @@ private: QString getMovementPermissionText(uint16_t collision, uint16_t elevation); QString getMetatileDisplayMessage(uint16_t metatileId); bool eventLimitReached(Map *, QString); + QString constructTextEditorCommand(QString commandTemplate, const QString &path) const; private slots: void onMapStartPaint(QGraphicsSceneMouseEvent *event, MapPixmapItem *item); diff --git a/include/mainwindow.h b/include/mainwindow.h index 6293c627..92be8c07 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -119,8 +119,6 @@ private slots: void duplicate(); - void openInTextEditor(); - void onLoadMapRequested(QString, QString); void onMapChanged(Map *map); void onMapNeedsRedrawing(); @@ -164,7 +162,6 @@ private slots: void on_actionMap_Shift_triggered(); void on_toolButton_deleteObject_clicked(); - void on_toolButton_Open_Scripts_clicked(); void addNewEvent(QString); void updateSelectedObjects(); diff --git a/src/core/parseutil.cpp b/src/core/parseutil.cpp index 80a4cf6c..431d7ba3 100644 --- a/src/core/parseutil.cpp +++ b/src/core/parseutil.cpp @@ -420,3 +420,22 @@ bool ParseUtil::ensureFieldsExist(QJsonObject obj, QList fields) { } return true; } + +int ParseUtil::getScriptLineNumber(const QString &scriptLabel, const QString &filePath) { + if (filePath.endsWith(".inc")) { + const QString text = readTextFile(filePath); + const QStringList lines = text.split('\n'); + for (int lineNumber = 0; lineNumber < lines.count(); ++lineNumber) { + QString line = lines.at(lineNumber); + strip_comment(&line); + if (line.contains(':')) { + const QString parsedLabel = line.left(line.indexOf(':')).trimmed(); + if (parsedLabel == scriptLabel) + return lineNumber + 1; + } + } + } else if (filePath.endsWith(".pory")) { + + } + return 0; +} diff --git a/src/editor.cpp b/src/editor.cpp index 0b4eb6be7..47de6c1e 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -9,6 +9,7 @@ #include "metatile.h" #include "montabwidget.h" #include "editcommands.h" +#include "config.h" #include #include #include @@ -1999,6 +2000,44 @@ void Editor::deleteEvent(Event *event) { //updateSelectedObjects(); } +void Editor::openMapScripts() const { + const QString path = project->getMapScriptsFilePath(map->name); + const QString commandTemplate = porymapConfig.getTextEditorCommandTemplate(); + if (commandTemplate.isEmpty()) { + // Open map scripts in the system's default editor. + QDesktopServices::openUrl(QUrl::fromLocalFile(path)); + } else { + const QString command = constructTextEditorCommand(commandTemplate, path); +#ifdef Q_OS_WIN + // On Windows, a QProcess command must be wrapped in a cmd.exe command. + const QString program = QProcessEnvironment::systemEnvironment().value("COMSPEC"); + QStringList arguments({ QString("/c"), command }); +#else + QStringList arguments = QProcess::splitCommand(command); + const QString program = arguments.takeFirst(); +#endif + static QProcess proc; + proc.setProgram(program); + proc.setArguments(arguments); + proc.start(); + } +} + +QString Editor::constructTextEditorCommand(QString commandTemplate, const QString &path) const { + if (commandTemplate.contains("%F")) { + if (commandTemplate.contains("%L")) { + const QString scriptLabel = selected_events->isEmpty() ? + QString() : selected_events->first()->event->get("script_label"); + const int lineNum = ParseUtil::getScriptLineNumber(scriptLabel, path); + commandTemplate.replace("%L", QString::number(lineNum)); + } + commandTemplate.replace("%F", path); + } else { + commandTemplate += path; + } + return commandTemplate; +} + // It doesn't seem to be possible to prevent the mousePress event // from triggering both event's DraggablePixmapItem and the background mousePress. // Since the DraggablePixmapItem's event fires first, we can set a temp diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 7f674ed3..cb72165d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -154,6 +154,7 @@ void MainWindow::initEditor() { connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString))); connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged())); connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged())); + connect(ui->toolButton_Open_Scripts, &QToolButton::clicked, this->editor, &Editor::openMapScripts); this->loadUserSettings(); @@ -1293,16 +1294,6 @@ void MainWindow::duplicate() { editor->duplicateSelectedEvents(); } -// Open current map scripts in system default editor for .inc files -void MainWindow::openInTextEditor() { - bool usePoryscript = projectConfig.getUsePoryScript(); - QString path = QDir::cleanPath("file://" + editor->project->root + QDir::separator() + "data/maps/" + editor->map->name + "/scripts"); - - // Try opening scripts file, if opening .pory failed try again with .inc - if (!QDesktopServices::openUrl(QUrl(path + editor->project->getScriptFileExtension(usePoryscript))) && usePoryscript) - QDesktopServices::openUrl(QUrl(path + editor->project->getScriptFileExtension(false))); -} - void MainWindow::on_action_Save_triggered() { editor->save(); updateMapList(); @@ -2093,11 +2084,6 @@ void MainWindow::on_toolButton_deleteObject_clicked() { } } -void MainWindow::on_toolButton_Open_Scripts_clicked() -{ - openInTextEditor(); -} - void MainWindow::on_toolButton_Paint_clicked() { if (ui->mainTabBar->currentIndex() == 0) From bc0127430bdf6b038c2a48284056e1250a8ea04d Mon Sep 17 00:00:00 2001 From: BigBahss Date: Sun, 25 Oct 2020 23:49:00 -0400 Subject: [PATCH 21/44] Fix MapRuler dimensions tooltip and refactor --- docsrc/manual/editing-map-events.rst | 2 +- .../editing-map-events/event-tool-ruler.gif | Bin 236431 -> 210423 bytes include/editor.h | 2 +- include/mainwindow.h | 3 + include/ui/graphicsview.h | 1 + include/ui/mapruler.h | 35 +++--- src/editor.cpp | 15 +-- src/mainwindow.cpp | 31 +++++ src/ui/graphicsview.cpp | 7 ++ src/ui/mapruler.cpp | 111 ++++++++---------- 10 files changed, 110 insertions(+), 97 deletions(-) diff --git a/docsrc/manual/editing-map-events.rst b/docsrc/manual/editing-map-events.rst index 4a7ee536..7837d48d 100644 --- a/docsrc/manual/editing-map-events.rst +++ b/docsrc/manual/editing-map-events.rst @@ -260,7 +260,7 @@ Shift Ruler Tool ---------- -The Ruler Tool provides a convenient way to measure distance on the map. This is particularly useful for scripting object movement. With the Pointer Tool selected you can activate the ruler with a Right-click. With the ruler active you can drag the mouse around to extend the ruler. The ruler can be deactivated with another Right-click, or locked in place with a Left-click (Left-click again to unlock the ruler). The dimensions of the ruler are displayed in a tool-tip and in the status bar in the bottom left corner of the widnow. +The Ruler Tool provides a convenient way to measure distance on the map. This is particularly useful for scripting object movement. With the Pointer Tool selected you can activate the ruler with a Right-click. With the ruler active you can move the mouse around to extend the ruler. The ruler can be deactivated with another Right-click, or locked in place with a Left-click (Left-click again to unlock the ruler). .. figure:: images/editing-map-events/event-tool-ruler.gif :alt: Measuring metatile distance with the Ruler Tool diff --git a/docsrc/manual/images/editing-map-events/event-tool-ruler.gif b/docsrc/manual/images/editing-map-events/event-tool-ruler.gif index fdbbd12f649bd09bc63a29f6bdcb4c492a601aff..707c2037ba9432f3f3ac08d4da2a45c822c3310b 100644 GIT binary patch literal 210423 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 diff --git a/include/editor.h b/include/editor.h index fc8cfe26..c1492b0f 100644 --- a/include/editor.h +++ b/include/editor.h @@ -204,7 +204,6 @@ private slots: void onHoveredMapMovementPermissionCleared(); void onSelectedMetatilesChanged(); void onWheelZoom(int); - void onMapRulerLengthChanged(); signals: void objectsChanged(); @@ -213,6 +212,7 @@ signals: void wildMonDataChanged(); void warpEventDoubleClicked(QString mapName, QString warpNum); void currentMetatilesSelectionChanged(); + void mapRulerStatusChanged(const QString &); }; #endif // EDITOR_H diff --git a/include/mainwindow.h b/include/mainwindow.h index a9180402..d9377993 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -128,6 +128,7 @@ private slots: void openNewMapPopupWindow(int, QVariant); void onNewMapCreated(); void onMapCacheCleared(); + void onMapRulerStatusChanged(const QString &); void on_action_NewMap_triggered(); void on_actionNew_Tileset_triggered(); @@ -207,6 +208,7 @@ private slots: void on_lineEdit_filterBox_textChanged(const QString &arg1); + void moveEvent(QMoveEvent *event); void closeEvent(QCloseEvent *); void eventTabChanged(int index); @@ -229,6 +231,7 @@ private slots: private: Ui::MainWindow *ui; + QLabel *label_MapRulerStatus; TilesetEditor *tilesetEditor = nullptr; RegionMapEditor *regionMapEditor = nullptr; MapImageExporter *mapImageExporter = nullptr; diff --git a/include/ui/graphicsview.h b/include/ui/graphicsview.h index 85fb7a73..960f7dc4 100644 --- a/include/ui/graphicsview.h +++ b/include/ui/graphicsview.h @@ -22,6 +22,7 @@ protected: void mouseMoveEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void drawForeground(QPainter *painter, const QRectF &rect); + void moveEvent(QMoveEvent *event); }; //Q_DECLARE_METATYPE(GraphicsView) diff --git a/include/ui/mapruler.h b/include/ui/mapruler.h index 0ee6e698..650ecd65 100644 --- a/include/ui/mapruler.h +++ b/include/ui/mapruler.h @@ -2,8 +2,7 @@ #define MAPRULER_H #include -#include -#include +#include class MapRuler : public QGraphicsObject, private QLine @@ -14,11 +13,15 @@ public: MapRuler(QColor innerColor = Qt::yellow, QColor borderColor = Qt::black) : innerColor(innerColor), borderColor(borderColor), - mapSize(QSize()) - { - init(); - } - void init(); + mapSize(QSize()), + statusMessage(QString()), + xRuler(QRect()), + yRuler(QRect()), + cornerTick(QLine()), + anchored(false), + locked(false) + { } + QRectF boundingRect() const override; QPainterPath shape() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override; @@ -45,16 +48,18 @@ public: // Ruler height in metatiles int height() const { return qAbs(deltaY()); } - QString statusMessage; - public slots: void mouseEvent(QGraphicsSceneMouseEvent *event); void setMapDimensions(const QSize &size); +signals: + void statusChanged(const QString &statusMessage); + private: QColor innerColor; QColor borderColor; QSize mapSize; + QString statusMessage; QRect xRuler; QRect yRuler; QLineF cornerTick; @@ -63,19 +68,13 @@ private: static int thickness; + void init(); + void setAnchor(const QPointF &scenePos); + void setEndPos(const QPointF &scenePos); QPoint snapToWithinBounds(QPoint pos) const; - void setAnchor(const QPointF &scenePos, const QPoint &screenPos); - void endAnchor(); - void setEndPos(const QPointF &scenePos, const QPoint &screenPos); - void showDimensions(const QPoint &screenPos) const; - void hideDimensions() const; void updateGeometry(); int pixWidth() const { return width() * 16; } int pixHeight() const { return height() * 16; } - -signals: - void lengthChanged(); - void deactivated(const QPoint &endPos); }; #endif // MAPRULER_H diff --git a/src/editor.cpp b/src/editor.cpp index 0b4eb6be7..ce45443c 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -25,8 +25,7 @@ Editor::Editor(Ui::MainWindow* ui) this->playerViewRect = new MovableRect(&this->settings->playerViewRectEnabled, 30 * 8, 20 * 8, qRgb(255, 255, 255)); this->cursorMapTileRect = new CursorTileRect(&this->settings->cursorTileRectEnabled, qRgb(255, 255, 255)); this->map_ruler = new MapRuler(); - connect(this->map_ruler, &MapRuler::lengthChanged, this, &Editor::onMapRulerLengthChanged); - connect(this->map_ruler, &MapRuler::deactivated, this, &Editor::onHoveredMapMetatileChanged); + connect(this->map_ruler, &MapRuler::statusChanged, this, &Editor::mapRulerStatusChanged); /// Instead of updating the selected events after every single undo action /// (eg when the user rolls back several at once), only reselect events when @@ -935,24 +934,12 @@ void Editor::onHoveredMapMetatileChanged(const QPoint &pos) { } } -void Editor::onMapRulerLengthChanged() { - const QPoint pos = map_ruler->endPos(); - ui->statusBar->showMessage(QString("X: %1, Y: %2, Scale = %3x; %4") - .arg(pos.x()) - .arg(pos.y()) - .arg(QString::number(pow(scale_base, scale_exp), 'g', 2)) - .arg(map_ruler->statusMessage)); -} - void Editor::onHoveredMapMetatileCleared() { this->playerViewRect->setVisible(false); this->cursorMapTileRect->setVisible(false); if (map_item->paintingMode == MapPixmapItem::PaintMode::Metatiles || map_item->paintingMode == MapPixmapItem::PaintMode::EventObjects) { this->ui->statusBar->clearMessage(); - if (this->map_ruler->isAnchored()) { - this->ui->statusBar->showMessage(this->map_ruler->statusMessage); - } } } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f239d4d6..f40d94c1 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -41,6 +41,7 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow), + label_MapRulerStatus(nullptr), selectedObject(nullptr), selectedWarp(nullptr), selectedTrigger(nullptr), @@ -66,6 +67,7 @@ MainWindow::MainWindow(QWidget *parent) : MainWindow::~MainWindow() { + delete label_MapRulerStatus; delete ui; } @@ -139,6 +141,17 @@ void MainWindow::initCustomUI() { } delete ui->frame_mapTools->layout(); ui->frame_mapTools->setLayout(flowLayout); + + // Floating QLabel tool-window that displays over the map when the ruler is active + label_MapRulerStatus = new QLabel(ui->graphicsView_Map); + label_MapRulerStatus->setObjectName("label_MapRulerStatus"); + label_MapRulerStatus->setWindowFlags(Qt::Tool | Qt::CustomizeWindowHint | Qt::FramelessWindowHint); + label_MapRulerStatus->setFrameShape(QFrame::Box); + label_MapRulerStatus->setMargin(3); + label_MapRulerStatus->setPalette(palette()); + label_MapRulerStatus->setAlignment(Qt::AlignCenter); + label_MapRulerStatus->setTextFormat(Qt::PlainText); + label_MapRulerStatus->setTextInteractionFlags(Qt::TextSelectableByMouse); } void MainWindow::initExtraSignals() { @@ -154,6 +167,7 @@ void MainWindow::initEditor() { connect(this->editor, SIGNAL(warpEventDoubleClicked(QString,QString)), this, SLOT(openWarpMap(QString,QString))); connect(this->editor, SIGNAL(currentMetatilesSelectionChanged()), this, SLOT(currentMetatilesSelectionChanged())); connect(this->editor, SIGNAL(wildMonDataChanged()), this, SLOT(onWildMonDataChanged())); + connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged); this->loadUserSettings(); @@ -2288,6 +2302,23 @@ void MainWindow::onWildMonDataChanged() { projectHasUnsavedChanges = true; } +void MainWindow::onMapRulerStatusChanged(const QString &status) { + if (status.isEmpty()) { + label_MapRulerStatus->hide(); + } else if (label_MapRulerStatus->parentWidget()) { + label_MapRulerStatus->setText(status); + label_MapRulerStatus->adjustSize(); + label_MapRulerStatus->show(); + label_MapRulerStatus->move(label_MapRulerStatus->parentWidget()->mapToGlobal(QPoint(6, 6))); + } +} + +void MainWindow::moveEvent(QMoveEvent *event) { + QMainWindow::moveEvent(event); + if (label_MapRulerStatus->isVisible() && label_MapRulerStatus->parentWidget()) + label_MapRulerStatus->move(label_MapRulerStatus->parentWidget()->mapToGlobal(QPoint(6, 6))); +} + void MainWindow::on_action_Export_Map_Image_triggered() { showExportMapImageWindow(false); } diff --git a/src/ui/graphicsview.cpp b/src/ui/graphicsview.cpp index f0b73aa3..0e518cf7 100644 --- a/src/ui/graphicsview.cpp +++ b/src/ui/graphicsview.cpp @@ -21,3 +21,10 @@ void GraphicsView::drawForeground(QPainter *painter, const QRectF&) { item->render(painter); } } + +void GraphicsView::moveEvent(QMoveEvent *event) { + QGraphicsView::moveEvent(event); + QLabel *label_MapRulerStatus = findChild("label_MapRulerStatus", Qt::FindDirectChildrenOnly); + if (label_MapRulerStatus && label_MapRulerStatus->isVisible()) + label_MapRulerStatus->move(mapToGlobal(QPoint(6, 6))); +} diff --git a/src/ui/mapruler.cpp b/src/ui/mapruler.cpp index ed404176..1f4bcc36 100644 --- a/src/ui/mapruler.cpp +++ b/src/ui/mapruler.cpp @@ -1,26 +1,13 @@ #include "mapruler.h" #include "metatile.h" -#include #include #include #include -#include int MapRuler::thickness = 3; -void MapRuler::init() { - setVisible(false); - setPoints(QPoint(), QPoint()); - anchored = false; - locked = false; - statusMessage = QString("Ruler: 0"); - xRuler = QRect(); - yRuler = QRect(); - cornerTick = QLine(); -} - QRectF MapRuler::boundingRect() const { return QRectF(-thickness, -thickness, pixWidth() + thickness * 2, pixHeight() + thickness * 2); } @@ -54,8 +41,6 @@ bool MapRuler::eventFilter(QObject*, QEvent *event) { auto mouse_event = static_cast(event); if (mouse_event->button() == Qt::RightButton || anchored) { mouseEvent(mouse_event); - event->accept(); - return true; } } @@ -64,14 +49,14 @@ bool MapRuler::eventFilter(QObject*, QEvent *event) { void MapRuler::mouseEvent(QGraphicsSceneMouseEvent *event) { if (!anchored && event->button() == Qt::RightButton) { - setAnchor(event->scenePos(), event->screenPos()); + setAnchor(event->scenePos()); } else if (anchored) { if (event->button() == Qt::LeftButton) locked = !locked; if (event->button() == Qt::RightButton) - endAnchor(); + init(); else - setEndPos(event->scenePos(), event->screenPos()); + setEndPos(event->scenePos()); } } @@ -83,7 +68,41 @@ void MapRuler::setMapDimensions(const QSize &size) { void MapRuler::setEnabled(bool enabled) { QGraphicsItem::setEnabled(enabled); if (!enabled && anchored) - endAnchor(); + init(); +} + +void MapRuler::init() { + prepareGeometryChange(); + hide(); + setPoints(QPoint(), QPoint()); + statusMessage = QString(); + xRuler = QRect(); + yRuler = QRect(); + cornerTick = QLine(); + anchored = false; + locked = false; + emit statusChanged(statusMessage); +} + +void MapRuler::setAnchor(const QPointF &scenePos) { + QPoint pos = Metatile::coordFromPixmapCoord(scenePos); + pos = snapToWithinBounds(pos); + anchored = true; + locked = false; + setPoints(pos, pos); + updateGeometry(); + show(); +} + +void MapRuler::setEndPos(const QPointF &scenePos) { + if (locked) + return; + QPoint pos = Metatile::coordFromPixmapCoord(scenePos); + pos = snapToWithinBounds(pos); + const QPoint lastEndPos = endPos(); + setP2(pos); + if (pos != lastEndPos) + updateGeometry(); } QPoint MapRuler::snapToWithinBounds(QPoint pos) const { @@ -98,46 +117,6 @@ QPoint MapRuler::snapToWithinBounds(QPoint pos) const { return pos; } -void MapRuler::setAnchor(const QPointF &scenePos, const QPoint &screenPos) { - QPoint pos = Metatile::coordFromPixmapCoord(scenePos); - pos = snapToWithinBounds(pos); - anchored = true; - locked = false; - setPoints(pos, pos); - updateGeometry(); - setVisible(true); - showDimensions(screenPos); -} - -void MapRuler::endAnchor() { - emit deactivated(endPos()); - hideDimensions(); - prepareGeometryChange(); - init(); -} - -void MapRuler::setEndPos(const QPointF &scenePos, const QPoint &screenPos) { - if (locked) - return; - QPoint pos = Metatile::coordFromPixmapCoord(scenePos); - pos = snapToWithinBounds(pos); - const QPoint lastEndPos = endPos(); - setP2(pos); - if (pos != lastEndPos) - updateGeometry(); - showDimensions(screenPos); -} - -void MapRuler::showDimensions(const QPoint &screenPos) const { - // This is a hack to make the tool tip follow the cursor since it won't change position if the text is the same. - QToolTip::showText(screenPos + QPoint(16, -8), statusMessage + ' '); - QToolTip::showText(screenPos + QPoint(16, -8), statusMessage); -} - -void MapRuler::hideDimensions() const { - QToolTip::hideText(); -} - void MapRuler::updateGeometry() { prepareGeometryChange(); setPos(QPoint(left() * 16 + 7, top() * 16 + 7)); @@ -149,7 +128,8 @@ void MapRuler::updateGeometry() { xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness); yRuler = QRect(0, 0, thickness, pixHeight() + thickness); cornerTick = QLineF(yRuler.x() + 0.5, xRuler.y() + thickness - 0.5, yRuler.x() + thickness, xRuler.y()); - statusMessage = QString("Ruler: Left %1, Up %2").arg(width()).arg(height()); + statusMessage = QString("Ruler: Left %1, Up %2\nStart(%3, %4), End(%5, %6)").arg(width()).arg(height()) + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); } else if (deltaX() < 0) { // Bottom-left xRuler = QRect(0, 0, pixWidth() + thickness, thickness); @@ -158,6 +138,8 @@ void MapRuler::updateGeometry() { statusMessage = QString("Ruler: Left %1").arg(width()); if (deltaY()) statusMessage += QString(", Down %1").arg(height()); + statusMessage += QString("\nStart(%1, %2), End(%3, %4)") + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); } else if (deltaY() < 0) { // Top-right xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness); @@ -166,7 +148,8 @@ void MapRuler::updateGeometry() { statusMessage = QString("Ruler: "); if (deltaX()) statusMessage += QString("Right %1, ").arg(width()); - statusMessage += QString("Up %1").arg(height()); + statusMessage += QString("Up %1\nStart(%2, %3), End(%4, %5)").arg(height()) + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); } else { // Bottom-right xRuler = QRect(0, 0, pixWidth() + thickness, thickness); @@ -181,9 +164,11 @@ void MapRuler::updateGeometry() { statusMessage += ", "; statusMessage += QString("Down: %1").arg(height()); } + statusMessage += QString("\nStart(%1, %2), End(%3, %4)") + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); } else { - statusMessage += QString("0"); + statusMessage += QString("0\nStart(%1, %2)").arg(anchor().x()).arg(anchor().y()); } } - emit lengthChanged(); + emit statusChanged(statusMessage); } From 6ca4802948720616fda162b9e8172a5a4e38e241 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Tue, 17 Nov 2020 16:49:34 -0500 Subject: [PATCH 22/44] Use QGraphicsObject's signalling to enable/disable MapRuler --- include/ui/mapruler.h | 13 +------------ src/ui/mapruler.cpp | 27 +++++++++++++++++++-------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/include/ui/mapruler.h b/include/ui/mapruler.h index 650ecd65..c9531703 100644 --- a/include/ui/mapruler.h +++ b/include/ui/mapruler.h @@ -10,24 +10,13 @@ class MapRuler : public QGraphicsObject, private QLine Q_OBJECT public: - MapRuler(QColor innerColor = Qt::yellow, QColor borderColor = Qt::black) : - innerColor(innerColor), - borderColor(borderColor), - mapSize(QSize()), - statusMessage(QString()), - xRuler(QRect()), - yRuler(QRect()), - cornerTick(QLine()), - anchored(false), - locked(false) - { } + MapRuler(QColor innerColor = Qt::yellow, QColor borderColor = Qt::black); QRectF boundingRect() const override; QPainterPath shape() const override; void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override; bool eventFilter(QObject *, QEvent *event) override; - void setEnabled(bool enabled); bool isAnchored() const { return anchored; } bool isLocked() const { return locked; } diff --git a/src/ui/mapruler.cpp b/src/ui/mapruler.cpp index 1f4bcc36..77f6322b 100644 --- a/src/ui/mapruler.cpp +++ b/src/ui/mapruler.cpp @@ -8,6 +8,23 @@ int MapRuler::thickness = 3; +MapRuler::MapRuler(QColor innerColor, QColor borderColor) : + innerColor(innerColor), + borderColor(borderColor), + mapSize(QSize()), + statusMessage(QString()), + xRuler(QRect()), + yRuler(QRect()), + cornerTick(QLine()), + anchored(false), + locked(false) +{ + connect(this, &QGraphicsObject::enabledChanged, [this]() { + if (!isEnabled() && anchored) + init(); + }); +} + QRectF MapRuler::boundingRect() const { return QRectF(-thickness, -thickness, pixWidth() + thickness * 2, pixHeight() + thickness * 2); } @@ -18,9 +35,9 @@ QPainterPath MapRuler::shape() const { ruler.addRect(xRuler); ruler.addRect(yRuler); ruler = ruler.simplified(); - for (int x = 17.5; x < pixWidth(); x += 16) + for (int x = 17; x < pixWidth(); x += 16) ruler.addRect(x, xRuler.y(), 0, thickness); - for (int y = 17.5; y < pixHeight(); y += 16) + for (int y = 17; y < pixHeight(); y += 16) ruler.addRect(yRuler.x(), y, thickness, 0); return ruler; } @@ -65,12 +82,6 @@ void MapRuler::setMapDimensions(const QSize &size) { init(); } -void MapRuler::setEnabled(bool enabled) { - QGraphicsItem::setEnabled(enabled); - if (!enabled && anchored) - init(); -} - void MapRuler::init() { prepareGeometryChange(); hide(); From b9aaef24c6d196f6421022cbabf578dc25df819c Mon Sep 17 00:00:00 2001 From: BigBahss Date: Thu, 19 Nov 2020 00:55:22 -0500 Subject: [PATCH 23/44] MapRuler: Fix artifacting, fix centering for other thickness values --- include/ui/mapruler.h | 19 ++++---- src/editor.cpp | 2 +- src/ui/mapruler.cpp | 111 +++++++++++++++++++++++++----------------- 3 files changed, 77 insertions(+), 55 deletions(-) diff --git a/include/ui/mapruler.h b/include/ui/mapruler.h index c9531703..151492e3 100644 --- a/include/ui/mapruler.h +++ b/include/ui/mapruler.h @@ -10,7 +10,8 @@ class MapRuler : public QGraphicsObject, private QLine Q_OBJECT public: - MapRuler(QColor innerColor = Qt::yellow, QColor borderColor = Qt::black); + // thickness is given in scene pixels + MapRuler(int thickness, QColor innerColor = Qt::yellow, QColor borderColor = Qt::black); QRectF boundingRect() const override; QPainterPath shape() const override; @@ -45,23 +46,23 @@ signals: void statusChanged(const QString &statusMessage); private: - QColor innerColor; - QColor borderColor; + const int thickness; + const qreal half_thickness; + const QColor innerColor; + const QColor borderColor; QSize mapSize; - QString statusMessage; - QRect xRuler; - QRect yRuler; + QRectF xRuler; + QRectF yRuler; QLineF cornerTick; bool anchored; bool locked; - static int thickness; - - void init(); + void reset(); void setAnchor(const QPointF &scenePos); void setEndPos(const QPointF &scenePos); QPoint snapToWithinBounds(QPoint pos) const; void updateGeometry(); + void updateStatus(Qt::Corner corner); int pixWidth() const { return width() * 16; } int pixHeight() const { return height() * 16; } }; diff --git a/src/editor.cpp b/src/editor.cpp index ce45443c..12697eb6 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -24,7 +24,7 @@ Editor::Editor(Ui::MainWindow* ui) this->settings = new Settings(); this->playerViewRect = new MovableRect(&this->settings->playerViewRectEnabled, 30 * 8, 20 * 8, qRgb(255, 255, 255)); this->cursorMapTileRect = new CursorTileRect(&this->settings->cursorTileRectEnabled, qRgb(255, 255, 255)); - this->map_ruler = new MapRuler(); + this->map_ruler = new MapRuler(4); connect(this->map_ruler, &MapRuler::statusChanged, this, &Editor::mapRulerStatusChanged); /// Instead of updating the selected events after every single undo action diff --git a/src/ui/mapruler.cpp b/src/ui/mapruler.cpp index 77f6322b..908e0a46 100644 --- a/src/ui/mapruler.cpp +++ b/src/ui/mapruler.cpp @@ -4,29 +4,31 @@ #include #include #include - -int MapRuler::thickness = 3; +#include -MapRuler::MapRuler(QColor innerColor, QColor borderColor) : +MapRuler::MapRuler(int thickness, QColor innerColor, QColor borderColor) : + /* The logical representation of rectangles are always one less than + * the rendered shape, so we subtract 1 from thickness. */ + thickness(thickness - 1), + half_thickness(qreal(thickness - 1) / 2.0), innerColor(innerColor), borderColor(borderColor), mapSize(QSize()), - statusMessage(QString()), - xRuler(QRect()), - yRuler(QRect()), - cornerTick(QLine()), + xRuler(QRectF()), + yRuler(QRectF()), + cornerTick(QLineF()), anchored(false), locked(false) { connect(this, &QGraphicsObject::enabledChanged, [this]() { if (!isEnabled() && anchored) - init(); + reset(); }); } QRectF MapRuler::boundingRect() const { - return QRectF(-thickness, -thickness, pixWidth() + thickness * 2, pixHeight() + thickness * 2); + return QRectF(-(half_thickness + 1), -(half_thickness + 1), pixWidth() + thickness + 2, pixHeight() + thickness + 2); } QPainterPath MapRuler::shape() const { @@ -35,10 +37,12 @@ QPainterPath MapRuler::shape() const { ruler.addRect(xRuler); ruler.addRect(yRuler); ruler = ruler.simplified(); - for (int x = 17; x < pixWidth(); x += 16) + for (int x = 16; x < pixWidth(); x += 16) ruler.addRect(x, xRuler.y(), 0, thickness); - for (int y = 17; y < pixHeight(); y += 16) + for (int y = 16; y < pixHeight(); y += 16) ruler.addRect(yRuler.x(), y, thickness, 0); + if (deltaX() && deltaY()) + ruler.addPolygon(QVector({ cornerTick.p1(), cornerTick.p2() })); return ruler; } @@ -46,16 +50,14 @@ void MapRuler::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidge painter->setPen(QPen(borderColor)); painter->setBrush(QBrush(innerColor)); painter->drawPath(shape()); - if (deltaX() && deltaY()) - painter->drawLine(cornerTick); } -bool MapRuler::eventFilter(QObject*, QEvent *event) { +bool MapRuler::eventFilter(QObject *, QEvent *event) { if (!isEnabled() || mapSize.isEmpty()) return false; if (event->type() == QEvent::GraphicsSceneMousePress || event->type() == QEvent::GraphicsSceneMouseMove) { - auto mouse_event = static_cast(event); + auto *mouse_event = static_cast(event); if (mouse_event->button() == Qt::RightButton || anchored) { mouseEvent(mouse_event); } @@ -71,7 +73,7 @@ void MapRuler::mouseEvent(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton) locked = !locked; if (event->button() == Qt::RightButton) - init(); + reset(); else setEndPos(event->scenePos()); } @@ -79,20 +81,19 @@ void MapRuler::mouseEvent(QGraphicsSceneMouseEvent *event) { void MapRuler::setMapDimensions(const QSize &size) { mapSize = size; - init(); + reset(); } -void MapRuler::init() { +void MapRuler::reset() { prepareGeometryChange(); hide(); setPoints(QPoint(), QPoint()); - statusMessage = QString(); - xRuler = QRect(); - yRuler = QRect(); - cornerTick = QLine(); + xRuler = QRectF(); + yRuler = QRectF(); + cornerTick = QLineF(); anchored = false; locked = false; - emit statusChanged(statusMessage); + emit statusChanged(QString()); } void MapRuler::setAnchor(const QPointF &scenePos) { @@ -130,42 +131,60 @@ QPoint MapRuler::snapToWithinBounds(QPoint pos) const { void MapRuler::updateGeometry() { prepareGeometryChange(); - setPos(QPoint(left() * 16 + 7, top() * 16 + 7)); + setPos(QPoint(left() * 16 + 8, top() * 16 + 8)); /* Determine what quadrant the end point is in relative to the anchor point. The anchor - * point is the top-left corner of the metatile the ruler starts in, so a zero-length(s) + * point is the top-left corner of the metatile the ruler starts in, so a zero-length * ruler is considered to be in the bottom-right quadrant from the anchor point. */ if (deltaX() < 0 && deltaY() < 0) { // Top-left - xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness); - yRuler = QRect(0, 0, thickness, pixHeight() + thickness); + xRuler = QRectF(-half_thickness, pixHeight() - half_thickness, pixWidth() + thickness, thickness); + yRuler = QRectF(-half_thickness, -half_thickness, thickness, pixHeight() + thickness); cornerTick = QLineF(yRuler.x() + 0.5, xRuler.y() + thickness - 0.5, yRuler.x() + thickness, xRuler.y()); - statusMessage = QString("Ruler: Left %1, Up %2\nStart(%3, %4), End(%5, %6)").arg(width()).arg(height()) - .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); + updateStatus(Qt::TopLeftCorner); } else if (deltaX() < 0) { // Bottom-left - xRuler = QRect(0, 0, pixWidth() + thickness, thickness); - yRuler = QRect(0, 0, thickness, pixHeight() + thickness); + xRuler = QRectF(-half_thickness, -half_thickness, pixWidth() + thickness, thickness); + yRuler = QRectF(-half_thickness, -half_thickness, thickness, pixHeight() + thickness); cornerTick = QLineF(xRuler.x() + 0.5, xRuler.y() + 0.5, xRuler.x() + thickness, xRuler.y() + thickness); + updateStatus(Qt::BottomLeftCorner); + } else if (deltaY() < 0) { + // Top-right + xRuler = QRectF(-half_thickness, pixHeight() - half_thickness, pixWidth() + thickness, thickness); + yRuler = QRectF(pixWidth() - half_thickness, -half_thickness, thickness, pixHeight() + thickness); + cornerTick = QLineF(yRuler.x(), xRuler.y(), yRuler.x() + thickness - 0.5, xRuler.y() + thickness - 0.5); + updateStatus(Qt::TopRightCorner); + } else { + // Bottom-right + xRuler = QRectF(-half_thickness, -half_thickness, pixWidth() + thickness, thickness); + yRuler = QRectF(pixWidth() - half_thickness, -half_thickness, thickness, pixHeight() + thickness); + cornerTick = QLineF(yRuler.x(), yRuler.y() + thickness, yRuler.x() + thickness - 0.5, yRuler.y() + 0.5); + updateStatus(Qt::BottomRightCorner); + } +} + +void MapRuler::updateStatus(Qt::Corner corner) { + QString statusMessage; + switch (corner) + { + case Qt::TopLeftCorner: + statusMessage = QString("Ruler: Left %1, Up %2\nStart(%3, %4), End(%5, %6)").arg(width()).arg(height()) + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); + break; + case Qt::BottomLeftCorner: statusMessage = QString("Ruler: Left %1").arg(width()); if (deltaY()) statusMessage += QString(", Down %1").arg(height()); statusMessage += QString("\nStart(%1, %2), End(%3, %4)") - .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); - } else if (deltaY() < 0) { - // Top-right - xRuler = QRect(0, pixHeight(), pixWidth() + thickness, thickness); - yRuler = QRect(pixWidth(), 0, thickness, pixHeight() + thickness); - cornerTick = QLineF(yRuler.x(), xRuler.y(), yRuler.x() + thickness - 0.5, xRuler.y() + thickness - 0.5); + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); + break; + case Qt::TopRightCorner: statusMessage = QString("Ruler: "); if (deltaX()) statusMessage += QString("Right %1, ").arg(width()); statusMessage += QString("Up %1\nStart(%2, %3), End(%4, %5)").arg(height()) - .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); - } else { - // Bottom-right - xRuler = QRect(0, 0, pixWidth() + thickness, thickness); - yRuler = QRect(pixWidth(), 0, thickness, pixHeight() + thickness); - cornerTick = QLineF(yRuler.x(), yRuler.y() + thickness, yRuler.x() + thickness - 0.5, yRuler.y() + 0.5); + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); + break; + case Qt::BottomRightCorner: statusMessage = QString("Ruler: "); if (deltaX() || deltaY()) { if (deltaX()) @@ -176,10 +195,12 @@ void MapRuler::updateGeometry() { statusMessage += QString("Down: %1").arg(height()); } statusMessage += QString("\nStart(%1, %2), End(%3, %4)") - .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); + .arg(anchor().x()).arg(anchor().y()).arg(endPos().x()).arg(endPos().y()); } else { - statusMessage += QString("0\nStart(%1, %2)").arg(anchor().x()).arg(anchor().y()); + statusMessage += QString("0\nStart(%1, %2)") + .arg(anchor().x()).arg(anchor().y()); } + break; } emit statusChanged(statusMessage); } From 49737d16cc2a26bf6e2c14e87e10b9d9eda74c3a Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Fri, 13 Nov 2020 19:00:09 -0800 Subject: [PATCH 24/44] Implement delete for wild encounter table --- forms/mainwindow.ui | 17 +++++++++++++++++ include/editor.h | 1 + include/mainwindow.h | 1 + src/editor.cpp | 29 +++++++++++++++++++++++++++++ src/mainwindow.cpp | 4 ++++ 5 files changed, 52 insertions(+) diff --git a/forms/mainwindow.ui b/forms/mainwindow.ui index f1061bdb..5d703867 100644 --- a/forms/mainwindow.ui +++ b/forms/mainwindow.ui @@ -2527,6 +2527,23 @@ + + + + <html><head/><body><p>Delete a group of wild pokemon data on this map.</p></body></html> + + + + + + + :/icons/delete.ico:/icons/delete.ico + + + true + + + diff --git a/include/editor.h b/include/editor.h index c1492b0f..bfdbd1bc 100644 --- a/include/editor.h +++ b/include/editor.h @@ -84,6 +84,7 @@ public: void addNewConnection(); void removeCurrentConnection(); void addNewWildMonGroup(QWidget *window); + void deleteWildMonGroup(); void updateDiveMap(QString mapName); void updateEmergeMap(QString mapName); void setSelectedConnectionFromMap(QString mapName); diff --git a/include/mainwindow.h b/include/mainwindow.h index d9377993..b19908b8 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -225,6 +225,7 @@ private slots: void on_tableWidget_CustomHeaderFields_cellChanged(int row, int column); void on_horizontalSlider_MetatileZoom_valueChanged(int value); void on_pushButton_NewWildMonGroup_clicked(); + void on_pushButton_DeleteWildMonGroup_clicked(); void on_pushButton_ConfigureEncountersJSON_clicked(); void on_actionRegion_Map_Editor_triggered(); diff --git a/src/editor.cpp b/src/editor.cpp index 12697eb6..85cc7fd1 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -356,6 +356,35 @@ void Editor::addNewWildMonGroup(QWidget *window) { } } +void Editor::deleteWildMonGroup() { + QComboBox *labelCombo = ui->comboBox_EncounterGroupLabel; + + if (labelCombo->count() < 1) { + return; + } + + QMessageBox msgBox; + msgBox.setText("Confirm Delete"); + msgBox.setInformativeText("Are you sure you want to delete " + labelCombo->currentText() + "?"); + + QPushButton *deleteButton = msgBox.addButton("Delete", QMessageBox::DestructiveRole); + msgBox.addButton(QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + msgBox.exec(); + + if (msgBox.clickedButton() == deleteButton) { + auto it = project->wildMonData.find(map->constantName); + it.value().erase(labelCombo->currentText()); + + int i = project->encounterGroupLabels.indexOf(labelCombo->currentText()); + project->encounterGroupLabels.remove(i); + + displayWildMonTables(); + + emit wildMonDataChanged(); + } +} + void Editor::configureEncounterJSON(QWidget *window) { QVector fieldSlots; diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f40d94c1..d9e7d9a2 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2376,6 +2376,10 @@ void MainWindow::on_pushButton_NewWildMonGroup_clicked() { editor->addNewWildMonGroup(this); } +void MainWindow::on_pushButton_DeleteWildMonGroup_clicked() { + editor->deleteWildMonGroup(); +} + void MainWindow::on_pushButton_ConfigureEncountersJSON_clicked() { editor->configureEncounterJSON(this); } From f50743b3d0c3d9c48a304d3453dd73d6d4ffca32 Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Fri, 13 Nov 2020 19:39:22 -0800 Subject: [PATCH 25/44] Update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c1cea51d..ed0fc4de 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ The **"Breaking Changes"** listed below are changes that have been made in the d - All plain text boxes now have a clear button to delete the text. - The window sizes and positions of the tileset editor, palette editor, and region map editor are now stored in `porymap.cfg`. - Add ruler tool for measuring metatile distance in events tab (Right-click to turn on/off, left-click to lock in place). +- Add delete button to wild pokemon encounters tab. ### Changed - Holding `shift` now toggles "Smart Path" drawing; when the "Smart Paths" checkbox is checked, holding `shift` will temporarily disable it. From 8567d161b5727d89d08db07bdcd47406624db30d Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Mon, 16 Nov 2020 17:51:09 -0800 Subject: [PATCH 26/44] Add defensive checks on index and iterators --- .vscode/settings.json | 5 +++++ src/editor.cpp | 13 +++++++++++-- 2 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..06caa9d9 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "map": "cpp" + } +} \ No newline at end of file diff --git a/src/editor.cpp b/src/editor.cpp index 85cc7fd1..241c1600 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -374,13 +374,22 @@ void Editor::deleteWildMonGroup() { if (msgBox.clickedButton() == deleteButton) { auto it = project->wildMonData.find(map->constantName); - it.value().erase(labelCombo->currentText()); + if (it == project->wildMonData.end()) { + logError(QString("Failed to find data for map %s. Unable to delete").arg(map->constantName)); + return; + } int i = project->encounterGroupLabels.indexOf(labelCombo->currentText()); + if (i < 0) { + logError(QString("Failed to find selected wild mon group: %s. Unable to delete") + .arg(labelCombo->currentText())); + return; + } + + it.value().erase(labelCombo->currentText()); project->encounterGroupLabels.remove(i); displayWildMonTables(); - emit wildMonDataChanged(); } } From eeadef4734ed82d369b6e38c74571d0867615b15 Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Mon, 16 Nov 2020 17:52:07 -0800 Subject: [PATCH 27/44] Remove vscode editor settings --- .vscode/settings.json | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 06caa9d9..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "files.associations": { - "map": "cpp" - } -} \ No newline at end of file From 7ea3dd646876bcd958722ecd86e75a3d0c0e3baf Mon Sep 17 00:00:00 2001 From: Ashley Coleman Date: Sun, 22 Nov 2020 14:30:46 -0800 Subject: [PATCH 28/44] Fix formatting variables --- src/editor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/editor.cpp b/src/editor.cpp index 241c1600..190502ac 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -375,13 +375,13 @@ void Editor::deleteWildMonGroup() { if (msgBox.clickedButton() == deleteButton) { auto it = project->wildMonData.find(map->constantName); if (it == project->wildMonData.end()) { - logError(QString("Failed to find data for map %s. Unable to delete").arg(map->constantName)); + logError(QString("Failed to find data for map %1. Unable to delete").arg(map->constantName)); return; } int i = project->encounterGroupLabels.indexOf(labelCombo->currentText()); if (i < 0) { - logError(QString("Failed to find selected wild mon group: %s. Unable to delete") + logError(QString("Failed to find selected wild mon group: %1. Unable to delete") .arg(labelCombo->currentText())); return; } From a4528fb0d9482fb63392ddefd4b2f860a1754539 Mon Sep 17 00:00:00 2001 From: BigBahss Date: Thu, 26 Nov 2020 06:09:58 -0500 Subject: [PATCH 29/44] Add support for opening .pory scripts to the selected event script --- include/core/parseutil.h | 9 +++-- src/core/parseutil.cpp | 75 ++++++++++++++++++++++++++++++++-------- src/editor.cpp | 14 ++++---- 3 files changed, 74 insertions(+), 24 deletions(-) diff --git a/include/core/parseutil.h b/include/core/parseutil.h index 4bc5301e..b65dbf76 100644 --- a/include/core/parseutil.h +++ b/include/core/parseutil.h @@ -41,7 +41,7 @@ public: ParseUtil(); void set_root(QString); static QString readTextFile(QString); - static void strip_comment(QString*); + void strip_comment(QString*); QList* parseAsm(QString); int evaluateDefine(QString, QMap*); QStringList readCArray(QString text, QString label); @@ -56,7 +56,12 @@ public: // Returns the 1-indexed line number for the definition of scriptLabel in the scripts file at filePath. // Returns 0 if a definition for scriptLabel cannot be found. - static int getScriptLineNumber(const QString &scriptLabel, const QString &filePath); + static int getScriptLineNumber(const QString &filePath, const QString &scriptLabel); + static int getRawScriptLineNumber(QString text, const QString &scriptLabel); + static int getPoryScriptLineNumber(QString text, const QString &scriptLabel); + static QString &removeStringLiterals(QString &text); + static QString &removeLineComments(QString &text, const QString &commentSymbol); + static QString &removeLineComments(QString &text, const QStringList &commentSymbols); private: QString root; diff --git a/src/core/parseutil.cpp b/src/core/parseutil.cpp index 431d7ba3..5dc4f176 100644 --- a/src/core/parseutil.cpp +++ b/src/core/parseutil.cpp @@ -421,21 +421,66 @@ bool ParseUtil::ensureFieldsExist(QJsonObject obj, QList fields) { return true; } -int ParseUtil::getScriptLineNumber(const QString &scriptLabel, const QString &filePath) { - if (filePath.endsWith(".inc")) { - const QString text = readTextFile(filePath); - const QStringList lines = text.split('\n'); - for (int lineNumber = 0; lineNumber < lines.count(); ++lineNumber) { - QString line = lines.at(lineNumber); - strip_comment(&line); - if (line.contains(':')) { - const QString parsedLabel = line.left(line.indexOf(':')).trimmed(); - if (parsedLabel == scriptLabel) - return lineNumber + 1; - } - } - } else if (filePath.endsWith(".pory")) { +int ParseUtil::getScriptLineNumber(const QString &filePath, const QString &scriptLabel) { + if (filePath.endsWith(".inc")) + return getRawScriptLineNumber(readTextFile(filePath), scriptLabel); + else if (filePath.endsWith(".pory")) + return getPoryScriptLineNumber(readTextFile(filePath), scriptLabel); - } return 0; } + +int ParseUtil::getRawScriptLineNumber(QString text, const QString &scriptLabel) { + removeStringLiterals(text); + removeLineComments(text, "@"); + + static const QRegularExpression re_incScriptLabel("(?

6p&tna(y|J`G=1&N}vH(IaNTHD+ag-%>edrH1F1 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