From 54adfcbf93eb477bedeec45409f36cf7e102b790 Mon Sep 17 00:00:00 2001
From: Normand Briere <nbriere@noware.ca>
Date: Mon, 16 Sep 2019 21:54:55 -0400
Subject: [PATCH] Navigation with intersection.

---
 ObjEditor.java |  499 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 419 insertions(+), 80 deletions(-)

diff --git a/ObjEditor.java b/ObjEditor.java
index 68657fd..d5be27b 100644
--- a/ObjEditor.java
+++ b/ObjEditor.java
@@ -24,6 +24,7 @@
         matrix.Matrix;
 
 import grafeme.ui.*;
+import org.xj3d.ui.swt.widgets.ImageLoader;
 
 class ObjEditor /*extends JFrame*/ implements iCallBack, ObjectUI,
         ActionListener, ChangeListener,
@@ -97,9 +98,11 @@
     
     cButton GetButton(String name, boolean border)
     {
-        ImageIcon icon = GetIcon(name);
-        if (icon != null || name.contains("/"))
-            return new cButton(icon, border);
+        //ImageIcon icon = GetIcon(name);
+        boolean fit = !name.startsWith("icons");
+        if (//icon != null ||
+                name.contains("/"))
+            return new cButton(name, border, fit);
         else
             return new cButton(name, border);
     }
@@ -136,9 +139,18 @@
         {
             BufferedImage image;
             
-            if (name.endsWith("jpg"))
-                // Much faster!
-                image = new sun.awt.image.codec.JPEGImageDecoderImpl(ObjEditor.class.getClassLoader().getResourceAsStream(name)).decodeAsBufferedImage();
+            if (!Grafreed.isWindows && name.endsWith("jpg"))
+            {
+                try
+                {
+                    // Much faster!
+                    image = JpegLoader.load(name);
+                }
+                catch (Exception e)
+                {
+                    image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name));
+                }
+            }
             else
                 image = javax.imageio.ImageIO.read(ObjEditor.class.getClassLoader().getResourceAsStream(name));
   
@@ -495,7 +507,7 @@
         //povItem.addActionListener(this);
         closeItem.addActionListener(this);
 
-        objectPanel = new JTabbedPane();
+        objectTabbedPane = new JTabbedPane();
         
         ChangeListener changeListener = new ChangeListener()
         {
@@ -546,13 +558,13 @@
 //                        }
 //                    }
 //                }
-                cameraView.transformMode = objectPanel.getSelectedIndex() == 4;
+                cameraView.transformMode = objectTabbedPane.getSelectedIndex() == 5;
                 
 //                refreshContents(false); // To refresh Info tab
                 cameraView.repaint();
             }
         };
-        objectPanel.addChangeListener(changeListener);
+        objectTabbedPane.addChangeListener(changeListener);
     
         toolbarPanel = new JPanel();
         toolbarPanel.setName("Toolbar");
@@ -595,7 +607,7 @@
         //infoPanel.setLayout(new BorderLayout());
         //infoPanel.add(createTextPane());
 
-        mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectPanel);
+        mainPanel = new JSplitPane(JSplitPane.VERTICAL_SPLIT, treePanel, objectTabbedPane);
         mainPanel.setName("Main");
         mainPanel.setContinuousLayout(true);
         mainPanel.setOneTouchExpandable(true);
@@ -787,6 +799,8 @@
 //            SendInfo("    delay: " + sel.delay + newline, "regular");
             // live, hide, ...
             //??       SendInfo("    Orig: " + maxima + newline, "regular");
+            if (sel.GetTextures().pigmentdata != null)
+                si.SendInfo(" EMBEDDED ", "regular");
             si.SendInfo((debug ? "    Texture: " : "    ") + sel.GetTextures(), "bold");
     //        SendInfo((debug ? "    Material: " : "    ") + sel.material + newline, "regular");
             if (sel instanceof cMesh)
@@ -897,10 +911,20 @@
         
 	cButton minButton;
 	cButton maxButton;
-	cButton fullButton;
+	cButton fullScreenButton;
 	cButton collapseButton;
         cButton maximize3DButton;
         
