From 47cd0f0a3870d843cb758535316060d30f15c811 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 24 Jun 2019 19:10:13 -0400
Subject: [PATCH] Toolbox + DnD

---
 ObjEditor.java        |   48 ++++++
 MandelBulb.java       |   56 ++++++++
 icons/particles.png   |    0 
 cTree.java            |   36 ++++-
 icons/sphere.png      |    0 
 icons/torus.png       |    0 
 icons/close-icon.png  |    0 
 icons/cone.png        |    0 
 icons/box.png         |    0 
 CameraPane.java       |    4 
 GroupEditor.java      |  179 +++++++++++++++++++------
 icons/grid.png        |    0 
 Checker.java          |    2 
 icons/flash-light.png |    0 
 icons/overlay.png     |    0 
 icons/super.png       |    0 
 icons/write.png       |    0 
 cFileSystemPane.java  |    2 
 cButton.java          |    4 
 cToggleButton.java    |   41 +++++
 20 files changed, 308 insertions(+), 64 deletions(-)

diff --git a/CameraPane.java b/CameraPane.java
index c1f5c9b..3697e29 100644
--- a/CameraPane.java
+++ b/CameraPane.java
@@ -14377,7 +14377,7 @@
                 info.camera = renderCamera;
                 info.x = x;
                 info.y = y;
-                object.manipWindow.copy
+                object.GetWindow().copy
                         .doEditDrag(info, (modifiers & MouseEvent.BUTTON3_MASK) != 0);
             } else
             {
@@ -15378,7 +15378,7 @@
         }
          */
 
-        object.editWindow.EditSelection();
+        object.editWindow.EditSelection(false);
     }
 
     void SelectParent()
