From f93d03dbd3c83470c9fd682d7b17aeb7924c3130 Mon Sep 17 00:00:00 2001 From: Zukero Date: Tue, 25 Jul 2017 19:16:35 +0200 Subject: [PATCH] Deleting a TMX Map also removes it from created/altered worldmaps, and marks these as modified. --- .../model/maps/WorldmapSegment.java | 21 +++++++++++++++++++ .../atcontentstudio/ui/WorkspaceActions.java | 8 +++++++ .../atcontentstudio/ui/map/TMXMapEditor.java | 9 ++++++-- .../ui/map/WorldMapEditor.java | 3 ++- .../atcontentstudio/ui/map/WorldMapView.java | 7 +++++++ 5 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java index 94f0776..342b320 100644 --- a/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java +++ b/src/com/gpl/rpg/atcontentstudio/model/maps/WorldmapSegment.java @@ -24,6 +24,7 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.gpl.rpg.atcontentstudio.model.GameDataElement; +import com.gpl.rpg.atcontentstudio.model.ProjectTreeNode; import com.gpl.rpg.atcontentstudio.model.SaveEvent; import com.gpl.rpg.atcontentstudio.model.gamedata.GameDataSet; import com.gpl.rpg.atcontentstudio.ui.DefaultIcons; @@ -104,8 +105,28 @@ public class WorldmapSegment extends GameDataElement { @Override public void elementChanged(GameDataElement oldOne, GameDataElement newOne) { + boolean modified = false; + if (newOne == null && writable) { + //A referenced map may have been deleted. + if (mapLocations.containsKey(oldOne.id)) { + mapLocations.remove(oldOne.id); + modified = true; + } + for (String label : labelledMaps.keySet()) { + if (labelledMaps.get(label).contains(oldOne.id)) { + labelledMaps.get(label).remove(oldOne.id); + modified = true; + } + } + } + oldOne.removeBacklink(this); if(newOne != null) newOne.addBacklink(this); + + if (modified) { + this.state = GameDataElement.State.modified; + childrenChanged(new ArrayList()); + } } @Override diff --git a/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java b/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java index ca648f3..5ed104e 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/WorkspaceActions.java @@ -150,6 +150,10 @@ public class WorkspaceActions { } } else if (element instanceof TMXMap) { ((TMXMap)element).delete(); + GameDataElement newOne = element.getProject().getMap(element.id); + for (GameDataElement backlink : element.getBacklinks()) { + backlink.elementChanged(element, newOne); + } } else if (element instanceof WriterModeData) { WriterModeDataSet parent = (WriterModeDataSet) element.getParent(); parent.writerModeDataList.remove(element); @@ -222,6 +226,10 @@ public class WorkspaceActions { // } } else if (node instanceof TMXMap) { ((TMXMap)node).delete(); + GameDataElement newOne = node.getProject().getMap(node.id); + for (GameDataElement backlink : node.getBacklinks()) { + backlink.elementChanged(node, newOne); + } } else if (node instanceof WriterModeData) { WriterModeDataSet parent = (WriterModeDataSet) node.getParent(); parent.writerModeDataList.remove(node); diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java index fb6040b..b6342e6 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/TMXMapEditor.java @@ -1593,6 +1593,9 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe public void targetUpdated() { this.name = ((TMXMap)target).getDesc(); updateMessage(); + updateXmlViewText(((TMXMap)target).toXml()); + tmxViewer.repaint(); + tmxViewer.revalidate(); } @@ -1682,6 +1685,10 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe ATContentStudio.frame.closeEditor(map); map.childrenRemoved(new ArrayList()); map.delete(); + GameDataElement newOne = map.getProject().getMap(map.id); + for (GameDataElement backlink : map.getBacklinks()) { + backlink.elementChanged(map, newOne); + } } }); savePane.add(delete, JideBoxLayout.FIX); @@ -2005,11 +2012,9 @@ public class TMXMapEditor extends Editor implements TMXMap.MapChangedOnDiskListe if (modified) { if (map.state != GameDataElement.State.modified) { map.state = GameDataElement.State.modified; - TMXMapEditor.this.name = map.getDesc(); map.childrenChanged(new ArrayList()); ATContentStudio.frame.editorChanged(TMXMapEditor.this); } - updateXmlViewText(map.toXml()); } } } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapEditor.java b/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapEditor.java index 82eea11..4a3b91e 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapEditor.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapEditor.java @@ -119,6 +119,8 @@ public class WorldMapEditor extends Editor implements FieldUpdateListener { public void targetUpdated() { this.name = ((GameDataElement)target).getDesc(); updateMessage(); + updateXmlViewText(((WorldmapSegment)target).toXml()); + mapView.updateFromModel(); } public JPanel getXmlEditorPane() { @@ -1016,7 +1018,6 @@ public class WorldMapEditor extends Editor implements FieldUpdateListener { public void notifyModelModified() { target.state = GameDataElement.State.modified; - this.name = ((WorldmapSegment)target).getDesc(); target.childrenChanged(new ArrayList()); } diff --git a/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapView.java b/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapView.java index f9b449b..094fcca 100644 --- a/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapView.java +++ b/src/com/gpl/rpg/atcontentstudio/ui/map/WorldMapView.java @@ -496,6 +496,9 @@ public class WorldMapView extends JComponent implements Scrollable { public void pushToModel() { worldmap.segmentX = offsetX / TILE_SIZE; worldmap.segmentY = offsetY / TILE_SIZE; + for (String id : worldmap.mapLocations.keySet()) { + worldmap.getProject().getMap(id).removeBacklink(worldmap); + } worldmap.mapLocations.clear(); for (String s : mapLocations.keySet()) { int x = mapLocations.get(s).x / TILE_SIZE; @@ -504,6 +507,10 @@ public class WorldMapView extends JComponent implements Scrollable { worldmap.mapLocations.put(s, new Point(x, y)); } + for (String id : worldmap.mapLocations.keySet()) { + worldmap.getProject().getMap(id).addBacklink(worldmap); + } + List toRemove = new ArrayList(); for (String s : worldmap.labels.keySet()) { if (!mapLocations.containsKey(s)) {