From 6266c8a4b2485b29a7d5bcb217460d7aad3e1c4a Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Sun, 25 Aug 2019 20:58:10 -0400
Subject: [PATCH] Proto version slider.

---
 ObjEditor.java        |  115 +++++++++------
 CameraPane.java       |   30 ++-
 Camera.java           |    1 
 GroupEditor.java      |   96 +++++++------
 cFileSystemModel.java |    5 
 cTree.java            |    2 
 RandomNode.java       |   11 +
 Object3D.java         |  118 ++++++++++++++++
 8 files changed, 264 insertions(+), 114 deletions(-)

diff --git a/Camera.java b/Camera.java
index ecdc609..0195701 100644
--- a/Camera.java
+++ b/Camera.java
@@ -112,6 +112,7 @@
         
         material.shift = 90;
         material.cameralight = 0.2f;
+        material.shadowbias = 10;
     }
 
     void setAspect(int width, int height)
diff --git a/CameraPane.java b/CameraPane.java
index 4956fe0..b983dd6 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -12952,12 +12952,7 @@
                 "ADD temp.x, temp.x, one.x;" +
                 "MUL normal, normal, temp.xxxx;":""
               ) +
-                 /**/
-////      Normalize("normal") +
-////      "MAX normal.z, eps.x, normal.z;" +
-//                Normalize("normal") +
-                "MOV normald, normal;" +
-                "MOV normals, normal;" +
+                /**/
                 
                 "MOV temp, fragment.texcoord[4];" +
                 
@@ -12975,6 +12970,17 @@
                 "XPD U, V, normal;" +
                 Normalize("U") +
                 
+                "MOV temp, fragment.texcoord[0];" +
+                
+//                "MAD normal, -temp.x, U, normal;" +
+//                "MAD normal, -temp.y, V, normal;" +
+//                Normalize("normal") +
+                
+////      "MAX normal.z, eps.x, normal.z;" +
+//                Normalize("normal") +
+                "MOV normald, normal;" +
+                "MOV normals, normal;" +
+                
 // parallax mapping
 
                 "DP3 temp2.x, V, eye;" +
@@ -12987,17 +12993,15 @@
                 "RCP temp2.w, temp2.w;" +
                 
                 "SUB temp2.w, temp2.w, half;" +
-//                "SGE temp.x, temp2.w, eps.x;" +
-//                "MUL temp2.w, temp2.w, temp.x;" +
+                // "SGE temp.x, temp2.w, eps.x;" +
+                // "MUL temp2.w, temp2.w, temp.x;" +
                 
-                //"MOV texSamp, U;" +
+                // "MOV texSamp, U;" +
                 
                 "MUL temp2.z, temp2.z, temp2.w;" +
                 "MUL temp2.z, temp2.z, params7.z;" + // parallax
                 
                 "MUL temp2, temp2, temp2.z;" +
-                
-                "MOV temp, fragment.texcoord[0];" +
                 
                 "SUB temp, temp, temp2;" +
                 
@@ -14732,8 +14736,8 @@
         }
         }
     PingThread pingthread = new PingThread();
-    int delta = 5;
-    int speed = 5;
+    int delta = 2;
+    int speed = 10;
     boolean autorepeat = false;
 
     void GoDown(int mod)
diff --git a/GroupEditor.java b/GroupEditor.java
index 83301a6..c1f3bea 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -765,11 +765,11 @@
 		shadowYItem.addActionListener(this);
                 shadowZItem = menu.add(new MenuItem("Shadow Blue"));
 		shadowZItem.addActionListener(this);
-		attributeItem = menu.add(new MenuItem("Attribute"));
-		attributeItem.addActionListener(this);
                 
         if (Globals.ADVANCED)
         {
+		attributeItem = menu.add(new MenuItem("Attribute"));
+		attributeItem.addActionListener(this);
 		menu.add("-");
 		linkerItem = menu.add(new MenuItem("Linker"));
 		linkerItem.addActionListener(this);
@@ -779,11 +779,18 @@
 		pointflowItem.addActionListener(this);
         }
 		menu.add("-");
