From 1d909ffa0c2beb51d453b53b845c4f3a749ca5f0 Mon Sep 17 00:00:00 2001 From: Normand Briere <nbriere@noware.ca> Date: Mon, 10 Jun 2019 20:38:07 -0400 Subject: [PATCH] Undo/redo fully working --- ObjEditor.java | 92 ++++++++++++++++++++++++++++++++-------------- 1 files changed, 64 insertions(+), 28 deletions(-) diff --git a/ObjEditor.java b/ObjEditor.java index 05b548c..b7c343d 100644 --- a/ObjEditor.java +++ b/ObjEditor.java @@ -1935,6 +1935,7 @@ e2.printStackTrace(); } } + LoadJMEThread loadThread; class LoadJMEThread extends Thread @@ -1992,6 +1993,7 @@ //LoadFile0(filename, converter); } } + LoadOBJThread loadObjThread; class LoadOBJThread extends Thread @@ -3212,9 +3214,6 @@ objEditor.refreshContents(); } - Object3D graphs[] = new Object3D[10000]; - int undoindex = 0; - static public Object clone(Object o) { try @@ -3237,16 +3236,31 @@ } } + cRadio GetCurrentTab() + { + cRadio ab; + for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();) + { + ab = (cRadio)e.nextElement(); + if(ab.GetObject() == copy) + { + return ab; + } + } + + return null; + } + public void Save() { - if (true) return; + cRadio tab = GetCurrentTab(); //EditorFrame.m_MainFrame.requestFocusInWindow(); - graphs[undoindex++] = (Object3D)clone(copy); + tab.graphs[tab.undoindex++] = (Object3D)clone(copy); - for (int i = undoindex; i < graphs.length; i++) + for (int i = tab.undoindex; i < tab.graphs.length; i++) { - graphs[i] = null; + tab.graphs[i] = null; } // test save @@ -3254,7 +3268,7 @@ { try { - FileOutputStream ostream = new FileOutputStream("save" + undoindex); + FileOutputStream ostream = new FileOutputStream("save" + tab.undoindex); ObjectOutputStream p = new ObjectOutputStream(ostream); p.writeObject(copy); @@ -3269,48 +3283,70 @@ } } + void CopyChanged(Object3D obj) + { + copy.clear(); + + for (int i=0; i<obj.Size(); i++) + { + copy.add(obj.get(i)); + } + + copy.Touch(); + + ResetModel(); + copy.HardTouch(); // recompile? + + cRadio ab; + for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();) + { + ab = (cRadio)e.nextElement(); + Object3D test = copy.GetObject(ab.object.GetUUID()); + //ab.camera = (Camera)copy.GetObject(ab.camera.GetUUID()); + if (test != null) + { + test.editWindow = ab.object.editWindow; + ab.object = test; + } + } + + refreshContents(); + } + public void Undo() { - if (undoindex == 0) + cRadio tab = GetCurrentTab(); + + if (tab.undoindex == 0) { java.awt.Toolkit.getDefaultToolkit().beep(); return; } - if (graphs[undoindex] == null) + if (tab.graphs[tab.undoindex] == null) { Save(); - undoindex -= 1; + tab.undoindex -= 1; } - undoindex -= 1; + tab.undoindex -= 1; - copy = graphs[undoindex]; - - cameraView.object = copy; - copy.Touch(); - - ResetModel(); - refreshContents(); + CopyChanged(tab.graphs[tab.undoindex]); } public void Redo() { - if (graphs[undoindex + 1] == null) + cRadio tab = GetCurrentTab(); + + if (tab.graphs[tab.undoindex + 1] == null) { java.awt.Toolkit.getDefaultToolkit().beep(); return; } - undoindex += 1; + tab.undoindex += 1; - copy = graphs[undoindex]; - - cameraView.object = copy; - copy.Touch(); - - ResetModel(); - refreshContents(); + CopyChanged(tab.graphs[tab.undoindex]); } void ImportGFD() -- Gitblit v1.6.2