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

---
 GroupEditor.java |  263 ++++++++++++++++++++++++++++++++-------------------
 1 files changed, 164 insertions(+), 99 deletions(-)

diff --git a/GroupEditor.java b/GroupEditor.java
index 7f0fb6a..b4f001a 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -74,7 +74,7 @@
 		this.copy = this.group = copy;
 		//selectees = this.group.selectees;
 		
-		SetupMenu2(objEditor);
+		SetupMenu2(this); //objEditor);
 		SetupUI2(objEditor);
 		objEditor.SetupUI(true);
 		SetupViews(objEditor);
@@ -148,27 +148,18 @@
         
     //JTextField nameField;
     
-	void SetupMenu2(ObjEditor oe)
+	void SetupMenu2(GroupEditor oe)
 	{
-        if (Globals.ADVANCED)
-        {
-		oe.cameraMenu.add(lookAtItem = new MenuItem("Set Interest"));
-		//cameraMenu.add(lookFromItem = new MenuItem("Look From Selection"));
-		//cameraMenu.add(switchItem = new MenuItem("Reverse View"));
-		editLeafItem = oe.cameraMenu.add(new MenuItem("Edit Leaf"));
-		oe.cameraMenu.add("-");
-		openWindowItem =  oe.cameraMenu.add(new MenuItem("Edit copy..."));
-		openWindowItem.addActionListener(this);
-		editLeafItem.addActionListener(this);
-		lookAtItem.addActionListener(this);
-		//lookFromItem.addActinoListener(this);
-		//switchItem.addActionListener(this);
-        }
-        
 		Menu menu;
 		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("-");
 		duplicateItem = menu.add(new MenuItem("Duplicate"));
 		duplicateItem.addActionListener(this);
 		cloneItem = menu.add(new MenuItem("Clone"));
@@ -206,7 +197,94 @@
 		clearAllItem = menu.add(new MenuItem("Clear All"));
 		clearAllItem.addActionListener(this);
         }
+        
+        menuBar.add(cameraMenu = new Menu("View"));
+        //cameraMenu.add(zBufferItem = new CheckboxMenuItem("Z Buffer"));
+        //zBufferItem.addActionListener(this);
+        //cameraMenu.add(normalLensItem = new MenuItem("Normal Lens"));
+        //normalLensItem.addActionListener(this);
+        cameraMenu.add(revertCameraItem = new MenuItem("Restore Viewpoint"));
+        revertCameraItem.addActionListener(this);
+        
+        cameraMenu.add(toggleFullScreenItem = new CheckboxMenuItem("Full Screen"));
+        toggleFullScreenItem.addItemListener(this);
+        toggleFullScreenItem.setState(CameraPane.FULLSCREEN);
+        cameraMenu.add("-");
+        
+        cameraMenu.add(toggleTextureItem = new CheckboxMenuItem("Texture"));
+        toggleTextureItem.addItemListener(this);
+        toggleTextureItem.setState(CameraPane.textureon);
+        
+        cameraMenu.add(toggleSwitchItem = new CheckboxMenuItem("Switch"));
+        toggleSwitchItem.addItemListener(this);
+        toggleSwitchItem.setState(CameraPane.SWITCH);
+        
+        cameraMenu.add(toggleHandleItem = new CheckboxMenuItem("Handles"));
+        toggleHandleItem.addItemListener(this);
+        toggleHandleItem.setState(CameraPane.HANDLES);
+        
+        cameraMenu.add(togglePaintItem = new CheckboxMenuItem("Paint mode"));
+        togglePaintItem.addItemListener(this);
+        togglePaintItem.setState(CameraPane.PAINTMODE);
+        
+        if (Globals.ADVANCED)
+        {
+        cameraMenu.add("-");
+                cameraMenu.add(toggleLiveItem = new CheckboxMenuItem("Live"));
+                toggleLiveItem.addItemListener(this);
+                toggleLiveItem.setState(Globals.isLIVE());
 
+                cameraMenu.add(stepItem = new MenuItem("Step"));
+                stepItem.addActionListener(this);
+        //		cameraMenu.add(toggleDLItem = new CheckboxMenuItem("Display List"));
+        //		toggleDLItem.addItemListener(this);
+        //                toggleDLItem.setState(false);
+
+                cameraMenu.add(toggleRenderItem = new CheckboxMenuItem("Render"));
+                toggleRenderItem.addItemListener(this);
+                toggleRenderItem.setState(!CameraPane.frozen);
+
+                cameraMenu.add(toggleDebugItem = new CheckboxMenuItem("Debug"));
+                toggleDebugItem.addItemListener(this);
+                toggleDebugItem.setState(CameraPane.DEBUG);
+
+                cameraMenu.add(toggleFrustumItem = new CheckboxMenuItem("Frustum"));
+                toggleFrustumItem.addItemListener(this);
+                toggleFrustumItem.setState(CameraPane.FRUSTUM);
+
+                cameraMenu.add(toggleFootContactItem = new CheckboxMenuItem("Foot contact"));
+                toggleFootContactItem.addItemListener(this);
+                toggleFootContactItem.setState(CameraPane.FOOTCONTACT);
+                
+                cameraMenu.add(toggleTimelineItem = new CheckboxMenuItem("Timeline"));
+                toggleTimelineItem.addItemListener(this);
+        }
+        
+//		cameraMenu.add(toggleRootItem = new CheckboxMenuItem("Alternate Root"));
+//		toggleRootItem.addItemListener(this);
+//                    toggleRootItem.setState(false);
+//		cameraMenu.add(animationItem = new CheckboxMenuItem("Animation"));
+//		animationItem.addItemListener(this);
+//                    animationItem.setState(CameraPane.ANIMATION);
+        cameraMenu.add("-");
+        cameraMenu.add(editCameraItem = new MenuItem("Save Viewpoint"));
+        editCameraItem.addActionListener(this);
+        
+        if (Globals.ADVANCED)
+        {
+		oe.cameraMenu.add(lookAtItem = new MenuItem("Set Interest"));
+		//cameraMenu.add(lookFromItem = new MenuItem("Look From Selection"));
+		//cameraMenu.add(switchItem = new MenuItem("Reverse View"));
+		editLeafItem = oe.cameraMenu.add(new MenuItem("Edit Leaf"));
+		oe.cameraMenu.add("-");
+		openWindowItem =  oe.cameraMenu.add(new MenuItem("Edit copy..."));
+		openWindowItem.addActionListener(this);
+		editLeafItem.addActionListener(this);
+		lookAtItem.addActionListener(this);
+		//lookFromItem.addActinoListener(this);
+		//switchItem.addActionListener(this);
+        }
+        
 		oe.menuBar.add(menu = new Menu("Setting"));
         if (Globals.ADVANCED)
         {
@@ -443,19 +521,6 @@
 		oe.menuBar.add(menu = new Menu("Insert"));
 		buildCreateMenu(menu);
                 
-                oe.menuBar.add(menu = new Menu("Include"));
-		importOBJItem = menu.add(new MenuItem("OBJ file..."));
-		importOBJItem.addActionListener(this);
-		menu.add("-");
-		import3DSItem = menu.add(new MenuItem("3DS file..."));
-		import3DSItem.addActionListener(this);
-		menu.add("-");
-		importVRMLX3DItem = menu.add(new MenuItem("VRML/X3D file..."));
-		importVRMLX3DItem.addActionListener(this);
-		menu.add("-");
-		importGFDItem = menu.add(new MenuItem("GrafreeD file..."));
-		importGFDItem.addActionListener(this);
-
                 oe.menuBar.add(menu = new Menu("Tools"));
 		buildToolsMenu(menu);
 	}