+		textureRatioRItem = menu.add(new MenuItem("Texture Ratio Red"));
+		textureRatioRItem.addActionListener(this);
+		textureRatioGItem = menu.add(new MenuItem("Texture Ratio Green"));
+		textureRatioGItem.addActionListener(this);
+		textureRatioBItem = menu.add(new MenuItem("Texture Ratio Blue"));
+		textureRatioBItem.addActionListener(this);
+		menu.add("-");
 		resetTransformItem = menu.add(new MenuItem("Reset Transform"));
 		resetTransformItem.addActionListener(this);
 		resetCentroidItem = menu.add(new MenuItem("Reset Centroid"));
 		resetCentroidItem.addActionListener(this);
-		resetCentroidXZItem = menu.add(new MenuItem("Reset Centroid XY"));
+		resetCentroidXZItem = menu.add(new MenuItem("Reset Centroid XZ"));
 		resetCentroidXZItem.addActionListener(this);
 		transformGeometryItem = menu.add(new MenuItem("Transform Geometry"));
 		transformGeometryItem.addActionListener(this);
@@ -1217,7 +1224,7 @@
                 torusButton.setToolTipText("Create torus");
                                 torusButton.addActionListener(this);
 
-                if (Globals.ADVANCED)
+                if (false) //Globals.ADVANCED)
                 {
                     oe.toolboxPanel.add(kleinButton = GetButton("icons/klein.png", !Globals.NIMBUSLAF)); //, oe.aConstraints);
                     kleinButton.setToolTipText("Create Klein bottle");
@@ -1493,7 +1500,7 @@
 	
         void EditObject(Object3D obj)
         {
-            assert(obj instanceof Composite);
+            //assert(obj instanceof Composite);
             
 //            if (obj.versionlist == null)
 //            {
@@ -3612,6 +3619,18 @@
 		{
                         TransformChildren();
 		} else
+		if (source == textureRatioRItem)
+		{
+                        TextureRatio(0);
+		} else
+		if (source == textureRatioGItem)
+		{
+                        TextureRatio(1);
+		} else
+		if (source == textureRatioBItem)
+		{
+                        TextureRatio(2);
+		} else
 		if (source == resetTransformItem)
 		{
                         ResetTransform();
@@ -3984,7 +4003,8 @@
 		if (source == closeButton)
 		{
 //System.out.println("CLOSE: " + buttonGroup.getSelection());
-                    Replace();
+                    if (copy.versionlist != null)
+                        Replace();
                     
                     cRadio ab;
                     for (Enumeration e = buttonGroup.getElements(); e.hasMoreElements();)
@@ -4084,7 +4104,8 @@
 		} else
                 if(source instanceof cRadio)
 		{
-                    Replace();
+                    if (copy.versionlist != null)
+                        Replace();
                     
                     group.parent = keepparent;
                         group.attributes = 0;
@@ -4137,7 +4158,7 @@
                      */
                     radio.layout.doClick();
                     
-                    assert(copy instanceof Composite);
+                    //assert(copy instanceof Composite);
                     
         if (copy.versionlist == null)
         {
@@ -4148,7 +4169,7 @@
             // and check if any of these nodes are reachable below the root.
             Grafreed.grafreed.universe.TagObjects(copy, true);
             
-            if (copy.versionlist == null && !copy.HasTags())
+            if (copy instanceof Composite && copy.versionlist == null && !copy.HasTags())
             {
                 copy.versionlist = new Object3D[100];
                 
@@ -4275,6 +4296,18 @@
             refreshContents();
         }
         
+        void TextureRatio(int axis)
+        {
+            Object3D obj;
+            for (Enumeration e = group.selection.elements(); e.hasMoreElements();)
+            {
+                    obj = (Object3D)e.nextElement();
+                    obj.TextureRatio(axis);
+            }
+
+            refreshContents();
+        }
+        
         void ResetTransform()
         {
             ResetTransform(-1);
@@ -4290,38 +4323,8 @@
                     if (obj.toParent == null)
                         continue;
                     
-                    if (mask == -1)
-                    {
-                        if (obj instanceof Camera) // jan 2014
-                        {
-                            LA.matIdentity(obj.toParent);
-                            LA.matIdentity(obj.fromParent);
-                        }
-                        else
-                        {
-                            obj.toParent = null; // jan 2014 LA.matIdentity(obj.toParent);
-                            obj.fromParent = null; // LA.matIdentity(obj.fromParent);
-                        }
-                        TouchTransform(obj);
-                        continue;
-                    }
-                    if ((mask&2) != 0) // Scale/rotation
-                    {
-                        obj.toParent[0][0] = obj.toParent[1][1] = obj.toParent[2][2] = 1;
-                        obj.toParent[0][1] = obj.toParent[1][0] = obj.toParent[2][0] = 0;
-                        obj.toParent[0][2] = obj.toParent[1][2] = obj.toParent[2][1] = 0;
-                        obj.fromParent[0][0] = obj.fromParent[1][1] = obj.fromParent[2][2] = 1;
-                        obj.fromParent[0][1] = obj.fromParent[1][0] = obj.fromParent[2][0] = 0;
-                        obj.fromParent[0][2] = obj.fromParent[1][2] = obj.fromParent[2][1] = 0;
-                    }
-                    if ((mask&1) != 0) // Translation
-                    {
-                        if (obj.toParent != null)
-                        {
-                            obj.toParent[3][0] = obj.toParent[3][1] = obj.toParent[3][2] = 0;
-                            obj.fromParent[3][0] = obj.fromParent[3][1] = obj.fromParent[3][2] = 0;
-                        }
-                    }
+                    obj.ResetTransform(mask);
+                    
                     if (obj.parent == null)
                     {
                         System.out.println("NULL PARENT!");
@@ -4829,6 +4832,12 @@
             for (int i=0; i<group.selection.size(); i++)
             {
 		Object3D obj = group.selection.get(i);
+                
+                if (obj.toParent == null)
+                {
+                    obj.toParent = LA.newMatrix();
+                    obj.fromParent = LA.newMatrix();
+                }
                 
                 LA.matTranslate(obj.toParent, i * scale, 0, 0);
                 LA.matTranslateInv(obj.fromParent, -i * scale, 0, 0);
@@ -5412,7 +5421,7 @@
                     }
             }
             
-            rootButton.setEnabled(allComposites);
+            rootButton.setEnabled(true); // allComposites);
         }
 
         void refreshContents(boolean cp)
@@ -6392,6 +6401,9 @@
 	private MenuItem maxTexturesItem;
 	private MenuItem panoTexturesItem;
         
+	private MenuItem textureRatioRItem;
+	private MenuItem textureRatioGItem;
+	private MenuItem textureRatioBItem;
 	private MenuItem resetCentroidItem;
 	private MenuItem resetCentroidXZItem;
 	private MenuItem resetTransformItem;
diff --git a/ObjEditor.java b/ObjEditor.java
index 63acad8..fd5504d 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -316,6 +316,8 @@
         objEditor.ctrlPanel.remove(setupPanel2);
         objEditor.ctrlPanel.remove(objectCommandsPanel);
         objEditor.ctrlPanel.remove(pushPanel);
+        if (versionPanel != null)
+            objEditor.ctrlPanel.remove(versionPanel);
         //objEditor.ctrlPanel.remove(fillPanel);
         
         //Remove(normalpushField);
@@ -1163,6 +1165,7 @@
     cGridBag setupPanel2;
     cGridBag objectCommandsPanel;
     cGridBag pushPanel;
+    cGridBag versionPanel;
     cGridBag fillPanel;
 
     JCheckBox AddCheckBox(cGridBag panel, String label, boolean on)
@@ -1409,9 +1412,14 @@
         oe.ctrlPanel.add(objectCommandsPanel);
         oe.ctrlPanel.Return();
 
-    pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH, 1.1); // To have the buttons
+    pushPanel = AddSlider(oe.ctrlPanel, "Push", -1, 1, copy.NORMALPUSH * 100, 1.1); // To have the buttons
     normalpushField = (cNumberSlider)pushPanel.getComponent(1);
-    //Return();
+    if (false && copy.versionlist != null && copy.versionindex != -1)
+    {
+        oe.ctrlPanel.Return();
+        versionPanel = AddSlider(oe.ctrlPanel, "Version", 0, copy.VersionCount() - 1, copy.versionindex);
+        versionField = (cNumberSlider)versionPanel.getComponent(1);
+    }
 
         oe.ctrlPanel.Return();
             
@@ -2421,7 +2429,7 @@
                 cameraField.setFloat(0.001);
                 specularField.setFloat(0.001);
                 fakedepthField.setFloat(0.001);
-                opacityField.setFloat(0.6);
+                opacityField.setFloat(0.4);
 
                 materialtouched = true;
                 applySelf();
@@ -4067,6 +4075,7 @@
         } else if (event.getSource() == link2masterCB)
         {
             copy.link2master ^= true;
+            objEditor.refreshContents();
             return;
         }
         if (event.getSource() == randomCB)
@@ -4457,7 +4466,7 @@
             copy.versionindex -= 1;
         
         if (copy.versionindex != -1)
-            CopyChanged();
+            CopyChanged(copy);
         
         SetVersionStates();
     }
@@ -4539,20 +4548,20 @@
     {
         Object3D selection = new Object3D();
         
-        for (int i = 0; i < copy.selection.size(); i++)
+        for (int i = 0; i < objEditor.copy.selection.size(); i++)
         {
-            Object3D elem = copy.selection.elementAt(i);
+            Object3D elem = objEditor.copy.selection.elementAt(i);
             
-            Object3D obj = copy.GetObject(elem.GetUUID());
+            Object3D obj = objEditor.copy.GetObject(elem.GetUUID());
             
             if (obj == null)
             {
-                copy.selection.remove(i--);
+                objEditor.copy.selection.remove(i--);
             }
             else
             {
                 selection.add(obj);
-                copy.selection.setElementAt(obj, i);
+                objEditor.copy.selection.setElementAt(obj, i);
             }
         }
         
@@ -4565,44 +4574,43 @@
         //refreshContents(false);
     }
 
-    void CopyChanged()
+    void CopyChanged(Object3D changed)
     {
-        Object3D obj = (Object3D)Grafreed.clone(copy.versionlist[copy.versionindex]);
-        
-        SetVersionStates();
+        Object3D obj = (Object3D)Grafreed.clone(changed.versionlist[copy.versionindex]);
         
         boolean temp = CameraPane.SWITCH;
         CameraPane.SWITCH = false;
         
-        copy.ExtractBigData(Grafreed.grafreed.universe.versiontable);
+        changed.ExtractBigData(Grafreed.grafreed.universe.versiontable);
         
-        copy.clear();
+        changed.clear();
         
-        copy.skyboxname = obj.skyboxname;
-        copy.skyboxext = obj.skyboxext;
+        changed.skyboxname = obj.skyboxname;
+        changed.skyboxext = obj.skyboxext;
                 
         for (int i=0; i<obj.Size(); i++)
         {
-            copy.add(obj.get(i));
+            changed.add(obj.get(i));
         }
         
-        copy.RestoreBigData(Grafreed.grafreed.universe.versiontable);
+        changed.RestoreBigData(Grafreed.grafreed.universe.versiontable);
         
         CameraPane.SWITCH = temp;
         
-        RefreshSelection();
+        if (objEditor == this)
+            RefreshSelection();
         //assert(hashtable.isEmpty());
         
-        copy.Touch();
+        objEditor.copy.Touch();
         
         ResetModel();
-        copy.HardTouch(); // recompile?
+        objEditor.copy.HardTouch(); // recompile?
         
         cRadio ab;
-        for (java.util.Enumeration e = buttonGroup.getElements(); e.hasMoreElements();)
+        for (java.util.Enumeration e = objEditor.buttonGroup.getElements(); e.hasMoreElements();)
         {
             ab = (cRadio)e.nextElement();
-            Object3D test = copy.GetObject(ab.object.GetUUID());
+            Object3D test = objEditor.copy.GetObject(ab.object.GetUUID());
             //ab.camera = (Camera)copy.GetObject(ab.camera.GetUUID());
             if (test != null)
             {
@@ -4611,7 +4619,7 @@
             }
         }
         
-        refreshContents(true);
+        objEditor.refreshContents(true);
     }
     
     cButton previousVersionButton;
@@ -4625,15 +4633,7 @@
     
     int VersionCount()
     {
-        int count = 0;
-        
-        for (int i = copy.versionlist.length; --i >= 0;)
-        {
-            if (copy.versionlist[i] != null)
-                count++;
-        }
-        
-        return count;
+        return copy.VersionCount();
     }
     
     public cGridBag versionSliderPane;
@@ -4707,7 +4707,9 @@
 
         copy.versionindex -= 1;
 
-        CopyChanged();
+        CopyChanged(copy);
+        
+        SetVersionStates();
         
         return true;
     }
@@ -4725,7 +4727,9 @@
         }
 
         //CopyChanged((Object3D)Uncompress(copy.versions[copy.versionindex]));
