From 8558ae86e65457c512a26339d3660d79eee16ae6 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 09 Jun 2019 16:33:38 -0400
Subject: [PATCH] Multi-tab undo.
---
ObjEditor.java | 92 +++++++++++++++++++++---------
CameraPane.java | 2
cRadio.java | 3 +
GroupEditor.java | 10 +--
Object3D.java | 41 +++++++++++++
5 files changed, 113 insertions(+), 35 deletions(-)
diff --git a/CameraPane.java b/CameraPane.java
index 9794f67..0cda80d 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -11552,7 +11552,7 @@
return;
}
- String string = obj.GetToolTip();
+ String string = obj.toString(); //.GetToolTip();
GL gl = GetGL();
diff --git a/GroupEditor.java b/GroupEditor.java
index 5d4b4bf..3fdc5c4 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -3041,7 +3041,7 @@
child.CloseUI();
listUI.remove(child);
- child.editWindow = null; // ???????????
+ //child.editWindow = null; // ???????????
}
objEditor.ctrlPanel.FlushUI();
//objEditor.jTree.clearSelection();
@@ -4310,15 +4310,13 @@
objEditor.SetText(); // jan 2014
- Object3D object = (Object3D) tps[0].getLastPathComponent();
-
- if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(object instanceof Camera))
+ if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(tps[0].getLastPathComponent() instanceof Camera))
CameraPane.flash = true;
- if (tps != null && tps.length > 0 && object instanceof Camera)
+ if (tps != null && tps.length > 0 && tps[0].getLastPathComponent() instanceof Camera)
// a camera
{
- if (object != Globals.theRenderer.LightCamera())
+ if (tps[0].getLastPathComponent() != Globals.theRenderer.LightCamera())
{
CameraPane.camerachangeframe = 0; // don't refuse it
Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
diff --git a/ObjEditor.java b/ObjEditor.java
index 05b548c..422d126 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() == client)
+ {
+ 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()
diff --git a/Object3D.java b/Object3D.java
index 8205153..2c2cf4d 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -14,11 +14,15 @@
import //weka.core.
matrix.Matrix;
+import java.util.UUID;
+
//import net.sourceforge.sizeof.SizeOf;
public class Object3D extends Vector<Object3D> implements java.io.Serializable, iSendInfo //, aurelienribon.tweenengine.TweenAccessor<Object3D>
{
//static final long serialVersionUID = -607422624994562685L;
static final long serialVersionUID = 5022536242724664900L;
+
+ private UUID uuid = UUID.randomUUID();
ScriptNode scriptnode;
@@ -5371,6 +5375,43 @@
}
}
+ UUID GetUUID()
+ {
+ if (uuid == null)
+ {
+ // Serial
+ uuid = UUID.randomUUID();
+ }
+
+ return uuid;
+ }
+
+ Object3D GetObject(UUID uid)
+ {
+ if (blockloop)
+ return null;
+
+ if (GetUUID().equals(uid))
+ return this;
+
+ int nb = Size();
+ for (int i = 0; i < nb; i++)
+ {
+ Object3D child = (Object3D) get(i);
+
+ if (child == null)
+ continue;
+
+ blockloop = true;
+ Object3D obj = child.GetObject(uid);
+ blockloop = false;
+ if (obj != null)
+ return obj;
+ }
+
+ return null;
+ }
+
void SetBumpTexture(String tex)
{
if (GetTextures() == null)
diff --git a/cRadio.java b/cRadio.java
index 0714434..54e8a60 100644
--- a/cRadio.java
+++ b/cRadio.java
@@ -35,6 +35,9 @@
camera = (Camera)Grafreed.clone(c);
}
+ Object3D graphs[] = new Object3D[10000];
+ int undoindex = 0;
+
Object3D object;
Camera camera;
cButton layout;
--
Gitblit v1.6.2