diff --git a/Checker.java b/Checker.java
index d1fffe7..1c59d2c 100644
--- a/Checker.java
+++ b/Checker.java
@@ -2,7 +2,7 @@
 {
     Checker()
     {
-        this("Checker");
+        this("Overlay");
     }
     
     Checker(String name)
diff --git a/GroupEditor.java b/GroupEditor.java
index cce9b1b..9b1b9d3 100644
--- a/GroupEditor.java
+++ b/GroupEditor.java
@@ -150,6 +150,8 @@
     
 	void SetupMenu2(GroupEditor oe)
 	{
+                oe.jTree = new cTree();
+
 		Menu menu;
 		oe.menuBar.add(menu = new Menu("Edit"));
 		//editItem = menu.add(new MenuItem("Edit"));
@@ -160,7 +162,7 @@
 //		redoItem = menu.add(new MenuItem("Redo"));
 //		redoItem.addActionListener(this);
 //		menu.add("-");
-		duplicateItem = menu.add(new MenuItem("Duplicate"));
+		duplicateItem = oe.jTree.popup.add(new JMenuItem("Duplicate"));
 		duplicateItem.addActionListener(this);
 		cloneItem = menu.add(new MenuItem("Clone"));
 		cloneItem.addActionListener(this);
@@ -334,13 +336,21 @@
 		frontItem.addActionListener(this);
 		compositeItem = menu.add(new MenuItem("Composite"));
 		compositeItem.addActionListener(this);
+                
+        if (Globals.ADVANCED)
+        {
 		hideItem = menu.add(new MenuItem("Hidden Group"));
 		hideItem.addActionListener(this);
+        }
 		ungroupItem = menu.add(new MenuItem("Ungroup"));
 		ungroupItem.addActionListener(this);
+                
 		menu.add("-");
+                
 		randomItem = menu.add(new MenuItem("Switch node"));
 		randomItem.addActionListener(this);
+        if (Globals.ADVANCED)
+        {
 		switchGeoItem = menu.add(new MenuItem("Switch Geometry"));
 		switchGeoItem.addActionListener(this);
 		switchTransfoItem = menu.add(new MenuItem("Switch Transform"));
@@ -348,8 +358,6 @@
 		morphItem = menu.add(new MenuItem("Morph Group"));
 		morphItem.addActionListener(this);
                 
-        if (Globals.ADVANCED)
-        {
 		menu.add("-");
 		physicsItem = menu.add(new MenuItem("Physics"));
 		physicsItem.addActionListener(this);
@@ -588,35 +596,37 @@
                 fullButton.setToolTipText("Full-screen window");
 		fullButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(undoButton = GetButton("icons/undo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(undoButton = GetButton("icons/undo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 undoButton.setToolTipText("Undo changes");
 		undoButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(redoButton = GetButton("icons/redo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(redoButton = GetButton("icons/redo.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 redoButton.setToolTipText("Redo changes");
 		redoButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(saveButton = GetButton("icons/down_arrow.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(saveButton = GetButton("icons/down_arrow.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 saveButton.setToolTipText("Save changes");
 		saveButton.addActionListener(this);
                 
-                oe.toolbarPanel.add(liveCB = GetCheckBox("icons/run.png", Globals.isLIVE())); //, oe.aConstraints);
+                oe.toolboxPanel.add(liveCB = GetToggleButton("icons/run.png", Globals.isLIVE())); //, oe.aConstraints);
                 liveCB.setToolTipText("Enable animation");
                                 liveCB.addItemListener(this);
 
-                oe.toolbarPanel.add(fastCB = GetCheckBox("icons/runfast.png", CameraPane.FAST)); //, constraints);
-                fastCB.setToolTipText("Fast mode");
-                                fastCB.addItemListener(this);
-                                
-		oe.toolbarPanel.add(oneStepButton = GetButton("icons/step.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(oneStepButton = GetButton("icons/step.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 oneStepButton.setToolTipText("Animate one step forward");
 		oneStepButton.addActionListener(this);
                 
-                oe.toolbarPanel.add(trackCB = GetCheckBox("icons/track.png", CameraPane.TRACK)); //, oe.aConstraints);
+                oe.toolboxPanel.add(fastCB = GetToggleButton("icons/runfast.png", CameraPane.FAST)); //, constraints);
+                fastCB.setToolTipText("Fast mode");
+                                fastCB.addItemListener(this);
+                                
+                oe.toolboxPanel.Return();
+                
+                oe.toolboxPanel.add(trackCB = GetToggleButton("icons/track.png", CameraPane.TRACK)); //, oe.aConstraints);
                 trackCB.setToolTipText("Enable tracking");
                                 trackCB.addItemListener(this);
 
-		oe.toolbarPanel.add(screenfitButton = GetButton("icons/fit.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(screenfitButton = GetButton("icons/fit.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 screenfitButton.setToolTipText("Screen fit");
 		screenfitButton.addActionListener(this);
 
@@ -630,15 +640,17 @@
                         snapobjectButton.setToolTipText("Snap Object");
                 }
 
-		oe.toolbarPanel.add(flashSelectionButton = GetButton("icons/light-bulb.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolboxPanel.add(flashSelectionButton = GetButton("icons/flash-light.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 flashSelectionButton.setToolTipText("Highlight selection");
 		flashSelectionButton.addActionListener(this);
                 
-		oe.toolbarPanel.add(new JSeparator(SwingConstants.VERTICAL));
+		//oe.toolbarPanel.add(new JSeparator(SwingConstants.VERTICAL));
                 
 		oe.toolbarPanel.add(twoButton = new cButton("|-|", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 twoButton.setToolTipText("Show center view only");
 		twoButton.addActionListener(this);
+                this.fullscreenLayout = twoButton;
+                
 		oe.toolbarPanel.add(fourButton = new cButton("-||", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
 		fourButton.addActionListener(this);
                 fourButton.setToolTipText("Show left panel only");
@@ -653,16 +665,63 @@
 		sevenButton.addActionListener(this);
                 //
 
-		oe.toolbarPanel.add(rootButton = new cButton("o o o", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+		oe.toolbarPanel.add(rootButton = GetButton("icons/write.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 rootButton.setToolTipText("Edit selection in new tab");
 		rootButton.addActionListener(this);
 
-                oe.toolbarPanel.add(closeButton = new cButton("X", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                oe.toolbarPanel.add(closeButton = GetButton("icons/close-icon.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 closeButton.setToolTipText("Close tab");
 		closeButton.addActionListener(this);
 		//oe.treePanel.add(clearButton = new cButton("X"), oe.aConstraints);
 		//clearButton.addActionListener(this);
-                        
+
+                // INSERT
+                oe.toolboxPanel.add(gridButton = GetButton("icons/grid.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                gridButton.setToolTipText("Create grid");
+                                gridButton.addActionListener(this);
+
+                oe.toolboxPanel.add(boxButton = GetButton("icons/box.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                boxButton.setToolTipText("Create box");
+                                boxButton.addActionListener(this);
+
+                oe.toolboxPanel.add(sphereButton = GetButton("icons/sphere.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                sphereButton.setToolTipText("Create sphere");
+                                sphereButton.addActionListener(this);
+
+                oe.toolboxPanel.Return();
+                
+                oe.toolboxPanel.add(coneButton = GetButton("icons/cone.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                coneButton.setToolTipText("Create cone");
+                                coneButton.addActionListener(this);
+
+                oe.toolboxPanel.add(torusButton = GetButton("icons/torus.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                torusButton.setToolTipText("Create torus");
+                                torusButton.addActionListener(this);
+
+                oe.toolboxPanel.add(superButton = GetButton("icons/super.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                superButton.setToolTipText("Create superellipsoid");
+                                superButton.addActionListener(this);
+
+                if (Globals.ADVANCED)
+                {
+                    oe.toolboxPanel.add(kleinButton = GetButton("icons/klein.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                    kleinButton.setToolTipText("Create Klein bottle");
+                                    kleinButton.addActionListener(this);
+                }
+                
+                oe.toolboxPanel.add(particlesButton = GetButton("icons/particles.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                particlesButton.setToolTipText("Create particle system");
+                               particlesButton.addActionListener(this);
+
+                oe.toolboxPanel.add(overlayButton = GetButton("icons/overlay.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                overlayButton.setToolTipText("Create overlay");
+                               overlayButton.addActionListener(this);
+
+                oe.toolboxPanel.add(lightButton = GetButton("icons/light-bulb.png", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
+                lightButton.setToolTipText("Create light");
+                               lightButton.addActionListener(this);
+
+                // EDIT panel
 		editCommandsPanel.add(editButton = new cButton("+", !Grafreed.NIMBUSLAF)); //, oe.aConstraints);
                 editButton.setToolTipText("Edit selection");
 		editButton.addActionListener(this);
@@ -703,7 +762,7 @@
 
                 JScrollPane jSP;
 		//ctrlPanel.add(new JScrollPane(jTree = new cTree(new cTreeModel(this))), aConstraints);
-		jSPPanel.add(jSP = new JScrollPane(oe.jTree = new cTree(null))); //, oe.aConstraints);
+		jSPPanel.add(jSP = new JScrollPane(oe.jTree)); //, oe.aConstraints);
                 ResetModel();
                 
                 oe.treePanel.add(jSPPanel);
@@ -868,16 +927,16 @@
             /*DropTarget dropTarget =*/ new DropTarget(oe.cameraView, this);
         }
 
-        cCheckBox liveCB;
+        cToggleButton liveCB;
         cCheckBox supportCB;
         cCheckBox localCB;
         cCheckBox crowdCB;
         cCheckBox smoothCB;
-        cCheckBox fastCB;
+        cToggleButton fastCB;
         cCheckBox slowCB;
         cCheckBox boxCB;
         cCheckBox zoomBoxCB;
-        cCheckBox trackCB;
+        cToggleButton trackCB;
         cCheckBox smoothfocusCB;
 //        JCheckBox speakerMocapCB;
         cCheckBox speakerCameraCB;
@@ -1014,7 +1073,8 @@
 		
                 /**/
 		//DragSource.getDefaultDragSource().startDrag(dge, DragSource.DefaultMoveNoDrop, new StringSelection("Allo"), this);
-		TreePath path = new TreePath(objEditor.jTree.getSelectionPath().getLastPathComponent());
+		//TreePath path = new TreePath(objEditor.jTree.getSelectionPath().getLastPathComponent());
+		TreePath path = objEditor.jTree.getSelectionPath();
 		if ((path == null) || (path.getPathCount() <= 1)) {
 		  // We can't move the root node or an empty selection
 		  return;
@@ -1138,16 +1198,16 @@
                 return;
             }
 
-            if (dtde.getDropAction() == DnDConstants.ACTION_MOVE) // ?? LINK)
-            {
+// june 2019            if (dtde.getDropAction() == DnDConstants.ACTION_MOVE) // ?? LINK)
+//            {
                 loadClipboard(true);
                 objEditor.jTree.setSelectionPath(destinationPath);
                 pasteInto(false, false);
-            } else {
-                loadClipboard(false);
-                objEditor.jTree.setSelectionPath(destinationPath);
-                pasteInto(false, false); // true); // ???
-            }
+//            } else {
+//                loadClipboard(false);
+//                objEditor.jTree.setSelectionPath(destinationPath);
+//                pasteInto(false, false); // true); // ???
+//            }
 	}
 	public void	dropActionChanged(DropTargetDragEvent dtde) 
 	// Called if the user has modified the current drop gesture
@@ -1739,11 +1799,11 @@
 			objEditor.cameraView.renderCamera.setAim(v2, v1);
 			objEditor.cameraView.repaint();
 		} else
-		if (source == rectoidItem)
+		if (source == rectoidItem || source == boxButton)
 		{
 			makeSomething(new Box());
 		} else
-		if (source == particleItem)
+		if (source == particleItem || source == particlesButton)
 		{
         ParticleNode particleGeom = new ParticleNode("Particles", 1000); //, particleType);
         ParticleController particleController = new ParticleController(particleGeom);
@@ -1822,27 +1882,27 @@
                     
                     makeSomething(obj);
 		} else
-		if (source == gridItem)
+		if (source == gridItem || source == gridButton)
 		{
 			makeSomething(new Grid());
 		} else
-		if (source == ellipsoidItem)
+		if (source == ellipsoidItem || source == sphereButton)
 		{
 			makeSomething(new Sphere());
 		} else
-		if (source == coneItem)
+		if (source == coneItem || source == coneButton)
 		{
 			makeSomething(new Cone());
 		} else
-		if (source == torusItem)
+		if (source == torusItem || source == torusButton)
 		{
 			makeSomething(new Torus());
 		} else
-		if (source == superItem)
+		if (source == superItem || source == superButton)
 		{
 			makeSomething(new Superellipsoid());
 		} else
-		if (source == kleinItem)
+		if (source == kleinItem || source == kleinButton)
 		{
 			makeSomething(new Klein());
 		} else
@@ -1862,7 +1922,7 @@
 		{
 			makeSomething(new BezierSurface());
 		} else
-		if (source == overlayItem)
+		if (source == overlayItem || source == overlayButton)
 		{
                     /*
 			Object3D obj = new BezierSurface(5,8);
@@ -1910,7 +1970,7 @@
                         s.setup();
 			makeSomething(s);
 		} else
-		if (source == lightItem)
+		if (source == lightItem || source == lightButton)
 		{
 			makeSomething(new Light());
 		} else
@@ -2596,7 +2656,7 @@
 		{
 			CastShadow(2);
 		} else
-		if (source == ungroupItem)
+		if (source == ungroupItem || source == ungroupButton)
 		{
 			//ungroup();
                     for (int i=0; i<group.selection.size(); i++)
@@ -2934,6 +2994,10 @@
 		if (source == twoButton)
 		{
                     radio.layout = twoButton;
+                    
+                    if (CameraPane.FULLSCREEN)
+                        fullscreenLayout = radio.layout;
+                    
                     // bug
                     //gridPanel.setDividerLocation(1.0);
                     //bigPanel.setDividerLocation(0.0);
@@ -2989,6 +3053,9 @@
 		{
                     radio.layout = threeButton;
                     
+                    if (CameraPane.FULLSCREEN)
+                        fullscreenLayout = radio.layout;
+                    
 //                    bigThree.remove(scenePanel);
 //                    bigThree.remove(centralPanel);
 //                    bigThree.remove(XYZPanel);
@@ -3027,6 +3094,9 @@
 		{
                     radio.layout = fourButton;
                     
+                    if (CameraPane.FULLSCREEN)
+                        fullscreenLayout = radio.layout;
+                    
 //                    bigThree.remove(scenePanel);
 //                    bigThree.remove(centralPanel);
 //                    bigThree.remove(XYZPanel);
@@ -3063,6 +3133,9 @@
 		if (source == sixButton)
 		{
                     radio.layout = sixButton;
+                    
+                    if (CameraPane.FULLSCREEN)
+                        fullscreenLayout = radio.layout;
                     
 //                    bigThree.remove(scenePanel);
 //                    bigThree.remove(centralPanel);
@@ -3101,6 +3174,9 @@
 		if (source == sevenButton)
 		{
                     radio.layout = sevenButton;
+                    
+                    if (CameraPane.FULLSCREEN)
+                        fullscreenLayout = radio.layout;
                     
 //                    bigThree.remove(scenePanel);
 //                    bigThree.remove(centralPanel);
@@ -4369,7 +4445,7 @@
 		{
                     //System.out.println("edit : " + objectPanel.indexOfTab("Material"));
                     //objectPanel.setEnabledAt(objectPanel.indexOfTab("Material"), false);
-                    objectPanel.setSelectedIndex(objectPanel.indexOfTab("Edit"));
+                    //objectPanel.setSelectedIndex(objectPanel.indexOfTab("Edit"));
                     
 			Object3D elem = (Object3D)group.selection.elementAt(i);
                         if(elem != group || !newWindow)
@@ -5333,6 +5409,21 @@
 	cButton saveButton;
 	cButton oneStepButton;
         
+        cButton groupButton;
+        cButton ungroupButton;
+        cButton compositeButton;
+        
+        cButton gridButton;
+        cButton boxButton;
+        cButton sphereButton;
+        cButton coneButton;
+        cButton torusButton;
+        cButton superButton;
+        cButton kleinButton;
+        cButton particlesButton;
+        cButton overlayButton;
+        cButton lightButton;
+        
 	cButton screenfitButton;
 	cButton screenfitpointButton;
 	cButton snapobjectButton;
@@ -5357,7 +5448,7 @@
 	private MenuItem cutItem;
 	private MenuItem undoItem;
 	private MenuItem redoItem;
-	private MenuItem duplicateItem;
+	private JMenuItem duplicateItem;
 	private MenuItem cloneItem;
 	private MenuItem cloneSupportItem;
 	private MenuItem overwriteGeoItem;
diff --git a/MandelBulb.java b/MandelBulb.java
new file mode 100644
index 0000000..cfffb85
--- /dev/null
+++ b/MandelBulb.java
@@ -0,0 +1,56 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+/**
+ *
+ * @author nbriere
+ */
+public class MandelBulb extends Object3D
+{
+    public boolean inside(double x, double y, double z, boolean transform) // , double d)
+    {
+        double d = 1; // Oops not so easy
+        
+        double posX = x;
+        double posY = y;
+        double posZ = z;
+
+        double dr = 1.0;
+        double r = 0.0;
+
+        for (int i = 0; i < 10; i++)
+        {
+            double dist2xy = x*x + y*y;
+            r = Math.sqrt(dist2xy + z*z);
+            if (r > 10000)
+            {
+                break;
+            }
+
+            // convert to polar coordinates
+            //double theta = Math.acos(z / r);
+            double theta = Math.atan2(-z, Math.sqrt(dist2xy));
+            double phi = Math.atan2(y, x);
+            double zr = Math.pow(r, 8);
+            dr = zr / r * 8 * dr + 1.0;
+
+            // scale and rotate the point
+            theta = theta * 8;
+            phi = phi * 8;
+            
+            // convert back to cartesian coordinates
+            double sintheta = zr * Math.sin(theta);
+            x = sintheta * Math.cos(phi);
+            y = Math.sin(phi) * sintheta;
+            z = zr * Math.cos(theta);
+
+            x += posX;
+            y += posY;
+            z += posZ;
+        }
+        
+        return ((0.5 * Math.log(r) * r / dr) < d);
+    }
+}
diff --git a/ObjEditor.java b/ObjEditor.java
index a1683f8..fdd2815 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -52,6 +52,19 @@
         }
     }
 
+    cToggleButton GetToggleButton(String name, boolean border)
+    {
+        try
+        {
+            ImageIcon icon = GetIcon(name);
+            return new cToggleButton(icon, border);
+        }
+        catch (Exception e)
+        {
+            return new cToggleButton(name, border);
+        }
+    }
+
     cCheckBox GetCheckBox(String name, boolean border)
     {
         try
@@ -384,9 +397,12 @@
         editPanel.add(editCommandsPanel);
         editPanel.add(ctrlPanel);
                 
-        materialPanel = new cGridBag().setVertical(true);
+        toolboxPanel = new cGridBag().setVertical(false);
+        toolboxPanel.setName("Toolbox");
         
+        materialPanel = new cGridBag().setVertical(true);
         materialPanel.setName("Material");
+        
         /*JTextPane*/
         infoarea = createTextPane();
         doc = infoarea.getStyledDocument();
@@ -659,6 +675,8 @@
         
         boolean maximized;
     
+        cButton fullscreenLayout;
+
         void Minimize()
         {
             frame.setState(Frame.ICONIFIED);
@@ -720,7 +738,7 @@
 // X                   frame.getContentPane().add(/*"Center",*/bigThree);
                     framePanel.setDividerLocation(0);
 
-                    radio.layout = twoButton;
+                    radio.layout = fullscreenLayout;
                     radio.layout.doClick();
                     //frame.setVisible(true);
                 }
@@ -1394,6 +1412,7 @@
 
         //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         //tmp.setName("Edit");
+        objectPanel.add(toolboxPanel);
         objectPanel.add(materialPanel);
 //        JPanel north = new JPanel(new BorderLayout());
 //        north.setName("Edit");
@@ -3726,7 +3745,7 @@
         assert false;
     }
 
-    void EditSelection()
+    void EditSelection(boolean newWindow)
     {
     }
 
@@ -4221,7 +4240,7 @@
 
     void makeSomething(Object3D thing, boolean resetmodel) // deselect)
     {
-        if (Globals.SAVEONMAKE)
+        if (Globals.SAVEONMAKE) // && resetmodel)
             Save();
         //Tween.set(thing, 0).target(1).start(tweenManager);
         //Tween.to(thing, 0, 0.5f).target(0).start(tweenManager);
@@ -4309,6 +4328,12 @@
         {
             ResetModel();
             Select(thing.GetTreePath(), true, false); // unselect... false);
+            
+        if (thing.Size() == 0)
+        {
+            //EditSelection(false);
+        }
+        
             refreshContents();
         }
 
@@ -4903,18 +4928,29 @@
     CheckboxMenuItem togglePaintItem;
     JSplitPane mainPanel;
     JScrollPane scrollpane;
+    
     JPanel toolbarPanel;
+    
     cGridBag treePanel;
+    
     JPanel radioPanel;
     ButtonGroup buttonGroup;
-    cGridBag ctrlPanel;
+    
+    cGridBag toolboxPanel;
     cGridBag materialPanel;
+    cGridBag ctrlPanel;
+    
     JScrollPane infoPanel;
+    
     cGridBag optionsPanel;
+    
     JTabbedPane objectPanel;
+    
     cGridBag XYZPanel;
+    
     JSplitPane gridPanel;
     JSplitPane bigPanel;
+    
     cGridBag bigThree;
     cGridBag scenePanel;
     cGridBag centralPanel;
@@ -5029,7 +5065,7 @@
     cNumberSlider fogField;
     JLabel opacityPowerLabel;
     cNumberSlider opacityPowerField;
-    JTree jTree;
+    cTree jTree;
     //ObjectUI parent;
     
     cNumberSlider normalpushField;
diff --git a/cButton.java b/cButton.java
index 6755475..faeb185 100644
--- a/cButton.java
+++ b/cButton.java
@@ -12,7 +12,7 @@
     {
         super(name);
         
-        setMargin(new java.awt.Insets(1, 1, 1, 1));
+        setMargin(new java.awt.Insets(1, -8, 1, -8));
         
         if (border)
                 setBorder(new javax.swing.border.EtchedBorder());
@@ -26,7 +26,7 @@
     {
         super(icon);
         
-        setMargin(new java.awt.Insets(1, 1, 1, 1));
+        setMargin(new java.awt.Insets(-1, -8, -1, -8));
         
 //result = new JButton( icon );
 //result.setBorderPainted( false );
diff --git a/cFileSystemPane.java b/cFileSystemPane.java
index 56bc5ea..cbc4ddf 100644
--- a/cFileSystemPane.java
+++ b/cFileSystemPane.java
@@ -14,7 +14,7 @@
         //DragSourceListener,
         DropTargetListener
 {
-    cTree jTree = new cTree(null);
+    cTree jTree = new cTree();
     iCallBack owner;
     
     JButton refreshButton;
diff --git a/cToggleButton.java b/cToggleButton.java
new file mode 100644
index 0000000..7f9252b
--- /dev/null
+++ b/cToggleButton.java
@@ -0,0 +1,41 @@
+import java.awt.Color;
+import javax.swing.ImageIcon;
+import javax.swing.border.EtchedBorder;
+
+public class cToggleButton extends javax.swing.JToggleButton
+{
+    cToggleButton(String name, boolean enabled)
+    {
+        super(name, enabled);
+
+        //setBorder(new javax.swing.border.EmptyBorder(0, 0, 0, 0));
+        setBorder(new javax.swing.border.EtchedBorder(8));
+    }
+
+    cToggleButton(ImageIcon icon, boolean enabled)
+    {
+        super("", enabled);
+
+        this.image = icon.getImage();
+        iconWidth = icon.getIconWidth();
+
+        //setBorder(new javax.swing.border.EmptyBorder(8, 0, 8, 24)); // top, left, bottom, right
+        setBorder(new javax.swing.border.EtchedBorder(EtchedBorder.RAISED, Color.BLACK, Color.BLACK));
+    }
+    
+    private java.awt.Image image;
+    private int iconWidth;
+
+    @Override
+    protected void paintComponent(java.awt.Graphics g)
+    {
+        super.paintComponent(g);
+        if (image != null)
+        {
+            //if (getWidth() > image.getWidth(null) + 8)
+            {
+                g.drawImage(image, this.getWidth()/2 - 12, this.getHeight()/2 - 12, this);
+            }
+        }
+    }
+}
diff --git a/cTree.java b/cTree.java
index 198376c..2632e2b 100644
--- a/cTree.java
+++ b/cTree.java
@@ -2,17 +2,29 @@
 /**/
 import java.awt.*;
 import java.awt.dnd.*;
-import javax.swing.JTree;
-import javax.swing.tree.TreeModel;
+import javax.swing.*;
+import javax.swing.tree.*;
+import java.awt.event.*;
 
 class cTree extends JTree implements Autoscroll //, DragGestureListener
 {
+    JPopupMenu popup = new JPopupMenu();
 
-    public cTree(TreeModel newModel)
+    public cTree() // TreeModel newModel)
     {
-        super(newModel);
-        
+        //super(newModel);
+
         //setRootVisible(false);
+
+        addMouseListener(new MouseAdapter()
+        {
+            public void mousePressed(MouseEvent e)
+            {
+                if (e.isPopupTrigger()) {
+                    popup.show((JComponent) e.getSource(), e.getX(), e.getY());
+                }
+            }
+        });
     }
 
     /*
@@ -46,8 +58,17 @@
         Rectangle inner = getParent().getBounds();
         return new Insets(inner.y - outer.y + margin, inner.x - outer.x + margin, outer.height - inner.height - inner.y + outer.y + margin, outer.width - inner.width - inner.x + outer.x + margin);
     }
-
-    // Use this method if you want to see the boundaries of the
+//@Override
+//public void mouseClicked(java.awt.event.MouseEvent e) {
+//
+//    if (SwingUtilities.isRightMouseButton(e)) {
+//
+//        int row = getClosestRowForLocation(e.getX(), e.getY());
+//        setSelectionRow(row);
+//        popupMenu.show(e.getComponent(), e.getX(), e.getY());
+//    }
+//}
+// Use this method if you want to see the boundaries of the
     // autoscroll active region
 
     /* bug
@@ -62,4 +83,3 @@
     /**/
 }
 /**/
-
diff --git a/icons/box.png b/icons/box.png
new file mode 100644
index 0000000..497d7c8
--- /dev/null
+++ b/icons/box.png
Binary files differ
diff --git a/icons/close-icon.png b/icons/close-icon.png
new file mode 100644
index 0000000..4654a31
--- /dev/null
+++ b/icons/close-icon.png
Binary files differ
diff --git a/icons/cone.png b/icons/cone.png
new file mode 100644
index 0000000..7080e0b
--- /dev/null
+++ b/icons/cone.png
Binary files differ
diff --git a/icons/flash-light.png b/icons/flash-light.png
new file mode 100644
index 0000000..81ba154
--- /dev/null
+++ b/icons/flash-light.png
Binary files differ
diff --git a/icons/grid.png b/icons/grid.png
new file mode 100644
index 0000000..a911884
--- /dev/null
+++ b/icons/grid.png
Binary files differ
diff --git a/icons/overlay.png b/icons/overlay.png
new file mode 100644
index 0000000..8c71876
--- /dev/null
+++ b/icons/overlay.png
Binary files differ
diff --git a/icons/particles.png b/icons/particles.png
new file mode 100644
index 0000000..2fee0fd
--- /dev/null
+++ b/icons/particles.png
Binary files differ
diff --git a/icons/sphere.png b/icons/sphere.png
new file mode 100644
index 0000000..06d2363
--- /dev/null
+++ b/icons/sphere.png
Binary files differ
diff --git a/icons/super.png b/icons/super.png
new file mode 100644
index 0000000..d3a80cc
--- /dev/null
+++ b/icons/super.png
Binary files differ
diff --git a/icons/torus.png b/icons/torus.png
new file mode 100644
index 0000000..d9e943f
--- /dev/null
+++ b/icons/torus.png
Binary files differ
diff --git a/icons/write.png b/icons/write.png
new file mode 100644
index 0000000..ec8d8fc
--- /dev/null
+++ b/icons/write.png
Binary files differ

--
Gitblit v1.6.2