diff --git a/include/config.h b/include/config.h index 79e7e56e..01a7b09c 100644 --- a/include/config.h +++ b/include/config.h @@ -406,8 +406,7 @@ public: reset(); } virtual void reset() override { - this->recentMap = QString(); - this->recentLayout = QString(); + this->recentMapOrLayout = QString(); this->useEncounterJson = true; this->customScripts.clear(); this->readKeys.clear(); @@ -419,8 +418,7 @@ public: QList getCustomScriptsEnabled(); QString projectDir; - QString recentMap; - QString recentLayout; + QString recentMapOrLayout; bool useEncounterJson; protected: diff --git a/include/mainwindow.h b/include/mainwindow.h index 194cc52c..fc277193 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -373,8 +373,6 @@ private: bool tilesetNeedsRedraw = false; - bool setDefaultView(); - bool setRecentView(); bool setLayout(QString layoutId); bool setMap(QString, bool scroll = false); void unsetMap(); @@ -398,12 +396,6 @@ private: QStandardItem* createMapItem(QString mapName, int groupNum, int inGroupNum); bool setInitialMap(); - bool setInitialLayout(); - QString getDefaultMap(); - QString getDefaultLayout(); - - void setRecentMapConfig(QString map_name); - void setRecentLayoutConfig(QString layoutId); void saveGlobalConfigs(); void refreshRecentProjectsMenu(); diff --git a/src/config.cpp b/src/config.cpp index ef543327..0d72542d 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -278,13 +278,7 @@ uint32_t KeyValueConfigBase::getConfigUint32(QString key, QString value, uint32_ return qMin(max, qMax(min, result)); } -const QMap mapSortOrderMap = { - {MapSortOrder::SortByGroup, "group"}, - {MapSortOrder::SortByLayout, "layout"}, - {MapSortOrder::SortByArea, "area"}, -}; - -const QMap mapSortOrderReverseMap = { +const QMap mapSortOrderMap = { {"group", MapSortOrder::SortByGroup}, {"layout", MapSortOrder::SortByLayout}, {"area", MapSortOrder::SortByArea}, @@ -316,8 +310,8 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) { this->prettyCursors = getConfigBool(key, value); } else if (key == "map_sort_order") { QString sortOrder = value.toLower(); - if (mapSortOrderReverseMap.contains(sortOrder)) { - this->mapSortOrder = mapSortOrderReverseMap.value(sortOrder); + if (mapSortOrderMap.contains(sortOrder)) { + this->mapSortOrder = mapSortOrderMap.value(sortOrder); } else { this->mapSortOrder = MapSortOrder::SortByGroup; logWarn(QString("Invalid config value for map_sort_order: '%1'. Must be 'group', 'area', or 'layout'.").arg(value)); @@ -438,7 +432,7 @@ QMap PorymapConfig::getKeyValueMap() { map.insert("project_manually_closed", this->projectManuallyClosed ? "1" : "0"); map.insert("reopen_on_launch", this->reopenOnLaunch ? "1" : "0"); map.insert("pretty_cursors", this->prettyCursors ? "1" : "0"); - map.insert("map_sort_order", mapSortOrderMap.value(this->mapSortOrder)); + map.insert("map_sort_order", mapSortOrderMap.key(this->mapSortOrder)); map.insert("main_window_geometry", stringFromByteArray(this->mainWindowGeometry)); map.insert("main_window_state", stringFromByteArray(this->mainWindowState)); map.insert("map_splitter_state", stringFromByteArray(this->mapSplitterState)); @@ -740,8 +734,8 @@ void ProjectConfig::parseConfigKeyValue(QString key, QString value) { } else if (key == "enable_map_allow_flags") { this->mapAllowFlagsEnabled = getConfigBool(key, value); #ifdef CONFIG_BACKWARDS_COMPATABILITY - } else if (key == "recent_map") { - userConfig.recentMap = value; + } else if (key == "recent_map_or_layout") { + userConfig.recentMapOrLayout = value; } else if (key == "use_encounter_json") { userConfig.useEncounterJson = getConfigBool(key, value); } else if (key == "custom_scripts") { @@ -1035,10 +1029,8 @@ QString UserConfig::getConfigFilepath() { } void UserConfig::parseConfigKeyValue(QString key, QString value) { - if (key == "recent_map") { - this->recentMap = value; - } else if (key == "recent_layout") { - this->recentLayout = value; + if (key == "recent_map_or_layout") { + this->recentMapOrLayout = value; } else if (key == "use_encounter_json") { this->useEncounterJson = getConfigBool(key, value); } else if (key == "custom_scripts") { @@ -1054,8 +1046,7 @@ void UserConfig::setUnreadKeys() { QMap UserConfig::getKeyValueMap() { QMap map; - map.insert("recent_map", this->recentMap); - map.insert("recent_layout", this->recentLayout); + map.insert("recent_map_or_layout", this->recentMapOrLayout); map.insert("use_encounter_json", QString::number(this->useEncounterJson)); map.insert("custom_scripts", this->outputCustomScripts()); return map; diff --git a/src/editor.cpp b/src/editor.cpp index f674e864..68169432 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -1319,7 +1319,7 @@ bool Editor::setLayout(QString layoutId) { return true; } -void Editor::onMapStartPaint(QGraphicsSceneMouseEvent *event, LayoutPixmapItem *item) { +void Editor::onMapStartPaint(QGraphicsSceneMouseEvent *event, LayoutPixmapItem *) { if (!this->getEditingLayout()) { return; } @@ -1332,7 +1332,7 @@ void Editor::onMapStartPaint(QGraphicsSceneMouseEvent *event, LayoutPixmapItem * } } -void Editor::onMapEndPaint(QGraphicsSceneMouseEvent *, LayoutPixmapItem *item) { +void Editor::onMapEndPaint(QGraphicsSceneMouseEvent *, LayoutPixmapItem *) { if (!this->getEditingLayout()) { return; } diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 21d2b348..4d3a72e7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -696,83 +696,29 @@ bool MainWindow::isProjectOpen() { return editor && editor->project; } -bool MainWindow::setDefaultView() { - if (porymapConfig.mapSortOrder == MapSortOrder::SortByLayout) { - return setLayout(getDefaultLayout()); - } else { - return setMap(getDefaultMap(), true); - } -} - -bool MainWindow::setRecentView() { - if (porymapConfig.mapSortOrder == MapSortOrder::SortByLayout) { - return setLayout(userConfig.recentLayout); - } else { - return setMap(userConfig.recentMap, true); - } -} - -QString MainWindow::getDefaultMap() { - if (editor && editor->project) { - QList names = editor->project->groupedMapNames; - if (!names.isEmpty()) { - QString recentMap = userConfig.recentMap; - if (!recentMap.isNull() && recentMap.length() > 0) { - for (int i = 0; i < names.length(); i++) { - if (names.value(i).contains(recentMap)) { - return recentMap; - } - } - } - // Failing that, just get the first map in the list. - for (int i = 0; i < names.length(); i++) { - QStringList list = names.value(i); - if (list.length()) { - return list.value(0); - } - } - } - } - return QString(); -} - bool MainWindow::setInitialMap() { - QStringList names; - if (editor && editor->project) - names = editor->project->mapNames; - - // Try to set most recently-opened map, if it's still in the list. - QString recentMap = userConfig.recentMap; - if (!recentMap.isEmpty() && names.contains(recentMap) && setMap(recentMap, true)) - return true; - - // Failing that, try loading maps in the map list sequentially. - for (auto name : names) { - if (name != recentMap && setMap(name, true)) + const QString recent = userConfig.recentMapOrLayout; + if (editor->project->mapNames.contains(recent)) { + // User recently had a map open that still exists. + if (setMap(recent, true)) + return true; + } else if (editor->project->mapLayoutsTable.contains(recent)) { + // User recently had a layout open that still exists. + if (setLayout(recent)) return true; } - logError("Failed to load any maps."); - return false; -} - -bool MainWindow::setInitialLayout() { - QStringList names; - if (editor && editor->project) - names = editor->project->mapLayoutsTable; - - // Try to set most recently-opened layout, if it's still in the list. - QString recentLayout = userConfig.recentLayout; - if (!recentLayout.isEmpty() && names.contains(recentLayout) && setLayout(recentLayout)) - return true; - - // Failing that, try loading maps in the map list sequentially. - for (auto name : names) { - if (name != recentLayout && setLayout(name)) + // Failed to open recent map/layout, or no recent map/layout. Try opening maps then layouts sequentially. + for (const auto &name : editor->project->mapNames) { + if (name != recent && setMap(name, true)) + return true; + } + for (const auto &id : editor->project->mapLayoutsTable) { + if (id != recent && setLayout(id)) return true; } - logError("Failed to load any layouts."); + logError("Failed to load any maps or layouts."); return false; } @@ -824,25 +770,13 @@ void MainWindow::openSubWindow(QWidget * window) { } } -QString MainWindow::getDefaultLayout() { - if (editor && editor->project) { - QString recentLayout = userConfig.recentLayout; - if (!recentLayout.isEmpty() && editor->project->mapLayoutsTable.contains(recentLayout)) { - return recentLayout; - } else if (!editor->project->mapLayoutsTable.isEmpty()) { - return editor->project->mapLayoutsTable.first(); - } - } - return QString(); -} - QString MainWindow::getExistingDirectory(QString dir) { return FileDialog::getExistingDirectory(this, "Open Directory", dir, QFileDialog::ShowDirsOnly); } void MainWindow::on_action_Open_Project_triggered() { - QString dir = getExistingDirectory(!userConfig.recentMap.isEmpty() ? userConfig.recentMap : "."); + QString dir = getExistingDirectory(!projectConfig.projectDir.isEmpty() ? userConfig.projectDir : "."); if (!dir.isEmpty()) openProject(dir); } @@ -904,11 +838,16 @@ bool MainWindow::userSetMap(QString map_name, bool scrollTreeView) { bool MainWindow::setMap(QString map_name, bool scroll) { // if map name is empty, clear & disable map ui - if (map_name.isEmpty() || map_name == DYNAMIC_MAP_NAME) { + if (map_name.isEmpty()) { unsetMap(); return false; } + if (map_name == DYNAMIC_MAP_NAME) { + logInfo(QString("Cannot set map to '%1'").arg(DYNAMIC_MAP_NAME)); + return false; + } + logInfo(QString("Setting map to '%1'").arg(map_name)); if (!editor || !editor->setMap(map_name)) { @@ -944,7 +883,7 @@ bool MainWindow::setMap(QString map_name, bool scroll) { connect(editor->layout, &Layout::layoutChanged, this, &MainWindow::onLayoutChanged, Qt::UniqueConnection); connect(editor->layout, &Layout::needsRedrawing, this, &MainWindow::onLayoutNeedsRedrawing, Qt::UniqueConnection); - userConfig.recentMap = map_name; + userConfig.recentMapOrLayout = map_name; Scripting::cb_MapOpened(map_name); prefab.updatePrefabUi(editor->layout); @@ -974,7 +913,7 @@ bool MainWindow::setLayout(QString layoutId) { updateTilesetEditor(); - setRecentLayoutConfig(layoutId); + userConfig.recentMapOrLayout = layoutId; return true; } @@ -1050,16 +989,6 @@ void MainWindow::openWarpMap(QString map_name, int event_id, Event::Group event_ } } -void MainWindow::setRecentMapConfig(QString mapName) { - userConfig.recentMap = mapName; - userConfig.recentLayout = ""; -} - -void MainWindow::setRecentLayoutConfig(QString layoutId) { - userConfig.recentLayout = layoutId; - userConfig.recentMap = ""; -} - void MainWindow::displayMapProperties() { // Block signals to the comboboxes while they are being modified const QSignalBlocker blocker1(ui->comboBox_Song);