+    public void Show3DView()
+    {
+        // bug
+        //gridPanel.setDividerLocation(1.0);
+        //bigPanel.setDividerLocation(0.0);
+        bigThree.ClearUI();
+        bigThree.add(centralPanel);
+        bigThree.FlushUI();
+    }
+
         void ToggleFullScreen()
         {
             GraphicsDevice device = frame.getGraphicsConfiguration().getDevice();
@@ -927,14 +951,18 @@
 //                    framePanel.setDividerLocation(46); // icons are 24x24
                     
                     //frame.setVisible(true);
-//                    radio.layout = keepButton;
+                    radio.layout = keepButton;
                     //theFrame = null;
                     keepButton = null;
-//                    radio.layout.doClick();
+                    radio.layout.doClick();
                     
                 } else
                 {
                     keepButton = radio.layout;
+                    
+                    radio.layout = twoButton;
+                    Show3DView();
+                        
                     //keeprect = frame.getBounds();
 //                frame.setBounds(0, 0, frame.getToolkit().getScreenSize().width,
 //                        frame.getToolkit().getScreenSize().height);
@@ -956,6 +984,7 @@
 //                    radio.layout = fullscreenLayout;
 //                    radio.layout.doClick();
                     //frame.setVisible(true);
+                    CollapseToolbar();
                 }
             frame.validate();
             
@@ -981,6 +1010,8 @@
         object.ExtractBigData(Grafreed.grafreed.universe.versiontable);
         // if (copy == client)
         
+        assert(!object.HasBigData());
+        
         Object3D versions[] = object.versionlist;
         java.util.Hashtable<java.util.UUID, Object3D> versiontable = object.versiontable; // if Grafreed.grafreed.universe
         object.versionlist = null;
@@ -991,6 +1022,8 @@
         
         //byte[] compress = Compress(copy);
         Object3D compress = (Object3D)Grafreed.clone(object);
+        
+        assert(!compress.HasBigData());
         
         object.parent = parent;
         
@@ -1138,6 +1171,7 @@
     JCheckBox selectableCB;
     JCheckBox hideCB;
     JCheckBox link2masterCB;
+    JCheckBox sortCB;
     JCheckBox markCB;
     JCheckBox randomCB;
     JCheckBox speedupCB;
@@ -1328,6 +1362,11 @@
             obj = o;
         }
     }