-        CopyChanged();
+        CopyChanged(copy);
+        
+        SetVersionStates();
         
         return true;
     }
@@ -4762,10 +4766,12 @@
 
         copy.versionindex += 1;
 
-        CopyChanged();
+        CopyChanged(copy);
         
         //if (!tab.user[tab.versionindex])
         //    tab.graphs[tab.versionindex] = null;
+        
+        SetVersionStates();        
     }
 
         void ImportGFD()
@@ -5094,6 +5100,7 @@
     }
 
     cNumberSlider versionSlider;
+    cNumberSlider versionField;
     
     public void stateChanged(ChangeEvent e)
     {
@@ -5110,12 +5117,26 @@
             if (version != -1 && copy.versionlist[version] != null)
             {
                 copy.versionindex = version;
-                CopyChanged();
+                CopyChanged(copy);
+                SetVersionStates();
             }
             
             return;
         }
 
+        if (e.getSource() == versionField)
+        {
+            int version = versionField.getInteger();
+            
+            if (version != -1 && copy.versionindex != version && copy.versionlist[version] != null)
+            {
+                copy.versionindex = version;
+                CopyChanged(copy);
+            }
+            
+            return;
+        }
+        
         if (freezematerial)
         {
             return;
@@ -5205,7 +5226,7 @@
         }
         
         if (normalpushField != null)