@@ -491,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");
@@ -1855,31 +1932,6 @@
                         csg.addChild(child);
                         child.addChild(csg);
 		} else
-                    
-		if (source == importGFDItem)
-		{
-			ImportGFD();
-		} else
-		if (source == importVRMLX3DItem)
-		{
-			ImportVRMLX3D();
-		} else
-		if (source == import3DSItem)
-		{
-			objEditor.ImportJME(new com.jmex.model.converters.MaxToJme(), "3ds", "Import 3DS");
-		} else
-		if (source == importOBJItem)
-		{
-			//objEditor.ImportJME(new com.jmex.model.converters.ObjToJme(), "obj", "Import OBJ");
-                            FileDialog browser = new FileDialog(frame, "Import OBJ", FileDialog.LOAD);
-                            browser.setVisible(true);
-                            String filename = browser.getFile();
-                            if (filename != null && filename.length() > 0)
-                            {
-                                String fullname = browser.getDirectory() + filename;
-                                makeSomething(ReadOBJ(fullname), true);
-                            }
-		} else
 		if (source == computeAOItem)
 		{
                     Globals.drawMode = CameraPane.OCCLUSION;
@@ -1916,6 +1968,18 @@
 		if (source == dumpItem)
 		{
                     DumpObject();
+		} else
+		if (source == undoButton)
+		{
+			Undo();
+		} else
+		if (source == redoButton)
+		{
+			Redo();
+		} else
+		if (source == saveButton)
+		{
+			Save();
 		} else
 		if (source == oneStepButton)
 		{
@@ -1970,6 +2034,14 @@
 		if (source == cutItem || source == clearButton)
 		{
 			loadClipboard(true);
+		} else
+		if (source == undoItem)
+		{
+			Undo();
+		} else
+		if (source == redoItem)
+		{
+			Redo();
 		} else
 		if (source == duplicateItem)
 		{
@@ -2994,7 +3066,7 @@
 				child.CloseUI();
                                 listUI.remove(child);
                                 
-                                child.editWindow = null; // ???????????
+                                //child.editWindow = null; // ???????????
 			}
 			objEditor.ctrlPanel.FlushUI();
 			//objEditor.jTree.clearSelection();
@@ -3081,7 +3153,8 @@
                         sideView.object = group;
                     }
                     
-// fix "+" issue                    group.editWindow = this;
+// fix "+" issue
+                    group.editWindow = this;
                     
                     /*
                     currentLayout = radio.layout;
@@ -3095,7 +3168,20 @@
                     //group.attributes = -1;
                     ResetModel();
                     refreshContents(true);
-                }
+                } else if (event.getSource() == editCameraItem)
+                {
+                    cameraView.ProtectCamera();
+                    cameraView.repaint();
+                    return;
+                } else if (event.getSource() == revertCameraItem)
+                {
+                    cameraView.RevertCamera();
+                    cameraView.repaint();
+                    return;
+        //        } else if (event.getSource() == textureButton)
+        //        {
+        //            return; // true;
+                } 
                 else
                 {
 			//return super.action(event, arg);
@@ -4250,14 +4336,17 @@
 			
                         objEditor.SetText(); // jan 2014
                         
-			if (flashIt && !Globals.isLIVE() && tps != null && tps.length > 0 && !(((Object3D) tps[0].getLastPathComponent()) 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 && ((Object3D) tps[0].getLastPathComponent()) instanceof Camera)
+			if (tps != null && tps.length > 0 && tps[0].getLastPathComponent() instanceof Camera)
                             // a camera
                         {
-                            CameraPane.camerachangeframe = 0; // don't refuse it
-                            Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
+                            if (tps[0].getLastPathComponent() != Globals.theRenderer.LightCamera())
+                            {
+                                CameraPane.camerachangeframe = 0; // don't refuse it
+                                Globals.theRenderer.SetCamera((Camera) tps[0].getLastPathComponent());
+                            }
                          //   Globals.theRenderer.renderCamera = Globals.theRenderer.manipCamera;
                          //   Globals.theRenderer.eyeCamera = Globals.theRenderer.manipCamera;
                         }
@@ -4341,6 +4430,7 @@
 	{
 		if (group.selection.isEmpty())
 			return;
+                
 		Grafreed.clipboardIsTempGroup = false;
 		Composite tGroup = null;
 		if (group.selection.size() > 0) // 1)
@@ -4351,6 +4441,7 @@
                 
 		if (cut)
 		{
+                    Save();
 			//int indices[] = jList.getSelectedIndices();
 			//for (int i = indices.length - 1; i >= 0; i--)
 			//jList.remove(indices[i]);
@@ -4440,8 +4531,10 @@
 			}
 			
 		}
+                
 		if (Grafreed.clipboardIsTempGroup)
 			Grafreed.clipboard = tGroup;
+                
 		if (cut)
                 {
                     ResetModel();
@@ -4973,21 +5066,6 @@
         }
          */
 
-        void ImportGFD()
-        {
-            FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
-            browser.show();
-            String filename = browser.getFile();
-            if (filename != null && filename.length() > 0)
-            {
-                String fullname = browser.getDirectory() + filename;
-
-                //Object3D readobj =
-                        objEditor.ReadGFD(fullname, objEditor);
-                //makeSomething(readobj);
-            }
-        }
-        
         /*
         public void Callback(Object obj)
         {
@@ -5011,23 +5089,6 @@
         }
          */
 
-	void ImportVRMLX3D()
-	{
-		if (Grafreed.standAlone)
-		{
-                    /**/
-			FileDialog browser = new FileDialog(objEditor.frame, "Import VRML/X3D", FileDialog.LOAD);
-			browser.show();
-			String filename = browser.getFile();
-			if (filename != null && filename.length() > 0)
-			{
-				String fullname = browser.getDirectory() + filename;
-                                LoadVRMLX3D(fullname);
-			}
-                     /**/
-		}
-	}
-				
 	String GetFile(String dialogName)
 	{
 		if (Grafreed.standAlone)
@@ -5098,6 +5159,9 @@
 	cButton clearpanelButton;
 	cButton unselectButton;
 	
+	cButton saveButton;
+	cButton undoButton;
+	cButton redoButton;
 	cButton oneStepButton;
         
 	cButton screenfitButton;
@@ -5130,6 +5194,8 @@
 	private MenuItem lookFromItem;
 	private MenuItem switchItem;
 	private MenuItem cutItem;
+	private MenuItem undoItem;
+	private MenuItem redoItem;
 	private MenuItem duplicateItem;
 	private MenuItem cloneItem;
 	private MenuItem cloneSupportItem;
@@ -5276,11 +5342,6 @@
 	private MenuItem doubleItem;
 	private MenuItem tripleItem;
         
-	private MenuItem importGFDItem;
-	private MenuItem importVRMLX3DItem;
-	private MenuItem import3DSItem;
-	private MenuItem importOBJItem;
-
 	private MenuItem computeAOItem;
 	private MenuItem recompileItem;
 	private MenuItem editScriptItem;
@@ -5290,4 +5351,8 @@
 	private MenuItem analyzeItem;
 	private MenuItem dumpItem;
 	//boolean freezemodel = false;
+        
+    Menu cameraMenu;
+    MenuItem editCameraItem;
+    MenuItem revertCameraItem;
 }

--
Gitblit v1.6.2