From 81d86c894a908246b83d204eeca68eafa2814b33 Mon Sep 17 00:00:00 2001 From: AdamZ Date: Tue, 8 Sep 2026 23:27:12 -0700 Subject: [PATCH] Keep notes and party edits marked unsaved after exporting --- spec/System/TestImport_spec.lua | 32 ++++++++++++++++++++++++++++++++ src/Classes/NotesTab.lua | 4 ++++ src/Classes/PartyTab.lua | 14 +++++++++----- src/Modules/Build.lua | 4 ++-- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/spec/System/TestImport_spec.lua b/spec/System/TestImport_spec.lua index 185e4a482ef..4dc73ef7b10 100644 --- a/spec/System/TestImport_spec.lua +++ b/spec/System/TestImport_spec.lua @@ -200,4 +200,36 @@ Implicits: 0]]) end assert.truthy(found) end) + + for _, target in ipairs({ { "NOTES", "notesTab", "edit" }, { "PARTY", "partyTab", "editAuras" } }) do + it("keeps " .. target[1] .. " changes unsaved after exporting a build", function() + build:ResetModFlags() + local tab = build[target[2]] + tab.controls[target[3]]:SetText("Unsaved text") + build.viewMode = target[1] + runCallback("OnFrame") + assert.is_true(build.unsaved) + local xml = build:SaveDB("code") + assert.is_truthy(xml:find("Unsaved text", 1, true)) + runCallback("OnFrame") + assert.is_true(build.unsaved) + assert.is_true(tab.modFlag) + + local openFile = io.open + local written + io.open = function() + return { write = function(_, text) written = text; return true end, close = function() return true end } + end + build.dbFileName = "test.xml" + local ok, err = pcall(build.SaveDBFile, build) + io.open = openFile + build.dbFileName = nil + assert.is_true(ok, err) + assert.is_truthy(written:find("Unsaved text", 1, true)) + runCallback("OnFrame") + assert.is_false(build.unsaved) + assert.is_false(tab.modFlag) + end) + end + end) diff --git a/src/Classes/NotesTab.lua b/src/Classes/NotesTab.lua index 8bfc7c7772d..06c9cf53037 100644 --- a/src/Classes/NotesTab.lua +++ b/src/Classes/NotesTab.lua @@ -84,7 +84,11 @@ end function NotesTabClass:Save(xml) self:SetShowColorCodes(false) t_insert(xml, self.controls.edit.buf) +end + +function NotesTabClass:ResetModFlags() self.lastContent = self.controls.edit.buf + self.modFlag = false end function NotesTabClass:Draw(viewPort, inputEvents) diff --git a/src/Classes/PartyTab.lua b/src/Classes/PartyTab.lua index da9af814916..4565fe9ef43 100644 --- a/src/Classes/PartyTab.lua +++ b/src/Classes/PartyTab.lua @@ -651,6 +651,14 @@ function PartyTabClass:Save(xml) t_insert(child, exportString) t_insert(xml, child) end + xml.attrib = { + destination = self.controls.importCodeDestination.list[self.controls.importCodeDestination.selIndex], + append = tostring(self.controls.appendNotReplace.state), + ShowAdvanceTools = tostring(self.controls.ShowAdvanceTools.state) + } +end + +function PartyTabClass:ResetModFlags() self.lastContent.PartyMemberStats = self.controls.editPartyMemberStats.buf self.lastContent.Aura = self.controls.editAuras.buf self.lastContent.Curse = self.controls.editCurses.buf @@ -659,12 +667,8 @@ function PartyTabClass:Save(xml) self.lastContent.EnemyCond = self.controls.enemyCond.buf self.lastContent.EnemyMods = self.controls.enemyMods.buf self.lastContent.EnableExportBuffs = self.enableExportBuffs - xml.attrib = { - destination = self.controls.importCodeDestination.list[self.controls.importCodeDestination.selIndex], - append = tostring(self.controls.appendNotReplace.state), - ShowAdvanceTools = tostring(self.controls.ShowAdvanceTools.state) - } self.lastContent.showAdvancedTools = self.controls.ShowAdvanceTools.state + self.modFlag = false end function PartyTabClass:Draw(viewPort, inputEvents) diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index 3ad9d8eafff..03e9835874d 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -1099,8 +1099,8 @@ end function buildMode:ResetModFlags() self.modFlag = false - self.notesTab.modFlag = false - self.partyTab.modFlag = false + self.notesTab:ResetModFlags() + self.partyTab:ResetModFlags() self.configTab.modFlag = false self.treeTab.modFlag = false self.treeTab.searchFlag = false