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   |    2 
 GroupEditor.java |   49 ++++++++++++++++++++----
 Composite.java   |   61 +++++++++++++++---------------
 3 files changed, 73 insertions(+), 39 deletions(-)

diff --git a/Composite.java b/Composite.java
index 1d9e036..2a525ae 100644
--- a/Composite.java
+++ b/Composite.java
@@ -160,36 +160,37 @@
 //        //Touch();
 //    }
     
-    public void clear()
-    {
-        if (blockloop)
-        {
-            //blockloop = false;
-            return;
-        }
-
-        blockloop = true;
-        //Applet3D.tracein("Clear", this);
-        for (int i = 0; i < Children().size(); i++)
-        {
-            Object3D obj = (Object3D) Children().get(i); // reserve(i);
-            
-            //if (!obj.ReadOnly()) // Object3D Serial...
-            if (!(obj instanceof Composite) || !((Composite) obj).ReadOnly())
-            {
-                obj.clear();
-                //Children().release(i);
-                Children().remove(i);
-                --i;
-            } else
-            {
-                //Children().release(i);
-            }
-        }
-        //Applet3D.traceout("Clear", this);
-
-        blockloop = false;
-    }
+    // JUNE 2019??? That cannot work...
+//    public void clear()
+//    {
+//        if (blockloop)
+//        {
+//            //blockloop = false;
+//            return;
+//        }
+//
+//        blockloop = true;
+//        //Applet3D.tracein("Clear", this);
+//        for (int i = 0; i < Children().size(); i++)
+//        {
+//            Object3D obj = (Object3D) Children().get(i); // reserve(i);
+//            
+//            //if (!obj.ReadOnly()) // Object3D Serial...
+//            if (!(obj instanceof Composite) || !((Composite) obj).ReadOnly())
+//            {
+//                obj.clear();
+//                //Children().release(i);
+//                Children().remove(i);
+//                --i;
+//            } else
+//            {
+//                //Children().release(i);
+//            }
+//        }
+//        //Applet3D.traceout("Clear", this);
+//
+//        blockloop = false;
+//    }
 
     boolean ReadOnly()
     {
diff --git a/GroupEditor.java b/GroupEditor.java
index 3fdc5c4..b4f001a 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -154,11 +154,12 @@
 		oe.menuBar.add(menu = new Menu("Edit"));
 		//editItem = menu.add(new MenuItem("Edit"));
 		//editItem.addActionListener(this);
-		undoItem = menu.add(new MenuItem("Undo"));
-		undoItem.addActionListener(this);
-		redoItem = menu.add(new MenuItem("Redo"));
-		redoItem.addActionListener(this);
-		menu.add("-");
+                
+//		undoItem = menu.add(new MenuItem("Undo"));
+//		undoItem.addActionListener(this);
+//		redoItem = menu.add(new MenuItem("Redo"));
+//		redoItem.addActionListener(this);
+//		menu.add("-");
 		duplicateItem = menu.add(new MenuItem("Duplicate"));
 		duplicateItem.addActionListener(this);
 		cloneItem = menu.add(new MenuItem("Clone"));
@@ -202,7 +203,7 @@
         //zBufferItem.addActionListener(this);
         //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens"));
         //normalLensItem.addActionListener(this);
-        cameraMenu.add(revertCameraItem = new MenuItem("Restore Camera"));
+        cameraMenu.add(revertCameraItem = new MenuItem("Restore Viewpoint"));
         revertCameraItem.addActionListener(this);
         
         cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
@@ -266,7 +267,7 @@
 //		animationItem.addItemListener(this);
 //                    animationItem.setState(CameraPane.ANIMATION);
         cameraMenu.add("-");
-        cameraMenu.add(editCameraItem = new MenuItem("Save Camera"));
+        cameraMenu.add(editCameraItem = new MenuItem("Save Viewpoint"));
         editCameraItem.addActionListener(this);
         
         if (Globals.ADVANCED)
@@ -555,6 +556,18 @@
         oe.buttonGroup.add(dummyButton);
          */
                 //this.AddOptions(oe.toolbarPanel, oe.aConstraints);
+                
+		oe.toolbarPanel.add(undoButton = new cButton("Undo", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                undoButton.setToolTipText("Undo changes");
+		undoButton.addActionListener(this);
+                
+		oe.toolbarPanel.add(redoButton = new cButton("Redo", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                redoButton.setToolTipText("Redo changes");
+		redoButton.addActionListener(this);
+                
+		oe.toolbarPanel.add(saveButton = new cButton("Save", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                saveButton.setToolTipText("Save changes");
+		saveButton.addActionListener(this);
                 
                 oe.toolbarPanel.add(liveCB = new cCheckBox("Live", Globals.isLIVE())); //, oe.aConstraints);
                 liveCB.setToolTipText("Enable animation");
@@ -1956,6 +1969,18 @@
 		{
                     DumpObject();
 		} else
+		if (source == undoButton)
+		{
+			Undo();
+		} else
+		if (source == redoButton)
+		{
+			Redo();
+		} else
+		if (source == saveButton)
+		{
+			Save();
+		} else
 		if (source == oneStepButton)
 		{
                     Globals.ONESTEP = true;
@@ -3128,7 +3153,8 @@
                         sideView.object = group;
                     }
                     
-// fix "+" issue                    group.editWindow = this;
+// fix "+" issue
+                    group.editWindow = this;
                     
                     /*
                     currentLayout = radio.layout;
@@ -4404,6 +4430,7 @@
 	{
 		if (group.selection.isEmpty())
 			return;
+                
 		Grafreed.clipboardIsTempGroup = false;
 		Composite tGroup = null;
 		if (group.selection.size() > 0) // 1)
@@ -4414,6 +4441,7 @@
                 
 		if (cut)
 		{
+                    Save();
 			//int indices[] = jList.getSelectedIndices();
 			//for (int i = indices.length - 1; i >= 0; i--)
 			//jList.remove(indices[i]);
@@ -4503,8 +4531,10 @@
 			}
 			
 		}
+                
 		if (Grafreed.clipboardIsTempGroup)
 			Grafreed.clipboard = tGroup;
+                
 		if (cut)
                 {
                     ResetModel();
@@ -5129,6 +5159,9 @@
 	cButton clearpanelButton;
 	cButton unselectButton;
 	
+	cButton saveButton;
+	cButton undoButton;
+	cButton redoButton;
 	cButton oneStepButton;
         
 	cButton screenfitButton;
diff --git a/ObjEditor.java b/ObjEditor.java
index 422d126..b7c343d 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -3242,7 +3242,7 @@
         for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();)
         {
             ab = (cRadio)e.nextElement();
-            if(ab.GetObject() == client)
+            if(ab.GetObject() == copy)
             {
                 return ab;
             }

--
Gitblit v1.6.2