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 +++++++++++++++++++++++++++++--
 1 files changed, 58 insertions(+), 4 deletions(-)

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?

--
Gitblit v1.6.2