Deleting a TMX Map also removes it from created/altered worldmaps, and

marks these as modified.
This commit is contained in:
Zukero
2017-07-25 19:16:35 +02:00
parent 7eb5c7c208
commit f93d03dbd3
5 changed files with 45 additions and 3 deletions

View File

@@ -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<ProjectTreeNode>());
}
}
@Override

View File

@@ -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);

View File

@@ -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<ProjectTreeNode>());
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<ProjectTreeNode>());
ATContentStudio.frame.editorChanged(TMXMapEditor.this);
}
updateXmlViewText(map.toXml());
}
}
}

View File

@@ -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<ProjectTreeNode>());
}

View File

@@ -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<String> toRemove = new ArrayList<String>();
for (String s : worldmap.labels.keySet()) {
if (!mapLocations.containsKey(s)) {