From d7a17c35c443e2cb6c09eaa3cfeaf590a571faa1 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Wed, 17 Jul 2019 20:15:40 -0400
Subject: [PATCH] Version slider

---
 ObjEditor.java   |   62 +++++++++++++++++++++++++++++--
 GroupEditor.java |   18 ++++++++-
 Object3D.java    |    5 ++
 3 files changed, 79 insertions(+), 6 deletions(-)

diff --git a/GroupEditor.java b/GroupEditor.java
index 7a750fb..a08dc18 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -60,6 +60,12 @@
 		this.copy = this.group = group;
 		//selectees = this.group.selectees;
 		
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
 		if(ui)
                     SetupUI(objEditor);
 	}
@@ -74,6 +80,12 @@
 		this.copy = this.group = copy;
 		//selectees = this.group.selectees;
 		
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
 		SetupMenu2(this); //objEditor);
 		SetupUI2(objEditor);
 		objEditor.SetupUI(true);
@@ -834,8 +846,8 @@
 
                 oe.treePanel.add(copyOptionsPanel);
                 oe.treePanel.Return();
-        cGridBag sliderPane = AddSlider(oe.treePanel, "Version", 0, 10, 0);
-            versionField = (cNumberSlider)sliderPane.getComponent(1);
+        cGridBag sliderPane = AddSlider(oe.treePanel, "Version", 0, 0, 0);
+            versionSlider = (cNumberSlider)sliderPane.getComponent(1);
             sliderPane.preferredHeight = 1;
                 
 //        mainPanel.setDividerLocation(0.5); //1.0);
@@ -3541,6 +3553,8 @@
                     radio.layout.doClick();
                     
                     ClearUnpinned();
+                    Grafreed.Assert(group != null);
+                    Grafreed.Assert(group.selection != null);
                     SetPinStates(group.selection.size() > 0);
                     if (group.selection.size() == 1)
                         EditSelection(false);
diff --git a/ObjEditor.java b/ObjEditor.java
index 174c859..6e1560f 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -282,6 +282,12 @@
         client = inClient;
         copy = client;
 
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
         // "this" is not called: SetupUI2(objEditor);
     }
 
@@ -295,6 +301,12 @@
         client = inClient;
         copy = client;
 
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
         SetupUI2(callee.GetEditor());
     }
 
@@ -327,6 +339,12 @@
         copy = localCopy;
         copy.editWindow = this;
 
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
         SetupMenu();
 
         //SetupName(objEditor); // new
@@ -3731,18 +3749,42 @@
     cButton replaceButton;
     cButton redoButton;
         
+    boolean muteSlider;
+    
+    int VersionCount()
+    {
+        int count = 0;
+        
+        for (int i = copy.versions.length; --i >= 0;)
+        {
+            if (copy.versions[i] != null)
+                count++;
+        }
+        
+        return count;
+    }
+    
     void SetUndoStates()
     {
         cRadio tab = GetCurrentTab();
         
         restoreButton.setEnabled(copy.versionindex != -1);
         replaceButton.setEnabled(copy.versionindex != -1);
+        
         undoButton.setEnabled(copy.versionindex > 0);
         redoButton.setEnabled(copy.versions[copy.versionindex + 1] != null);
+        
+        muteSlider = true;
+        versionSlider.setMaximum(VersionCount() - 1);
+        versionSlider.setInteger(copy.versionindex);
+        muteSlider = false;
     }
     
     public boolean Undo()
     {
+        // Option?
+        Replace();
+        
         System.err.println("Undo");
         
         cRadio tab = GetCurrentTab();
@@ -3809,6 +3851,9 @@
 
     public void Redo()
     {
+        // Option?
+        Replace();
+        
         cRadio tab = GetCurrentTab();
         
         if (copy.versions[copy.versionindex + 1] == null)
@@ -4118,14 +4163,17 @@
         //copy.Touch();
     }
 
-    cNumberSlider versionField;
+    cNumberSlider versionSlider;
     
     public void stateChanged(ChangeEvent e)
     {
         //    assert(false);
-        if (e.getSource() == versionField)
+        if (e.getSource() == versionSlider)
         {
-            int version = versionField.getInteger();
+            if (muteSlider)
+                return;
+            
+            int version = versionSlider.getInteger();
             
             if (copy.versions[version] != null)
             {
@@ -4857,7 +4905,13 @@
             copy.versions = readobj.versions;
             copy.versionindex = readobj.versionindex;
             
-            SetUndoStates();
+        if (copy.versions == null)
+        {
+            copy.versions = new byte[100][];
+            copy.versionindex = -1;
+        }
+        
+            //? SetUndoStates();
             
             ResetModel();
             copy.HardTouch(); // recompile?
diff --git a/Object3D.java b/Object3D.java
index b3a45b6..f8d6c9c 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -219,6 +219,8 @@
 //            o.bRep.support = null;
 //        }
         o.selection = this.selection;
+        o.versions = this.versions;
+        o.versionindex = this.versionindex;
         
         if (this.support != null)
         {
@@ -274,6 +276,9 @@
         }
         
         this.selection = o.selection;
+        
+        this.versions = o.versions;
+        this.versionindex = o.versionindex;
 // July 2019        if (this.bRep != null)
 //            this.bRep.support = o.transientrep;
     //    this.support = o.support;

--
Gitblit v1.6.2