+    
+    String GetSupportText()
+    {
+        return "Support";
+    }
 
     void SetupUI2(ObjEditor oe)
     {
@@ -1376,11 +1415,14 @@
         rewindCB = AddCheckBox(setupPanel2, "Rewind", copy.rewind);
         rewindCB.setToolTipText("Rewind animation");
         
+        sortCB = AddCheckBox(setupPanel2, "Sort", copy.sort);
+        sortCB.setToolTipText("Display from back to front");
+        
         randomCB = AddCheckBox(setupPanel2, "Random", copy.random);
         randomCB.setToolTipText("Randomly Rewind (or Go back and forth)");
 
-        link2masterCB = AddCheckBox(setupPanel2, "Support", copy.link2master);
-        link2masterCB.setToolTipText("Attach to support");
+        link2masterCB = AddCheckBox(setupPanel2, GetSupportText(), copy.link2master);
+        link2masterCB.setToolTipText("Link to support");
         
         if (Globals.ADVANCED)
         {
@@ -1556,6 +1598,8 @@
 
         return null;
     }
+    
+    int objectTabCount;
 
     void SetupViews()
     {
@@ -1691,6 +1735,12 @@
         //XYZPanel.setName("XYZ");
 
         transformPanel.add(resetTransformPanel);
+        
+        cGridBag scalePanel = AddSlider(transformPanel, "Scale", 1, 10, 1);
+        scalePanel.preferredHeight = 2;
+        scaleSlider = (cNumberSlider)scalePanel.getComponent(1);        
+        transformPanel.add(scalePanel);
+        
         transformPanel.add(XYZPanel);
         
         /*
@@ -1728,33 +1778,42 @@
 
         //JScrollPane tmp = new JScrollPane(ctrlPanel, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
         //tmp.setName("Edit");
-        objectPanel.add(skyboxPanel);
-        objectPanel.setIconAt(0, GetIcon("icons/skybox.jpg"));
-        objectPanel.setToolTipTextAt(0, "Backgrounds");
         
-        objectPanel.add(toolboxPanel);
-        objectPanel.setIconAt(1, GetIcon("icons/primitives.png"));
-        objectPanel.setToolTipTextAt(1, "Objects & textures");
+        objectTabCount = 0;
+        
+        objectTabbedPane.add(skyboxPanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/skybox.jpg"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "Backgrounds");
+        
+        objectTabbedPane.add(toolboxPanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/primitives.png"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "Objects & textures");
 
-        objectPanel.add(materialPanel);
-        objectPanel.setIconAt(2, GetIcon("icons/material.png"));
-        objectPanel.setToolTipTextAt(2, "Material");
+        objectTabbedPane.add(materialPanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/material.png"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "Material");
     
+        figurePanel = new cGridBag();
+        figurePanel.add(new cButton("FIGURES and POSES coming soon!"));
+        objectTabbedPane.add(figurePanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/figure.png"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "Figures and poses");
+                
 //        JPanel north = new JPanel(new BorderLayout());
 //        north.setName("Edit");
 //        north.add(ctrlPanel, BorderLayout.NORTH);
 //        objectPanel.add(north);
-        objectPanel.add(editPanel);
-        objectPanel.setIconAt(3, GetIcon("icons/writewhite.png"));
-        objectPanel.setToolTipTextAt(3, "Edit controls");
+        objectTabbedPane.add(editPanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/writewhite.png"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "Edit controls");
         
-        objectPanel.add(transformPanel);
-        objectPanel.setIconAt(4, GetIcon("icons/XYZ.png"));
-        objectPanel.setToolTipTextAt(4, "TRS transform");
+        objectTabbedPane.add(transformPanel);
+        objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/XYZ.png"));
+        objectTabbedPane.setToolTipTextAt(objectTabCount++, "TRS transform");
         
         patchMaterial = true;
         cameraView.patchMaterial = this;
-        objectPanel.setSelectedIndex(2);
+        objectTabbedPane.setSelectedIndex(2);
                 
         /*
         aConstraints.gridx = 0;
@@ -1775,10 +1834,10 @@
         scrollpane.addMouseWheelListener(this); // Default not fast enough
 
         /*JTabbedPane*/ scenePanel = new cGridBag();
-        scenePanel.preferredWidth = 5;
+        scenePanel.preferredWidth = 6;
         
-        JTabbedPane tabbedPane = new JTabbedPane();
-        tabbedPane.add(scrollpane);
+        JTabbedPane sceneTabbedPane = new JTabbedPane();
+        sceneTabbedPane.add(scrollpane);
 
         optionsPanel = new cGridBag().setVertical(false);
 
@@ -1786,11 +1845,207 @@
         
         AddOptions(optionsPanel); //, aConstraints);
         
-        tabbedPane.add(FSPane = new cFileSystemPane(this));
+        sceneTabbedPane.add(FSPane = new cFileSystemPane(this));
 
-        tabbedPane.add(optionsPanel);
+        fullscenePanel = new cGridBag();
+        fullscenePanel.setName("Download");
+        sceneTabbedPane.add(fullscenePanel);
         
-        scenePanel.add(tabbedPane);
+        cButton fullsceneButton;
+        
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/alsace.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Alsace!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Alsace.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/desertmotel.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Desert Motel!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/DesertMotel.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+        
+        fullscenePanel.Return();
+        
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/london.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Old London!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/oldlondon.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+        
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/skullcove.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Skull Cove Island!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/SkullCoveIsland.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+        
+        fullscenePanel.Return();
+        
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/tuscany.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Tuscany!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Tuscany.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+                
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/venice.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Venice!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Venice.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+
+        fullscenePanel.Return();
+        
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/viking.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Viking Village!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/VikingVillage.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+
+        fullscenePanel.add(fullsceneButton = GetButton("fullscenes/yvoire.png", !Globals.NIMBUSLAF));
+        fullsceneButton.setToolTipText("Yvoire!");
+        fullsceneButton.addActionListener(new ActionListener()
+        {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                    ReadGFD("https://www.noaofarc.ca/akeeba/categories/Applications/Yvoire.gfd", new iCallBack()
+                    {
+
+                        public void Callback(Object obj)
+                        {
+                            LoadIt(obj);
+                        }
+
+                        public void DragGesture()
+                        {
+                        }
+                    });
+                }
+        });
+
+        fullscenePanel.Return();
+        
+        fullscenePanel.add(new cGridBag());
+        fullscenePanel.add(new cGridBag());
+        fullscenePanel.Return();
+        fullscenePanel.add(new cGridBag());
+        fullscenePanel.add(new cGridBag());
+        
+        sceneTabbedPane.add(optionsPanel);
+        
+        scenePanel.add(sceneTabbedPane);
 
         cGridBag creditsPanel = new cGridBag().setVertical(true);
         creditsPanel.setName("Credits");
@@ -1879,14 +2134,14 @@
             creditsPanel.add(new cGridBag());
         }
         
