Allow mutiplie axes within frames. 64/14164/2
Bruno JOFRET [Thu, 27 Mar 2014 13:06:51 +0000 (14:06 +0100)]
Change-Id: Iefee264a6c198c7bc064f09a8567ec43b092302c

scilab/modules/graphic_objects/src/java/org/scilab/modules/graphic_objects/graphicObject/GraphicObject.java
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/frame/SwingScilabFrame.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/axes/AxesDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/datatip/DatatipTextDrawer.java
scilab/modules/renderer/src/java/org/scilab/modules/renderer/JoGLView/text/TextManager.java

index e98f7a4..ba25b84 100644 (file)
@@ -81,6 +81,7 @@ import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.figure.Figure;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
 import org.scilab.modules.graphic_objects.legend.Legend;
+import org.scilab.modules.graphic_objects.uicontrol.frame.Frame;
 
 /**
  * GraphicObject class
@@ -610,6 +611,27 @@ public abstract class GraphicObject implements Cloneable {
     }
 
     /**
+     * Get parent Figure method
+     * Returns the identifier of the object's parent Figure
+     * If the object is a Figure, then returns its own identifier.
+     * To be done: use a member variable storing the up-to-date current parent Figure,
+     * returned instead of recursively ascending the hierarchy at each call.
+     * @return the parent Figure identifier
+     */
+    public Integer getParentFrameOrFigure() {
+        if (this instanceof Figure || this instanceof Frame) {
+            return getIdentifier();
+        }
+
+        if (getParent() != 0 && GraphicController.getController().getObjectFromId(getParent()) != null) {
+            return GraphicController.getController().getObjectFromId(getParent()).getParentFrameOrFigure();
+        }
+
+        /* No parent Figure nor Frame found */
+        return 0;
+    }
+
+    /**
      * Get parent Axes method
      * Returns the identifier of the object's parent Axes
      * If the object is an Axes, then returns its own identifier.
index d3f79ac..73492f1 100644 (file)
@@ -1073,22 +1073,27 @@ public final class SwingView implements GraphicView {
     private void updateFrameChildren(TypedObject updatedObject, Integer[] newChildren) {
         SwingScilabFrame updatedComponent = (SwingScilabFrame) updatedObject.getValue();
         boolean needRevalidate = false;
-
+        boolean hasOpenGLAxes = false;
+        
         // Add new children
         for (Integer childId : newChildren) {
+            int childType = (Integer) GraphicController.getController().getProperty(childId, __GO_TYPE__);
             if (!updatedObject.hasChild(childId)) {
 
                 // Add the child
                 updatedObject.addChild(childId);
 
-                int childType = (Integer) GraphicController.getController().getProperty(childId, __GO_TYPE__);
-
                 /* Add an uicontrol */
                 if (childType == __GO_UICONTROL__ || childType == __GO_AXES__) {
                     updatedComponent.addMember(allObjects.get(childId).getValue());
                     needRevalidate = true;
                 }
             }
+            
+            if (childType == __GO_AXES__) {
+                hasOpenGLAxes = true;
+            }
+            
         }
 
         // Remove children which have been deleted
@@ -1108,14 +1113,14 @@ public final class SwingView implements GraphicView {
                     updatedComponent.remove((Component) allObjects.get(childId).getValue());
                     needRevalidate = true;
                 }
-                
-                if (childType == __GO_AXES__) {
-                    updatedComponent.removeAxes();
-                    needRevalidate = true;
-                }
-                
             }
         }
+        
+        if (!hasOpenGLAxes) {
+            updatedComponent.removeAxes();
+            needRevalidate = true;
+        }
+        
         if (needRevalidate && updatedComponent != null) {
             updatedComponent.revalidate();
         }
index 20cdf65..0a16a90 100644 (file)
@@ -107,6 +107,7 @@ public class SwingScilabFrame extends JPanel implements SwingViewObject, SimpleF
     int redraw = 0;
     protected boolean hasLayout = false;
     private Border defaultBorder = null;
+    private SwingScilabCanvas canvas = null;
 
     /**
      * Constructor
@@ -220,11 +221,13 @@ public class SwingScilabFrame extends JPanel implements SwingViewObject, SimpleF
         }
 
         if (member instanceof SwingScilabAxes) {
-            AxesContainer frame = (AxesContainer) GraphicModel.getModel().getObjectFromId(getId());
-            SwingScilabCanvas canvas = new SwingScilabCanvas(frame);
-            setLayout(new BorderLayout());
-            hasLayout = true;
-            add(canvas, BorderLayout.CENTER);
+            if (canvas == null) {
+                AxesContainer frame = (AxesContainer) GraphicModel.getModel().getObjectFromId(getId());
+                canvas = new SwingScilabCanvas(frame);
+                setLayout(new GridLayout(1,1));
+                hasLayout = true;
+                add(canvas);
+            }
             return;
         }
 
@@ -1010,9 +1013,12 @@ public class SwingScilabFrame extends JPanel implements SwingViewObject, SimpleF
     }
 
     public void removeAxes() {
-        getComponent(0).setEnabled(false);
-        getComponent(0).removeNotify();
-        removeAll();
-        doLayout();
+        if (canvas != null) {
+            canvas.setEnabled(false);
+            remove(canvas);
+            canvas.removeNotify();
+            canvas = null;
+            repaint();
+        }
     }
 }
index bb7cbb4..78d02b4 100644 (file)
@@ -862,7 +862,7 @@ public class AxesDrawer {
      * @param axes the given Axes.
      */
     public static void updateAxesTransformation(Axes axes) {
-        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(axes.getParentFigure());
+        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(axes.getParentFrameOrFigure());
         AxesDrawer axesDrawer = currentVisitor.getAxesDrawer();
         Dimension canvasDimension = currentVisitor.getCanvas().getDimension();
 
index bdfa9a2..6bd10a4 100644 (file)
@@ -174,7 +174,7 @@ public class DatatipTextDrawer extends TextManager {
      */
     public static void updateTextCorners(Datatip datatip) {
         Vector3d[] projCorners = null;
-        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(datatip.getParentFigure());
+        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(datatip.getParentFrameOrFigure());
         Transformation currentProj = currentVisitor.getAxesDrawer().getProjection(datatip.getParentAxes());
         Axes parentAxes = (Axes) GraphicController.getController().getObjectFromId(datatip.getParentAxes());
         Dimension spriteDim = currentVisitor.getDatatipTextDrawer().getSpriteDims(currentVisitor.getColorMap(), datatip);
index 69ca6af..c0208c0 100644 (file)
@@ -24,6 +24,7 @@ import org.scilab.forge.scirenderer.tranformations.Vector3d;
 import org.scilab.modules.graphic_objects.axes.Axes;
 import org.scilab.modules.graphic_objects.figure.ColorMap;
 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
+import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
 import org.scilab.modules.graphic_objects.textObject.Text;
 import org.scilab.modules.renderer.JoGLView.DrawerVisitor;
 import org.scilab.modules.renderer.JoGLView.util.ScaleUtils;
@@ -602,7 +603,7 @@ public class TextManager {
     public static void updateTextCorners(Text text) {
         Vector3d[] projCorners = null;
 
-        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(text.getParentFigure());
+        DrawerVisitor currentVisitor = DrawerVisitor.getVisitor(text.getParentFrameOrFigure());
         Axes parentAxes = (Axes) GraphicController.getController().getObjectFromId(text.getParentAxes());
 
         /* Compute the corners */