From dd021a0e1038bdf41d046928a4e8398fe8960fcc Mon Sep 17 00:00:00 2001 From: Mike Nelson Date: Fri, 1 May 2026 08:52:05 -0500 Subject: [PATCH] make sure we don't set modified during init --- qtfred/src/mission/Editor.cpp | 6 ++---- .../dialogs/AsteroidEditorDialogModel.cpp | 2 +- .../dialogs/BackgroundEditorDialogModel.cpp | 6 ++++++ .../dialogs/BackgroundEditorDialogModel.h | 1 + .../dialogs/BriefingEditorDialogModel.cpp | 1 + .../dialogs/CommandBriefingDialogModel.cpp | 1 + .../mission/dialogs/DebriefingDialogModel.cpp | 1 + .../dialogs/FictionViewerDialogModel.cpp | 3 ++- .../dialogs/JumpNodeEditorDialogModel.cpp | 1 + .../dialogs/MissionCutscenesDialogModel.cpp | 1 + .../dialogs/MissionEventsDialogModel.cpp | 1 + .../dialogs/MissionGoalsDialogModel.cpp | 1 + .../dialogs/MissionSpecDialogModel.cpp | 1 + .../dialogs/ObjectOrientEditorDialogModel.cpp | 1 + .../mission/dialogs/PropEditorDialogModel.cpp | 1 + .../ReinforcementsEditorDialogModel.cpp | 1 + .../dialogs/ShieldSystemDialogModel.cpp | 1 + .../ShipEditor/ShipAltShipClassModel.cpp | 1 + .../ShipEditor/ShipCustomWarpDialogModel.cpp | 1 + .../ShipEditor/ShipEditorDialogModel.cpp | 1 + .../ShipEditor/ShipFlagsDialogModel.cpp | 1 + .../ShipEditor/ShipGoalsDialogModel.cpp | 1 + .../ShipInitialStatusDialogModel.cpp | 1 + .../ShipSpecialStatsDialogModel.cpp | 1 + .../ShipTextureReplacementDialogModel.cpp | 1 + .../ShipEditor/ShipWeaponsDialogModel.cpp | 1 + .../src/mission/dialogs/TableViewerModel.cpp | 1 + .../dialogs/TeamLoadoutDialogModel.cpp | 1 + .../mission/dialogs/VariableDialogModel.cpp | 1 + .../dialogs/VoiceActingManagerModel.cpp | 1 + .../dialogs/VolumetricNebulaDialogModel.cpp | 1 + .../dialogs/WaypointEditorDialogModel.cpp | 1 + .../mission/dialogs/WingEditorDialogModel.cpp | 21 ++++++++++++------- .../mission/dialogs/WingEditorDialogModel.h | 1 + 34 files changed, 53 insertions(+), 14 deletions(-) diff --git a/qtfred/src/mission/Editor.cpp b/qtfred/src/mission/Editor.cpp index a24c5fd8e49..2f148873679 100644 --- a/qtfred/src/mission/Editor.cpp +++ b/qtfred/src/mission/Editor.cpp @@ -522,7 +522,7 @@ void Editor::unmark_all() { numMarked = 0; setupCurrentObjectIndices(-1); - missionChanged(); + updateAllViewports(); } } void Editor::markObject(int obj) { @@ -561,7 +561,7 @@ void Editor::unmarkObject(int obj) { setupCurrentObjectIndices(-1); // can't find one; nothing is marked. } - missionChanged(); + updateAllViewports(); } } @@ -755,8 +755,6 @@ void Editor::selectObject(int objId) { } setupCurrentObjectIndices(objId); // select the new object - - missionChanged(); } void Editor::updateAllViewports() { // This takes all renderers and issues an update request for each of them. For now that is only one but this allows diff --git a/qtfred/src/mission/dialogs/AsteroidEditorDialogModel.cpp b/qtfred/src/mission/dialogs/AsteroidEditorDialogModel.cpp index 4178e8c5412..3cbda7a44e8 100644 --- a/qtfred/src/mission/dialogs/AsteroidEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/AsteroidEditorDialogModel.cpp @@ -95,7 +95,7 @@ void AsteroidEditorDialogModel::initializeData() debrisOptions.emplace_back(std::make_pair(Asteroid_info[i].name, static_cast(i))); } } - + _modified = false; } void AsteroidEditorDialogModel::update_internal_field() diff --git a/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.cpp b/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.cpp index 342f4205c13..74cdcc6e7c1 100644 --- a/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.cpp @@ -15,6 +15,11 @@ extern void parse_one_background(background_t* background); namespace fso::fred::dialogs { BackgroundEditorDialogModel::BackgroundEditorDialogModel(QObject* parent, EditorViewport* viewport) : AbstractDialogModel(parent, viewport) +{ + initializeData(); +} + +void BackgroundEditorDialogModel::initializeData() { auto& bg = getActiveBackground(); auto& bm_list = bg.bitmaps; @@ -26,6 +31,7 @@ BackgroundEditorDialogModel::BackgroundEditorDialogModel(QObject* parent, Editor if (!sun_list.empty()) { _selectedSunIndex = 0; } + _modified = false; } bool BackgroundEditorDialogModel::apply() diff --git a/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.h b/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.h index 24308687863..ce8a7aecd11 100644 --- a/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.h +++ b/qtfred/src/mission/dialogs/BackgroundEditorDialogModel.h @@ -170,6 +170,7 @@ class BackgroundEditorDialogModel : public AbstractDialogModel { void setLightingProfileName(const SCP_string& name); private: + void initializeData(); void refreshBackgroundPreview(); static background_t& getActiveBackground(); starfield_list_entry* getActiveBitmap() const; diff --git a/qtfred/src/mission/dialogs/BriefingEditorDialogModel.cpp b/qtfred/src/mission/dialogs/BriefingEditorDialogModel.cpp index 87e121b7f34..4cb2652dc97 100644 --- a/qtfred/src/mission/dialogs/BriefingEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/BriefingEditorDialogModel.cpp @@ -126,6 +126,7 @@ void BriefingEditorDialogModel::initializeData() _currentTeam = 0; _currentStage = 0; _currentIcon = -1; + _modified = false; } void BriefingEditorDialogModel::stopSpeech() diff --git a/qtfred/src/mission/dialogs/CommandBriefingDialogModel.cpp b/qtfred/src/mission/dialogs/CommandBriefingDialogModel.cpp index 04260e46a52..28144d30f78 100644 --- a/qtfred/src/mission/dialogs/CommandBriefingDialogModel.cpp +++ b/qtfred/src/mission/dialogs/CommandBriefingDialogModel.cpp @@ -39,6 +39,7 @@ void CommandBriefingDialogModel::initializeData() _currentTeam = 0; // default to the first team _currentStage = 0; // default to the first stage + _modified = false; } void CommandBriefingDialogModel::gotoPreviousStage() diff --git a/qtfred/src/mission/dialogs/DebriefingDialogModel.cpp b/qtfred/src/mission/dialogs/DebriefingDialogModel.cpp index 9392961a7d9..0ad1cd89252 100644 --- a/qtfred/src/mission/dialogs/DebriefingDialogModel.cpp +++ b/qtfred/src/mission/dialogs/DebriefingDialogModel.cpp @@ -48,6 +48,7 @@ void DebriefingDialogModel::initializeData() _currentTeam = 0; _currentStage = 0; + _modified = false; } void DebriefingDialogModel::gotoPreviousStage() diff --git a/qtfred/src/mission/dialogs/FictionViewerDialogModel.cpp b/qtfred/src/mission/dialogs/FictionViewerDialogModel.cpp index f02f91c6255..f8fede9b783 100644 --- a/qtfred/src/mission/dialogs/FictionViewerDialogModel.cpp +++ b/qtfred/src/mission/dialogs/FictionViewerDialogModel.cpp @@ -19,7 +19,7 @@ bool FictionViewerDialogModel::apply() { _fictionViewerStages.clear(); Mission_music[SCORE_FICTION_VIEWER] = -1; } else { - // Keep whatever you’ve edited in _fictionViewerStages + // Keep whatever you've edited in _fictionViewerStages Mission_music[SCORE_FICTION_VIEWER] = _fictionMusic; // -1 for none is valid } @@ -52,6 +52,7 @@ void FictionViewerDialogModel::initializeData() { // music is managed through the mission _fictionMusic = Mission_music[SCORE_FICTION_VIEWER]; + _modified = false; } const SCP_vector>& FictionViewerDialogModel::getMusicOptions() diff --git a/qtfred/src/mission/dialogs/JumpNodeEditorDialogModel.cpp b/qtfred/src/mission/dialogs/JumpNodeEditorDialogModel.cpp index f2ba413dab1..926c2f4b74c 100644 --- a/qtfred/src/mission/dialogs/JumpNodeEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/JumpNodeEditorDialogModel.cpp @@ -117,6 +117,7 @@ void JumpNodeEditorDialogModel::initializeData() } Q_EMIT jumpNodeMarkingChanged(); + _modified = false; } void JumpNodeEditorDialogModel::buildNodeList() diff --git a/qtfred/src/mission/dialogs/MissionCutscenesDialogModel.cpp b/qtfred/src/mission/dialogs/MissionCutscenesDialogModel.cpp index 5815292dbaa..220676e57f2 100644 --- a/qtfred/src/mission/dialogs/MissionCutscenesDialogModel.cpp +++ b/qtfred/src/mission/dialogs/MissionCutscenesDialogModel.cpp @@ -57,6 +57,7 @@ void MissionCutscenesDialogModel::initializeData() cur_cutscene = -1; modelChanged(); + _modified = false; } SCP_vector& MissionCutscenesDialogModel::getCutscenes() { diff --git a/qtfred/src/mission/dialogs/MissionEventsDialogModel.cpp b/qtfred/src/mission/dialogs/MissionEventsDialogModel.cpp index 6065c3f0c85..23d7df99028 100644 --- a/qtfred/src/mission/dialogs/MissionEventsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/MissionEventsDialogModel.cpp @@ -115,6 +115,7 @@ void MissionEventsDialogModel::initializeData() initializeTeamList(); initializeEvents(); + _modified = false; } void MissionEventsDialogModel::initializeEvents() diff --git a/qtfred/src/mission/dialogs/MissionGoalsDialogModel.cpp b/qtfred/src/mission/dialogs/MissionGoalsDialogModel.cpp index ed9d5d605c0..293ccb51e8f 100644 --- a/qtfred/src/mission/dialogs/MissionGoalsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/MissionGoalsDialogModel.cpp @@ -85,6 +85,7 @@ void MissionGoalsDialogModel::initializeData() { cur_goal = -1; modelChanged(); + _modified = false; } SCP_vector& MissionGoalsDialogModel::getGoals() { return m_goals; diff --git a/qtfred/src/mission/dialogs/MissionSpecDialogModel.cpp b/qtfred/src/mission/dialogs/MissionSpecDialogModel.cpp index 6031d5dc60d..fa8101a3de4 100644 --- a/qtfred/src/mission/dialogs/MissionSpecDialogModel.cpp +++ b/qtfred/src/mission/dialogs/MissionSpecDialogModel.cpp @@ -91,6 +91,7 @@ void MissionSpecDialogModel::initializeData() { } modelChanged(); + _modified = false; } void MissionSpecDialogModel::prepareSquadLogoList() diff --git a/qtfred/src/mission/dialogs/ObjectOrientEditorDialogModel.cpp b/qtfred/src/mission/dialogs/ObjectOrientEditorDialogModel.cpp index ac4c3658f81..fd9e4a80e97 100644 --- a/qtfred/src/mission/dialogs/ObjectOrientEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ObjectOrientEditorDialogModel.cpp @@ -75,6 +75,7 @@ void ObjectOrientEditorDialogModel::initializeData() } modelChanged(); + _modified = false; } void ObjectOrientEditorDialogModel::updateObject(object* ptr) diff --git a/qtfred/src/mission/dialogs/PropEditorDialogModel.cpp b/qtfred/src/mission/dialogs/PropEditorDialogModel.cpp index 67b22c27738..653cd6d6b1d 100644 --- a/qtfred/src/mission/dialogs/PropEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/PropEditorDialogModel.cpp @@ -106,6 +106,7 @@ void PropEditorDialogModel::initializeData() { } Q_EMIT modelDataChanged(); + _modified = false; } bool PropEditorDialogModel::validateData() { diff --git a/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp b/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp index c51626b1bf9..2fe97baf0c2 100644 --- a/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ReinforcementsEditorDialogModel.cpp @@ -76,6 +76,7 @@ void ReinforcementsDialogModel::initializeData() _selectedReinforcements.clear(); _selectedReinforcementIndices.clear(); + _modified = false; } bool ReinforcementsDialogModel::apply() diff --git a/qtfred/src/mission/dialogs/ShieldSystemDialogModel.cpp b/qtfred/src/mission/dialogs/ShieldSystemDialogModel.cpp index 07bcaebd142..1325fc77e41 100644 --- a/qtfred/src/mission/dialogs/ShieldSystemDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShieldSystemDialogModel.cpp @@ -26,6 +26,7 @@ void ShieldSystemDialogModel::initializeData() { for (const auto& iff : Iff_info) { _teamOptions.emplace_back(iff.iff_name); } + _modified = false; } bool ShieldSystemDialogModel::apply() { diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.cpp index 14d9353ccca..fb2f816bf1a 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipAltShipClassModel.cpp @@ -115,6 +115,7 @@ void ShipAltShipClassModel::initializeData() } objp = GET_NEXT(objp); } + _modified = false; } } // namespace fso::fred::dialogs \ No newline at end of file diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipCustomWarpDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipCustomWarpDialogModel.cpp index 332071971f3..e9305c360fd 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipCustomWarpDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipCustomWarpDialogModel.cpp @@ -247,6 +247,7 @@ void ShipCustomWarpDialogModel::initializeData() _m_player_warpout_speed = params->warpout_player_speed; } } + _modified = false; } void ShipCustomWarpDialogModel::setType(const int index) diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipEditorDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipEditorDialogModel.cpp index ef59720bc83..ee598a313a9 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipEditorDialogModel.cpp @@ -534,6 +534,7 @@ void ShipEditorDialogModel::initializeData() } modelChanged(); + _modified = false; } std::vector> ShipEditorDialogModel::getArrivalPaths() const diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipFlagsDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipFlagsDialogModel.cpp index bab3eef9f0b..2d56cdb4e7c 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipFlagsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipFlagsDialogModel.cpp @@ -361,5 +361,6 @@ void ShipFlagsDialogModel::initializeData() objp = GET_NEXT(objp); } modelChanged(); + _modified = false; } } // namespace fso::fred::dialogs diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipGoalsDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipGoalsDialogModel.cpp index 498c7296224..d9c7b5f1759 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipGoalsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipGoalsDialogModel.cpp @@ -471,6 +471,7 @@ namespace fso { initialize_multi(); } modelChanged(); + _modified = false; } void ShipGoalsDialogModel::initialize(ai_goal* goals) { diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipInitialStatusDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipInitialStatusDialogModel.cpp index 8ff3f235b77..a648527f32a 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipInitialStatusDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipInitialStatusDialogModel.cpp @@ -290,6 +290,7 @@ void ShipInitialStatusDialogModel::initializeData(bool multi) m_velocity = BLANKFIELD; } modelChanged(); + _modified = false; } void ShipInitialStatusDialogModel::update_docking_info() diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipSpecialStatsDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipSpecialStatsDialogModel.cpp index f3f82ad0292..aa1e6a60cc4 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipSpecialStatsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipSpecialStatsDialogModel.cpp @@ -96,6 +96,7 @@ namespace fso { m_special_exp = true; } modelChanged(); + _modified = false; } bool ShipSpecialStatsDialogModel::apply() diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipTextureReplacementDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipTextureReplacementDialogModel.cpp index 4119cf0494d..79f90eefdc7 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipTextureReplacementDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipTextureReplacementDialogModel.cpp @@ -184,6 +184,7 @@ namespace fso { } } modelChanged(); + _modified = false; } void ShipTextureReplacementDialogModel::initSubTypes(polymodel* model, int MapNum) { diff --git a/qtfred/src/mission/dialogs/ShipEditor/ShipWeaponsDialogModel.cpp b/qtfred/src/mission/dialogs/ShipEditor/ShipWeaponsDialogModel.cpp index bbd03657db4..cfaff25571b 100644 --- a/qtfred/src/mission/dialogs/ShipEditor/ShipWeaponsDialogModel.cpp +++ b/qtfred/src/mission/dialogs/ShipEditor/ShipWeaponsDialogModel.cpp @@ -154,6 +154,7 @@ void ShipWeaponsDialogModel::initializeData(bool isMultiEdit) initPrimary(m_ship, true); initSecondary(m_ship, true); } + _modified = false; } void ShipWeaponsDialogModel::initPrimary(int inst, bool first) diff --git a/qtfred/src/mission/dialogs/TableViewerModel.cpp b/qtfred/src/mission/dialogs/TableViewerModel.cpp index c687c9cd742..d82c6a3facd 100644 --- a/qtfred/src/mission/dialogs/TableViewerModel.cpp +++ b/qtfred/src/mission/dialogs/TableViewerModel.cpp @@ -36,6 +36,7 @@ void TableViewerModel::initializeData(const char* table_filename, const char* mo _text = table_viewer::get_complete_table_text(table_filename, modular_pattern, msg.c_str()); } modelChanged(); + _modified = false; } SCP_string TableViewerModel::getText() const diff --git a/qtfred/src/mission/dialogs/TeamLoadoutDialogModel.cpp b/qtfred/src/mission/dialogs/TeamLoadoutDialogModel.cpp index 9776e2d1076..ee6388a4599 100644 --- a/qtfred/src/mission/dialogs/TeamLoadoutDialogModel.cpp +++ b/qtfred/src/mission/dialogs/TeamLoadoutDialogModel.cpp @@ -327,6 +327,7 @@ void TeamLoadoutDialogModel::initializeData() } } } + _modified = false; } void TeamLoadoutDialogModel::recalcShipCapacities(TeamLoadout& team) diff --git a/qtfred/src/mission/dialogs/VariableDialogModel.cpp b/qtfred/src/mission/dialogs/VariableDialogModel.cpp index 5276d98d259..fe04994b987 100644 --- a/qtfred/src/mission/dialogs/VariableDialogModel.cpp +++ b/qtfred/src/mission/dialogs/VariableDialogModel.cpp @@ -167,6 +167,7 @@ void VariableDialogModel::initializeData() } } } + _modified = false; } void VariableDialogModel::sortMap(int containerIndex) diff --git a/qtfred/src/mission/dialogs/VoiceActingManagerModel.cpp b/qtfred/src/mission/dialogs/VoiceActingManagerModel.cpp index 13de8b046c1..73b3432be7c 100644 --- a/qtfred/src/mission/dialogs/VoiceActingManagerModel.cpp +++ b/qtfred/src/mission/dialogs/VoiceActingManagerModel.cpp @@ -100,6 +100,7 @@ void VoiceActingManagerModel::initializeData() _suffix = Suffix::WAV; _includeSenderInFilename = false; _whichPersonaToSync = 0; + _modified = false; } SCP_vector VoiceActingManagerModel::personaChoices() diff --git a/qtfred/src/mission/dialogs/VolumetricNebulaDialogModel.cpp b/qtfred/src/mission/dialogs/VolumetricNebulaDialogModel.cpp index 6e336321380..9ce09c52034 100644 --- a/qtfred/src/mission/dialogs/VolumetricNebulaDialogModel.cpp +++ b/qtfred/src/mission/dialogs/VolumetricNebulaDialogModel.cpp @@ -40,6 +40,7 @@ void VolumetricNebulaDialogModel::initializeData() makeVolumetricsCopy(_volumetrics, volumetric_nebula{}); _volumetrics.enabled = false; } + _modified = false; } bool VolumetricNebulaDialogModel::validate_data() diff --git a/qtfred/src/mission/dialogs/WaypointEditorDialogModel.cpp b/qtfred/src/mission/dialogs/WaypointEditorDialogModel.cpp index 980c536573f..48f4b95c30d 100644 --- a/qtfred/src/mission/dialogs/WaypointEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/WaypointEditorDialogModel.cpp @@ -84,6 +84,7 @@ void WaypointEditorDialogModel::initializeData() } Q_EMIT waypointPathMarkingChanged(); + _modified = false; } void WaypointEditorDialogModel::updateWaypointPathList() diff --git a/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp b/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp index c797d9af0ea..459c9d46134 100644 --- a/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp +++ b/qtfred/src/mission/dialogs/WingEditorDialogModel.cpp @@ -12,13 +12,18 @@ namespace fso::fred::dialogs { WingEditorDialogModel::WingEditorDialogModel(QObject* parent, EditorViewport* viewport) : AbstractDialogModel(parent, viewport) { - reloadFromCurWing(); - prepareSquadLogoList(); - + initializeData(); connect(_editor, &Editor::currentObjectChanged, this, &WingEditorDialogModel::onEditorSelectionChanged); connect(_editor, &Editor::missionChanged, this, &WingEditorDialogModel::onEditorMissionChanged); } +void WingEditorDialogModel::initializeData() +{ + reloadFromCurWing(); + prepareSquadLogoList(); + _modified = false; +} + void WingEditorDialogModel::onEditorSelectionChanged(int) { reloadFromCurWing(); @@ -39,15 +44,15 @@ void WingEditorDialogModel::reloadFromCurWing() _currentWingIndex = w; if (w < 0 || Wings[w].wave_count == 0) { - // No wing selected - modify(_currentWingIndex, -1); - modify(_currentWingName, SCP_string()); + // No wing selected — track view state without dirtying the model + _currentWingIndex = -1; + _currentWingName = SCP_string(); + Q_EMIT wingChanged(); return; } const auto& wing = Wings[w]; - modify(_currentWingIndex, w); - modify(_currentWingName, SCP_string(wing.name)); + _currentWingName = SCP_string(wing.name); Q_EMIT wingChanged(); } diff --git a/qtfred/src/mission/dialogs/WingEditorDialogModel.h b/qtfred/src/mission/dialogs/WingEditorDialogModel.h index 76ba442e3e1..b25195be769 100644 --- a/qtfred/src/mission/dialogs/WingEditorDialogModel.h +++ b/qtfred/src/mission/dialogs/WingEditorDialogModel.h @@ -133,6 +133,7 @@ class WingEditorDialogModel : public AbstractDialogModel { void onEditorMissionChanged(); // missionChanged private: // NOLINT(readability-redundant-access-specifiers) + void initializeData(); void reloadFromCurWing(); wing* getCurrentWing() const; static std::vector> getDockBayPathsForWingMask(uint32_t mask, int anchorShipnum);