-        tabbedPane.add(creditsPanel);
-        tabbedPane.setToolTipTextAt(3, "Credits");
+        sceneTabbedPane.add(creditsPanel);
+        sceneTabbedPane.setToolTipTextAt(3, "Credits");
         
         if (Globals.SHOWINFO)
         {
-            objectPanel.add(infoPanel);
-            objectPanel.setIconAt(5, GetIcon("icons/info.png"));
-            objectPanel.setToolTipTextAt(4, "Information");
+            objectTabbedPane.add(infoPanel);
+            objectTabbedPane.setIconAt(objectTabCount, GetIcon("icons/info.png"));
+            objectTabbedPane.setToolTipTextAt(objectTabCount++, "Information");
         }
 
         /*
@@ -1967,11 +2222,16 @@
                     {
                         if ((Integer)pce.getOldValue() == 1)
                         {
-                            if (radio.layout != expandedLayout)
+                            if (CameraPane.FULLSCREEN)
                             {
-                                radio.layout = expandedLayout;
-                                radio.layout.doClick();
+                                ToggleFullScreen();
                             }
+                            
+//                            if (radio.layout != expandedLayout)
+//                            {
+//                                radio.layout = expandedLayout;
+//                                radio.layout.doClick();
+//                            }
                         }
                     }
                 });
@@ -1995,7 +2255,7 @@
 
 //            aConstraints = gbc; // (GridBagConstraints) GrafreeD.clone(gbc);
 
-        frame.setSize(1280, 860);
+        frame.setSize(1280, 900);
         
                     cameraView.requestFocusInWindow();
                     
@@ -4072,6 +4332,11 @@
             copy.Touch(); // display list issue
             objEditor.refreshContents(true); // To show item colors
             return;
+        } else if (event.getSource() == sortCB)
+        {
+            copy.sort ^= true;
+            objEditor.refreshContents();
+            return;
         } else if (event.getSource() == link2masterCB)
         {
             copy.link2master ^= true;
@@ -4081,6 +4346,20 @@
         if (event.getSource() == randomCB)
         {
             copy.random ^= true;
+            if (this instanceof RandomEditor)
+            {
+                cGridBag itemPanel = ((RandomEditor)this).itemPanel;
+                itemPanel.getComponent(0).setEnabled(!copy.random);
+                
+                // Tooltip?
+                if (copy.random)
+                {
+                }
+                else
+                {
+                }
+            }
+            
             objEditor.refreshContents();
             return;
         }
@@ -4316,6 +4595,12 @@
 
     void New()
     {
+        copy.skyboxname = "cubemaps/penguins-skyboxes/yonder";
+        copy.skyboxext = "jpg";
+        
+        copy.versionlist = null;
+        copy.versionindex = -1;
+        
         while (copy.Size() > 0)
         {
             copy.remove(0);
@@ -4326,9 +4611,15 @@
         if (copy == Grafreed.grafreed.universe)
         {
             CreateCameras();
-            cameraView.SetCamera(GetCamera(copy, 0));
+            cameraView.SetCamera(GetCamera(copy, 0), true);
+            cameraView.SetLight(GetCamera(copy, 4));
         }
+        
         ResetModel();
+        
+        DuplicateVersion();
+        
+        this.SetVersionStates();
         objEditor.refreshContents();
     }
     
@@ -4470,13 +4761,13 @@
         
         SetVersionStates();
         
-        SetCameras();
+        SetCameras(false);
     }
     
-    public boolean Save(boolean user)
+    public boolean DuplicateVersion() // boolean user)
     {
         System.err.println("Save");
-        Replace();
+        //Replace();
         
         if (copy.versionlist == null)
         {
@@ -4585,15 +4876,16 @@
     {
         Object3D obj = (Object3D)Grafreed.clone(changed.versionlist[copy.versionindex]);
         
+        assert(!obj.HasBigData());
+        
         boolean temp = CameraPane.SWITCH;
         CameraPane.SWITCH = false;
         
         changed.ExtractBigData(Grafreed.grafreed.universe.versiontable);
         
         changed.clear();
-        
-        changed.skyboxname = obj.skyboxname;
-        changed.skyboxext = obj.skyboxext;
+
+        obj.deepCopyNode(changed);
                 
         for (int i=0; i<obj.Size(); i++)
         {
@@ -4668,7 +4960,7 @@
             replaceButton.setEnabled(copy.versionindex != -1);
 
             previousVersionButton.setEnabled(copy.versionindex > 0);
-            nextVersionButton.setEnabled(copy.versionlist[copy.versionindex + 1] != null);
+            nextVersionButton.setEnabled(copy.versionlist != null && copy.versionlist[copy.versionindex + 1] != null);
 
             deleteVersionButton.setEnabled(copy.versionindex != -1);
                                             //copy.versionlist[copy.versionindex + 1] != null);
@@ -4718,7 +5010,7 @@
         
         SetVersionStates();
         
-        SetCameras();
+        SetCameras(false);
         
         return true;
     }
@@ -4740,7 +5032,7 @@
         
         SetVersionStates();
         
-        SetCameras();
+        SetCameras(false);
         
         return true;
     }
@@ -4751,7 +5043,8 @@
         
         //cRadio tab = GetCurrentTab();
         
-        if (copy.versionindex == -1 || copy.versionlist[copy.versionindex] == null)
+        // < 0 means == -2 || == -1
+        if (copy.versionindex < 0 || copy.versionlist[copy.versionindex] == null)
         {
             // No version yet. OK. java.awt.Toolkit.getDefaultToolkit().beep();
             return false;
@@ -4784,30 +5077,39 @@
         
         SetVersionStates();
         
-        SetCameras();
+        SetCameras(false);
     }
 
-    void SetCameras()
+    void SetCameras(boolean set)
     {
-        Camera neweye = (Camera)copy.GetObject(cameraView.cameras[0].GetUUID());
-        Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
-        
-        cameraView.SetCamera(neweye);
-        cameraView.SetLight(newlight);
+        if (copy == Grafreed.grafreed.universe)
+        {
+            Camera neweye = (Camera)copy.GetObject(cameraView.cameras[cameraView.cameracount^1].GetUUID());
+            Camera newlight = (Camera)copy.GetObject(cameraView.LightCamera().GetUUID());
+
+            cameraView.SetCamera(neweye, set);
+            cameraView.SetLight(newlight);
+        }
     }
-    
+
+        void ImportGFD(String url)
+        {
+            objEditor.ReadGFD(url, objEditor);
+        }
+        
         void ImportGFD()
         {
             FileDialog browser = new FileDialog(objEditor.frame, "Import GrafreeD", FileDialog.LOAD);
-            browser.show();
+            browser.setVisible(true);
             String filename = browser.getFile();
             if (filename != null && filename.length() > 0)
             {
                 String fullname = browser.getDirectory() + filename;
 
                 //Object3D readobj =
-                        objEditor.ReadGFD(fullname, objEditor);
+                //        objEditor.ReadGFD(fullname, objEditor);
                 //makeSomething(readobj);
+                ImportGFD(fullname);
             }
         }
         
@@ -5124,9 +5426,16 @@
     cNumberSlider versionSlider;
     cNumberSlider versionField;
     
+    cNumberSlider scaleSlider;
+    
+    void ScaleSelection(int scale)
+    {
+    }
+            
     public void stateChanged(ChangeEvent e)
     {
         // assert(false);
+        // Main version slider
         if (e.getSource() == versionSlider)
         {
             if (muteSlider)
@@ -5141,12 +5450,13 @@
                 copy.versionindex = version;
                 CopyChanged(copy);
                 SetVersionStates();
-                SetCameras();
+                SetCameras(false);
             }
             
             return;
         }
 
+        // Version slider of edited object
         if (e.getSource() == versionField)
         {
             int version = versionField.getInteger();
@@ -5160,6 +5470,14 @@
             return;
         }
         
+        if (e.getSource() == scaleSlider)
+        {
+            int scale = scaleSlider.getInteger();
+
+            ScaleSelection(scale);
+            return;
+        }
+
         if (freezematerial)
         {
             return;
@@ -5397,7 +5715,7 @@
                 interest.y = k * interest.y + (1 - k) * height;
             }
 
-            CameraPane.zoomonce = true;
+    //        CameraPane.zoomonce = true;
 
             // june 2014
             Camera parentcam = cameraView.manipCamera;
@@ -5471,7 +5789,7 @@
             
             objEditor.ScreenFit(obj, false);
             
-            cameraView.pingthread.StepToTarget(true); // aout 2013
+            cameraView.pingthread.StepToTarget(); //true); // aout 2013
             refreshContents();
         }
 
@@ -5748,10 +6066,27 @@
     {
         Object3D readobj = null;
 
+        java.net.URL url = null;
+        
+        try
+        {
+            url = new java.net.URL(fullname);
+        } catch (Exception e)
+        {
+            try
+            {
+                url = new java.net.URL("file:///" + fullname);
+            } catch (Exception e2)
+            {
+                e2.printStackTrace();
+            }
+        }
+        
         try
         {
             // Try compressed version first.
-            java.io.FileInputStream istream = new java.io.FileInputStream(fullname);
+            java.io.InputStream istream //= new java.io.FileInputStream(fullname);
+                                        = url.openStream();
             java.util.zip.GZIPInputStream zstream = new java.util.zip.GZIPInputStream(istream);
             java.io.ObjectInputStream p = new java.io.ObjectInputStream(zstream);
 
@@ -5766,7 +6101,8 @@
             
             try
             {
-                java.io.FileInputStream istream = new java.io.FileInputStream(fullname);
+                java.io.InputStream istream //= new java.io.FileInputStream(fullname);
+                                            = url.openStream();
                 java.io.ObjectInputStream p = new java.io.ObjectInputStream(istream);
 
                 readobj = (Object3D) p.readObject();
@@ -5864,12 +6200,11 @@
 //                                // oct 2012    if(cam.parent == null)
 //                                cam.parent = copy.get(0); // cams;
 //                            }
-                            cameraView.SetCamera((Camera) cams.get(0));
-                            // MAJOR CRASH!!
-                            cameraView.SetLight((Camera) cams.get(4));
-                            topView.SetCamera((Camera) cams.get(1));
-                            frontView.SetCamera((Camera) cams.get(2));
-                            sideView.SetCamera((Camera) cams.get(3));
+                            cameraView.SetCamera((Camera) cams.get(0), true);
+                            cameraView.SetLight((Camera) cams.get(4)); // MAJOR CRASH!!
+                            topView.SetCamera((Camera) cams.get(1), true);
+                            frontView.SetCamera((Camera) cams.get(2), true);
+                            sideView.SetCamera((Camera) cams.get(3), true);
 
 //                            copy.get(0).clear();
 //                            copy.get(0).addAll(cams);
@@ -5911,6 +6246,8 @@
         
             //? SetUndoStates();
             
+            cameraView.RevertCamera();
+            
             ResetModel();
             copy.HardTouch(); // recompile?
             refreshContents();
@@ -5922,7 +6259,7 @@
         if (Grafreed.standAlone)
         {
             FileDialog browser = new FileDialog(frame, "Open", FileDialog.LOAD);
-            browser.show();
+            browser.setVisible(true);
             String filename = browser.getFile();
             if (filename != null && filename.length() > 0)
             {
@@ -6245,12 +6582,14 @@
     cGridBag skyboxPanel;
     cGridBag materialPanel;
     cGridBag ctrlPanel;
+    cGridBag figurePanel;
+    cGridBag fullscenePanel;
     
     JScrollPane infoPanel;
     
     cGridBag optionsPanel;
     
-    JTabbedPane objectPanel;
+    JTabbedPane objectTabbedPane;
     boolean materialFlushed;
     Object3D latestObject;
     

--
Gitblit v1.6.2