-                copy.NORMALPUSH = (float)normalpushField.getFloat()/100;
+                copy.NORMALPUSH = (float)normalpushField.getFloat() / 100;
     }
 
         void SnapObject()
@@ -5579,7 +5600,7 @@
     void ResetModel()
     {
         //assert(copy instanceof Composite);
-        Object3D /*Composite*/ group = (Object3D /*Composite*/) copy;
+        Object3D /*Composite*/ group = (Object3D /*Composite*/) objEditor.copy;
 
 // necessary?		group.selection = new Object3D(); // java.util.Vector();
 
@@ -5590,14 +5611,14 @@
         //group.refreshEditWindow();
         //refreshContents();
 
-        if (copy.selection == null)
+        if (objEditor.copy.selection == null)
         {
-            copy.selection = new Object3D();
+            objEditor.copy.selection = new Object3D();
         }
 
-        for (int j = 0; j < copy.selection.size(); j++)
+        for (int j = 0; j < objEditor.copy.selection.size(); j++)
         {
-            Object3D item = copy.selection.get(j);
+            Object3D item = objEditor.copy.selection.get(j);
 
             if (item instanceof cGroup && ((cGroup) item).transientlink)
             {
@@ -5606,15 +5627,15 @@
 
             if (item.count <= 1) // ??? == 0)
             {
-                copy.selection.remove(item);
+                objEditor.copy.selection.remove(item);
             }
         }
 
         boolean first = true;
 
-        for (int i = copy.selection.size(); --i >= 0;)
+        for (int i = objEditor.copy.selection.size(); --i >= 0;)
         {
-            Object3D item = copy.selection.get(i);
+            Object3D item = objEditor.copy.selection.get(i);
 
             if (item instanceof cGroup && ((cGroup) item).transientlink)
             {
diff --git a/Object3D.java b/Object3D.java
index 3c575b0..9d52cb0 100644
--- a/Object3D.java
+++ b/Object3D.java
@@ -40,6 +40,19 @@
     
     ScriptNode scriptnode;
 
+    int VersionCount()
+    {
+        int count = 0;
+        
+        for (int i = versionlist.length; --i >= 0;)
+        {
+            if (versionlist[i] != null)
+                count++;
+        }
+        
+        return count;
+    }
+    
         void InitOthers()
         {
                 if (projectedVertices == null || projectedVertices.length <= 2)
@@ -568,11 +581,11 @@
         }
     }
     
-    int memorysize;
+    transient int memorysize; // needs to be transient, dunno why
     
     int MemorySize()
     {
-        if (true) // memorysize == 0)
+        if (memorysize == 0)
         {
             try
             {
@@ -3264,6 +3277,93 @@
     blockloop = false;
 }
             
+    public void ResetTransform(int mask)
+    {
+        Object3D obj = this;
+        
+        if (mask == -1)
+        {
+            if (obj instanceof Camera) // jan 2014
+            {
+                LA.matIdentity(obj.toParent);
+                LA.matIdentity(obj.fromParent);
+            }
+            else
+            {
+                obj.toParent = null; // jan 2014 LA.matIdentity(obj.toParent);
+                obj.fromParent = null; // LA.matIdentity(obj.fromParent);
+            }
+            return;
+        }
+        
+        if ((mask&2) != 0) // Scale/rotation
+        {
+            obj.toParent[0][0] = obj.toParent[1][1] = obj.toParent[2][2] = 1;
+            obj.toParent[0][1] = obj.toParent[1][0] = obj.toParent[2][0] = 0;
+            obj.toParent[0][2] = obj.toParent[1][2] = obj.toParent[2][1] = 0;
+            obj.fromParent[0][0] = obj.fromParent[1][1] = obj.fromParent[2][2] = 1;
+            obj.fromParent[0][1] = obj.fromParent[1][0] = obj.fromParent[2][0] = 0;
+            obj.fromParent[0][2] = obj.fromParent[1][2] = obj.fromParent[2][1] = 0;
+        }
+        if ((mask&1) != 0) // Translation
+        {
+            if (obj.toParent != null)
+            {
+                obj.toParent[3][0] = obj.toParent[3][1] = obj.toParent[3][2] = 0;
+                obj.fromParent[3][0] = obj.fromParent[3][1] = obj.fromParent[3][2] = 0;
+            }
+        }
+    }
+    
+    public void TextureRatioTransform(int axis)
+    {
+        cTexture tex = GetTextures();
+
+        com.sun.opengl.util.texture.TextureData texturedata = null;
+
+        try
+        {
+            texturedata = Globals.theRenderer.GetTextureData(tex, false, texres);
+        }
+        catch (Exception e)
+        {
+            System.err.println("FAIL TextureRatio: " + this);
+        }
+        
+        LA.matIdentity(Object3D.mat);
+        Object3D.mat[axis][axis] = (double)texturedata.getWidth() / texturedata.getHeight();
+
+        if (toParent == null)
+        {
+            toParent = LA.newMatrix();
+            fromParent = LA.newMatrix();
+        }
+
+        ResetTransform(2);
+        
+        LA.matConcat(Object3D.mat, fromParent, fromParent);
+        LA.matInvert(fromParent, toParent);
+    }
+
+    void TextureRatio(int axis)
+    {
+        if (blockloop)
+            return;
+
+        blockloop = true;
+        
+        TextureRatioTransform(axis);
+        
+        for (int i=Size(); --i>=0;)
+        {
+            Object3D v = get(i);
+
+            v.TextureRatio(axis);
+        }
+
+        blockloop = false;
+    }
+
     void TransformChildren()
     {
         if (toParent != null)
@@ -5969,6 +6069,11 @@
         return parent.IsLive();
     }
     
+    boolean IsDynamic()
+    {
+        return live && bRep != null;
+    }
+    
     void Draw(iCameraPane display, Object3D /*Composite*/ root, boolean selected, boolean blocked)
     {
         Invariants(); // june 2013
@@ -6029,7 +6134,8 @@
         if (support != null)
             support = support;
         
-        boolean usecalllists = !IsLive() && IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch);
+        boolean usecalllists = !IsDynamic() &&
+                                    IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null || !link2master); // !(this instanceof cSpring) && !(this instanceof BezierPatch);
         //boolean usecalllists = false; //!IsLive(); // IsStatic() && GetBRep() != null && (!CameraPane.SUPPORT || support == null) && !link2master; // !(this instanceof cSpring) && !(this instanceof BezierPatch);
         
         //usecalllists &= display.DrawMode() == display.DEFAULT; // Don't compute list in shadow pass.
@@ -8075,10 +8181,10 @@
         } //  + super.toString();
     //return name + " (" + (SizeOf.deepSizeOf(this)/1024) + "K) " + this.getClass().getName();
         
-        if (!Globals.ADVANCED)
-            return objname;
+//        if (!Globals.ADVANCED)
+//            return objname;
         
-        return objname + " " + System.identityHashCode(this);
+        return objname + " " + System.identityHashCode(this); // + GetUUID()
     }
 
     public int hashCode()
diff --git a/RandomNode.java b/RandomNode.java
index 81b7d4e..daf6231 100644
--- a/RandomNode.java
+++ b/RandomNode.java
@@ -25,9 +25,14 @@
 //        return 1;
 //    }
     
+    boolean IsSwitch()
+    {
+        return CameraPane.SWITCH && !this.link2master;
+    }
+    
     public int size()
     {
-        if (CameraPane.SWITCH)
+        if (IsSwitch())
         {
             if (super.size() > 0)
                 return 1;
@@ -88,7 +93,7 @@
     
     public Object3D reserve(int i)
     {
-        if (!CameraPane.SWITCH)
+        if (!IsSwitch())
             return super.reserve(i);
         
         //assert(rnd == -1);
@@ -160,7 +165,7 @@
 
     public void release(int i)
     {
-        if (!CameraPane.SWITCH)
+        if (!IsSwitch())
         {
             super.release(i);
             return;
diff --git a/cFileSystemModel.java b/cFileSystemModel.java
index df86db6..acb8318 100644
--- a/cFileSystemModel.java
+++ b/cFileSystemModel.java
@@ -110,8 +110,9 @@
                     hasFocus);
             
             String valueString = value.toString();
+            String lcString = valueString.toLowerCase();
             
-            if (valueString.toLowerCase().endsWith(".gfd") || valueString.toLowerCase().endsWith(".obj") || valueString.toLowerCase().endsWith(".3ds"))
+            if (lcString.endsWith(".gfd") || lcString.endsWith(".obj") || lcString.endsWith(".3ds"))
             {
                 if (true)
                 {
@@ -138,7 +139,7 @@
 
                         if (rendererIcon == null)
                         {
-                            rendererIcon = new javax.swing.ImageIcon();
+                            rendererIcon = ObjEditor.GetIcon("icons/primitives.png");
                         }
 
                         icons.put(valueTruncated, rendererIcon);
diff --git a/cTree.java b/cTree.java
index ec05793..f545248 100644
--- a/cTree.java
+++ b/cTree.java
@@ -21,7 +21,7 @@
             public void mousePressed(MouseEvent e)
             {
                 //if (e.isPopupTrigger()) // Works only on mouse released on Windows.
-                if ((e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)
+                if (e.getModifiers() == InputEvent.BUTTON3_MASK)
                 {
                     int row = getClosestRowForLocation(e.getX(), e.getY());
                     if (!isRowSelected(row))

--
Gitblit v1.6.2