From 0b63c438ddb1346986fbe55dcd9e3f805fb1e8fe Mon Sep 17 00:00:00 2001 From: garak Date: Tue, 7 Sep 2021 22:40:07 -0400 Subject: [PATCH] mark unsaved changes to map for heaeder and event edits closes #305 closes #337 closes #347 --- include/core/map.h | 1 + include/editor.h | 1 + src/core/map.cpp | 2 +- src/editor.cpp | 2 ++ src/mainwindow.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++--- src/project.cpp | 1 + 6 files changed, 88 insertions(+), 5 deletions(-) diff --git a/include/core/map.h b/include/core/map.h index 61b6538f..156ca996 100644 --- a/include/core/map.h +++ b/include/core/map.h @@ -53,6 +53,7 @@ public: QMap customHeaders; MapLayout *layout; bool isPersistedToFile = true; + bool hasUnsavedDataChanges = false; bool needsLayoutDir = true; QImage collision_image; QPixmap collision_pixmap; diff --git a/include/editor.h b/include/editor.h index c510e090..0a2489b0 100644 --- a/include/editor.h +++ b/include/editor.h @@ -210,6 +210,7 @@ signals: void warpEventDoubleClicked(QString mapName, QString warpNum); void currentMetatilesSelectionChanged(); void mapRulerStatusChanged(const QString &); + void shouldUpdateWindow(); }; #endif // EDITOR_H diff --git a/src/core/map.cpp b/src/core/map.cpp index ee4ee91b..da3a5c0a 100644 --- a/src/core/map.cpp +++ b/src/core/map.cpp @@ -449,5 +449,5 @@ void Map::addEvent(Event *event) { } bool Map::hasUnsavedChanges() { - return !editHistory.isClean() || !isPersistedToFile; + return !editHistory.isClean() || hasUnsavedDataChanges || !isPersistedToFile; } diff --git a/src/editor.cpp b/src/editor.cpp index 87574adc..d91ad470 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -1930,6 +1930,8 @@ void Editor::updateCustomMapHeaderValues(QTableWidget *table) fields[keyStr] = valueStr; } map->customHeaders = fields; + map->hasUnsavedDataChanges = true; + emit shouldUpdateWindow(); } Tileset* Editor::getCurrentMapPrimaryTileset() diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d0d73935..0328f854 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -256,6 +256,7 @@ void MainWindow::initEditor() { connect(this->editor, &Editor::currentMetatilesSelectionChanged, this, &MainWindow::currentMetatilesSelectionChanged); connect(this->editor, &Editor::wildMonDataChanged, this, &MainWindow::onWildMonDataChanged); connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged); + connect(this->editor, &Editor::shouldUpdateWindow, this, [=]() { showWindowTitle(); }); connect(ui->toolButton_Open_Scripts, &QToolButton::pressed, this->editor, &Editor::openMapScripts); connect(ui->actionOpen_Project_in_Text_Editor, &QAction::triggered, this->editor, &Editor::openProjectInTextEditor); @@ -734,6 +735,20 @@ void MainWindow::setRecentMap(QString mapName) { } void MainWindow::displayMapProperties() { + // Block signals to the comboboxes while they are being modified + const QSignalBlocker blocker1(ui->comboBox_Song); + const QSignalBlocker blocker2(ui->comboBox_Location); + const QSignalBlocker blocker3(ui->comboBox_PrimaryTileset); + const QSignalBlocker blocker4(ui->comboBox_SecondaryTileset); + const QSignalBlocker blocker5(ui->comboBox_Weather); + const QSignalBlocker blocker6(ui->comboBox_BattleScene); + const QSignalBlocker blocker7(ui->comboBox_Type); + const QSignalBlocker blocker8(ui->checkBox_Visibility); + const QSignalBlocker blocker9(ui->checkBox_ShowLocation); + const QSignalBlocker blockerA(ui->checkBox_AllowRunning); + const QSignalBlocker blockerB(ui->checkBox_AllowBiking); + const QSignalBlocker blockerC(ui->spinBox_FloorNumber); + ui->checkBox_Visibility->setChecked(false); ui->checkBox_ShowLocation->setChecked(false); ui->checkBox_AllowRunning->setChecked(false); @@ -782,6 +797,8 @@ void MainWindow::on_comboBox_Song_currentTextChanged(const QString &song) { if (editor && editor->map) { editor->map->song = song; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -789,6 +806,8 @@ void MainWindow::on_comboBox_Location_currentTextChanged(const QString &location { if (editor && editor->map) { editor->map->location = location; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -796,6 +815,8 @@ void MainWindow::on_comboBox_Weather_currentTextChanged(const QString &weather) { if (editor && editor->map) { editor->map->weather = weather; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -803,6 +824,8 @@ void MainWindow::on_comboBox_Type_currentTextChanged(const QString &type) { if (editor && editor->map) { editor->map->type = type; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -810,6 +833,8 @@ void MainWindow::on_comboBox_BattleScene_currentTextChanged(const QString &battl { if (editor && editor->map) { editor->map->battle_scene = battle_scene; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -821,6 +846,8 @@ void MainWindow::on_checkBox_Visibility_clicked(bool checked) } else { editor->map->requiresFlash = "FALSE"; } + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -832,6 +859,8 @@ void MainWindow::on_checkBox_ShowLocation_clicked(bool checked) } else { editor->map->show_location = "FALSE"; } + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -843,6 +872,8 @@ void MainWindow::on_checkBox_AllowRunning_clicked(bool checked) } else { editor->map->allowRunning = "0"; } + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -854,6 +885,8 @@ void MainWindow::on_checkBox_AllowBiking_clicked(bool checked) } else { editor->map->allowBiking = "0"; } + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -865,6 +898,8 @@ void MainWindow::on_checkBox_AllowEscapeRope_clicked(bool checked) } else { editor->map->allowEscapeRope = "0"; } + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -872,6 +907,8 @@ void MainWindow::on_spinBox_FloorNumber_valueChanged(int offset) { if (editor && editor->map) { editor->map->floorNumber = offset; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -1975,6 +2012,10 @@ void MainWindow::updateSelectedObjects() { frame->ui->comboBox_sprite->addItems(event_obj_gfx_constants.keys()); frame->ui->comboBox_sprite->setCurrentIndex(frame->ui->comboBox_sprite->findText(item->event->get("sprite"))); connect(frame->ui->comboBox_sprite, &QComboBox::currentTextChanged, item, &DraggablePixmapItem::set_sprite); + connect(frame->ui->comboBox_sprite, &QComboBox::currentTextChanged, this, [=]() { + this->editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + }); /* frame->ui->script->setVisible(true); @@ -2184,6 +2225,11 @@ void MainWindow::updateSelectedObjects() { connect(spin, QOverload::of(&NoScrollSpinBox::valueChanged), [item, key](int value) { item->event->put(key, value); }); + + connect(spin, QOverload::of(&NoScrollSpinBox::valueChanged), this, [=]() { + this->editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + }); // Keys using check boxes } else if (checkKeys.contains(key)) { check->setChecked(value.toInt()); @@ -2203,6 +2249,11 @@ void MainWindow::updateSelectedObjects() { break; } }); + + connect(check, &QCheckBox::stateChanged, this, [=]() { + this->editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + }); // Keys using combo boxes } else { combo->setCurrentText(value); @@ -2231,6 +2282,11 @@ void MainWindow::updateSelectedObjects() { frame->layout()->addWidget(widget); item->bind(combo, key); + + connect(combo, &QComboBox::currentTextChanged, this, [=]() { + this->editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + }); } } frames.append(frame); @@ -2654,7 +2710,8 @@ void MainWindow::onTilesetsSaved(QString primaryTilesetLabel, QString secondaryT } void MainWindow::onWildMonDataChanged() { - projectHasUnsavedChanges = true; + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } void MainWindow::onMapRulerStatusChanged(const QString &status) { @@ -2707,27 +2764,38 @@ void MainWindow::showExportMapImageWindow(ImageExporterMode mode) { void MainWindow::on_comboBox_ConnectionDirection_currentTextChanged(const QString &direction) { editor->updateCurrentConnectionDirection(direction); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } void MainWindow::on_spinBox_ConnectionOffset_valueChanged(int offset) { editor->updateConnectionOffset(offset); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } void MainWindow::on_comboBox_ConnectedMap_currentTextChanged(const QString &mapName) { - if (editor->project->mapNames.contains(mapName)) + if (editor->project->mapNames.contains(mapName)) { editor->setConnectionMap(mapName); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + } } void MainWindow::on_pushButton_AddConnection_clicked() { editor->addNewConnection(); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } void MainWindow::on_pushButton_RemoveConnection_clicked() { editor->removeCurrentConnection(); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } void MainWindow::on_pushButton_NewWildMonGroup_clicked() { @@ -2744,14 +2812,20 @@ void MainWindow::on_pushButton_ConfigureEncountersJSON_clicked() { void MainWindow::on_comboBox_DiveMap_currentTextChanged(const QString &mapName) { - if (editor->project->mapNames.contains(mapName)) + if (editor->project->mapNames.contains(mapName)) { editor->updateDiveMap(mapName); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + } } void MainWindow::on_comboBox_EmergeMap_currentTextChanged(const QString &mapName) { - if (editor->project->mapNames.contains(mapName)) + if (editor->project->mapNames.contains(mapName)) { editor->updateEmergeMap(mapName); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); + } } void MainWindow::on_comboBox_PrimaryTileset_currentTextChanged(const QString &tilesetLabel) @@ -2761,6 +2835,8 @@ void MainWindow::on_comboBox_PrimaryTileset_currentTextChanged(const QString &ti redrawMapScene(); on_horizontalSlider_MetatileZoom_valueChanged(ui->horizontalSlider_MetatileZoom->value()); updateTilesetEditor(); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } @@ -2771,6 +2847,8 @@ void MainWindow::on_comboBox_SecondaryTileset_currentTextChanged(const QString & redrawMapScene(); on_horizontalSlider_MetatileZoom_valueChanged(ui->horizontalSlider_MetatileZoom->value()); updateTilesetEditor(); + editor->map->hasUnsavedDataChanges = true; + showWindowTitle(); } } diff --git a/src/project.cpp b/src/project.cpp index 7051dcd0..315a9d74 100644 --- a/src/project.cpp +++ b/src/project.cpp @@ -1420,6 +1420,7 @@ void Project::saveMap(Map *map) { updateMapLayout(map); map->isPersistedToFile = true; + map->hasUnsavedDataChanges = false; map->editHistory.setClean(); }