Increase Figure creation speed. 40/12940/5
Bruno JOFRET [Wed, 16 Oct 2013 17:57:36 +0000 (19:57 +0200)]
Change-Id: I004f0f5be5e699993b41bea2e82508ab7e33a9b2

scilab/modules/graphics/src/c/BuildObjects.c
scilab/modules/gui/src/java/org/scilab/modules/gui/SwingView.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/tab/SwingScilabTab.java
scilab/modules/gui/src/java/org/scilab/modules/gui/bridge/window/SwingScilabWindow.java

index f1d3928..6ccdc07 100644 (file)
@@ -77,7 +77,8 @@ GRAPHICS_IMPEXP int createNewFigureWithAxes()
 {
     int iID = 0;
     int iFigureUID = NULL;
-    int* axesSize = NULL;
+    int* piSize = NULL;
+    int bTrue = (int)TRUE;
 
     iFigureUID = cloneGraphicObject(getFigureModel());
 
@@ -96,9 +97,13 @@ GRAPHICS_IMPEXP int createNewFigureWithAxes()
     /*
      * Force axes size after window creation (Java)
      */
-    getGraphicObjectProperty(getFigureModel(), __GO_AXES_SIZE__, jni_int_vector, (void **)&axesSize);
-    setGraphicObjectProperty(iFigureUID, __GO_AXES_SIZE__, axesSize, jni_int_vector, 2);
+    getGraphicObjectProperty(getFigureModel(), __GO_SIZE__, jni_int_vector, (void **)&piSize);
+    setGraphicObjectProperty(iFigureUID, __GO_SIZE__, piSize, jni_int_vector, 2);
+    getGraphicObjectProperty(getFigureModel(), __GO_AXES_SIZE__, jni_int_vector, (void **)&piSize);
+    setGraphicObjectProperty(iFigureUID, __GO_AXES_SIZE__, piSize, jni_int_vector, 2);
 
+
+    setGraphicObjectProperty(iFigureUID, __GO_VALID__, &bTrue, jni_bool, 1);
     // return the reference to the current figure
     return getCurrentFigure();
 }
index c90ba1b..210e79c 100644 (file)
@@ -115,6 +115,7 @@ import org.scilab.modules.gui.textbox.ScilabTextBox;
 import org.scilab.modules.gui.textbox.TextBox;
 import org.scilab.modules.gui.toolbar.ToolBar;
 import org.scilab.modules.gui.utils.ClosingOperationsManager;
+import org.scilab.modules.gui.utils.Size;
 import org.scilab.modules.gui.utils.ToolBarBuilder;
 import org.scilab.modules.gui.utils.WindowsConfigurationManager;
 import org.scilab.modules.gui.widget.Widget;
@@ -377,6 +378,8 @@ public final class SwingView implements GraphicView {
                 SwingScilabWindow window = new SwingScilabWindow();
 
                 window.setTitle(figureTitle);
+                Integer[] figureSize = figure.getSize();
+                window.setDims(new Size(figureSize[0], figureSize[1]));
                 /* TOOLBAR */
                 ToolBar toolBar = ToolBarBuilder.buildToolBar(SwingScilabTab.GRAPHICS_TOOLBAR_DESCRIPTOR, figureId);
                 /* INFOBAR */
@@ -402,7 +405,7 @@ public final class SwingView implements GraphicView {
                 DockingManager.dock(tab, window.getDockingPort());
                 ActiveDockableTracker.requestDockableActivation(tab);
 
-                window.setVisible(true);
+                //window.setVisible(true);
                 tab.setVisible(true);
                 tab.setName(figureTitle);
 
@@ -621,11 +624,21 @@ public final class SwingView implements GraphicView {
 
     @Override
     public void updateObject(final Integer id, final int property) {
+        final TypedObject registeredObject = allObjects.get(id);
+
+        if (property == __GO_VALID__ && ((Boolean) GraphicController.getController().getProperty(id, __GO_VALID__))) {
+            if (registeredObject.getValue() instanceof SwingScilabTab){
+                ((SwingScilabTab) registeredObject.getValue()).getParentWindow().setVisible(true);
+                ((SwingScilabTab) registeredObject.getValue()).setVisible(true);
+                Integer[] figureSize = (Integer[]) GraphicController.getController().getProperty(id, __GO_SIZE__);
+                ((SwingScilabTab) registeredObject.getValue()).getParentWindow().setDims(new Size(figureSize[0], figureSize[1]));                
+            }
+        }
+
         if (property == __GO_IMMEDIATE_DRAWING__) {
             return;
         }
 
-        final TypedObject registeredObject = allObjects.get(id);
         if (registeredObject == null && property != __GO_STYLE__) {
             return;
         }
index f04f270..51463e4 100644 (file)
@@ -333,6 +333,7 @@ public class SwingScilabTab extends View implements SwingViewObject, SimpleTab,
                 /* Update the figure_size property */
                 Size parentSize =  SwingScilabWindow.allScilabWindows.get(parentWindowId).getDims();
                 Integer[] newSize = new Integer[] {parentSize.getWidth(), parentSize.getHeight()};
+                
                 GraphicController.getController().setProperty(id, __GO_SIZE__, newSize);
 
                 Boolean autoreSize = (Boolean) GraphicController.getController().getProperty(id, __GO_AUTORESIZE__);
@@ -350,7 +351,7 @@ public class SwingScilabTab extends View implements SwingViewObject, SimpleTab,
             public void componentHidden(ComponentEvent arg0) {
             }
         });
-
+        
         /* Manage closerequestfcn */
         ClosingOperationsManager.registerClosingOperation(SwingScilabTab.this, new ClosingOperationsManager.ClosingOperation() {
 
@@ -1436,14 +1437,18 @@ public class SwingScilabTab extends View implements SwingViewObject, SimpleTab,
      * @see org.scilab.modules.gui.SwingViewObject#update(java.lang.String, java.lang.Object)
      */
     public void update(int property, Object value) {
-        if (property == __GO_NAME__) {
-            String name = ((String) value);
-            Integer figureId = (Integer) GraphicController.getController().getProperty(getId(), __GO_ID__);
+        String name;
+        Integer figureId;
+        switch (property) {
+        case  __GO_NAME__ :
+            name = ((String) value);
+            figureId = (Integer) GraphicController.getController().getProperty(getId(), __GO_ID__);
             updateTitle(name, figureId);
-        } else if (property == __GO_ID__) {
+            break;
+        case __GO_ID__ :
             /* Update title */
-            Integer figureId = ((Integer) value);
-            String name = (String) GraphicController.getController().getProperty(getId(), __GO_NAME__);
+            figureId = ((Integer) value);
+            name = (String) GraphicController.getController().getProperty(getId(), __GO_NAME__);
             updateTitle(name, figureId);
 
             /** Update tool bar */
@@ -1464,36 +1469,43 @@ public class SwingScilabTab extends View implements SwingViewObject, SimpleTab,
             /* Update menus callback */
             Integer[] children = (Integer[]) GraphicController.getController().getProperty(getId(), __GO_CHILDREN__);
             updateChildrenCallbacks(children, figureId);
-        } else if (property == __GO_SIZE__) {
+            break;
+        case __GO_SIZE__ :
             Integer[] size = (Integer[]) value;
             SwingScilabWindow.allScilabWindows.get(parentWindowId).setDims(new Size(size[0], size[1]));
-        } else if (property == __GO_POSITION__) {
+            break;
+        case __GO_POSITION__ :
             Integer[] position = (Integer[]) value;
             SwingScilabWindow.allScilabWindows.get(parentWindowId).setPosition(new Position(position[0], position[1]));
-        } else if (property == __GO_AXES_SIZE__) {
+            break;
+        case __GO_AXES_SIZE__ :
             Integer[] axesSize = (Integer[]) value;
             Dimension oldAxesSize = getContentPane().getSize();
-            if (
-                ((oldAxesSize.getWidth() != axesSize[0]) || (oldAxesSize.getHeight() != axesSize[1]))
-                && ((Boolean) GraphicController.getController().getProperty(getId(), __GO_AUTORESIZE__))
-            ) {
+            if ( oldAxesSize.getWidth() != 0 && oldAxesSize.getHeight() != 0
+                    && ((oldAxesSize.getWidth() != axesSize[0]) || (oldAxesSize.getHeight() != axesSize[1]))
+                    && ((Boolean) GraphicController.getController().getProperty(getId(), __GO_AUTORESIZE__))
+                    ) {
                 // TODO manage tabs when there are docked (do not change the window size if more than one tab docked)
                 int deltaX = axesSize[0] - (int) oldAxesSize.getWidth();
                 int deltaY = axesSize[1] - (int) oldAxesSize.getHeight();
                 Size parentWindowSize = SwingScilabWindow.allScilabWindows.get(parentWindowId).getDims();
                 SwingScilabWindow.allScilabWindows.get(parentWindowId).setDims(
-                    new Size(parentWindowSize.getWidth() + deltaX, parentWindowSize.getHeight() + deltaY));
+                        new Size(parentWindowSize.getWidth() + deltaX, parentWindowSize.getHeight() + deltaY));
             }
-        } else if (property == __GO_INFO_MESSAGE__) {
+            break;
+        case __GO_INFO_MESSAGE__ :
             if (getInfoBar() != null) {
                 getInfoBar().setText((String) value);
             }
-        } else if (property == __GO_EVENTHANDLER_ENABLE__) {
+            break;
+        case __GO_EVENTHANDLER_ENABLE__ :
             Boolean enabled = (Boolean) GraphicController.getController().getProperty(getId(), __GO_EVENTHANDLER_ENABLE__);
             setEventHandlerEnabled(enabled);
-        } else if (property == __GO_EVENTHANDLER_NAME__) {
+            break;
+        case __GO_EVENTHANDLER_NAME__ :
             String eventHandlerName = (String) GraphicController.getController().getProperty(getId(), __GO_EVENTHANDLER_NAME__);
             setEventHandler(eventHandlerName);
+            break;
         }
     }
 
@@ -1504,11 +1516,12 @@ public class SwingScilabTab extends View implements SwingViewObject, SimpleTab,
      */
     private void updateChildrenCallbacks(Integer[] children, int parentFigureId) {
         for (int kChild = 0; kChild < children.length; kChild++) {
-            int childType = (Integer) GraphicController.getController().getProperty(children[kChild], __GO_TYPE__);
-            if (childType == __GO_UIMENU__
+            Integer childType = (Integer) GraphicController.getController().getProperty(children[kChild], __GO_TYPE__);
+            if (childType != null && (
+                    childType == __GO_UIMENU__
                     || childType == __GO_UIPARENTMENU__
                     || childType == __GO_UICHILDMENU__
-                    || childType == __GO_UICHECKEDMENU__) {
+                    || childType == __GO_UICHECKEDMENU__)) {
                 String cb = (String) GraphicController.getController().getProperty(children[kChild], __GO_CALLBACK__);
                 SwingView.getFromId(children[kChild]).update(__GO_CALLBACK__, replaceFigureID(cb, parentFigureId));
                 Integer[] menuChildren = (Integer[]) GraphicController.getController().getProperty(children[kChild], __GO_CHILDREN__);
index 04bde4f..4546ca5 100644 (file)
@@ -344,6 +344,7 @@ public class SwingScilabWindow extends JFrame implements SimpleWindow {
     @Override
     public Size getDims() {
         return new Size(getSize().width, getSize().height);
+        
     }
 
     /**
@@ -353,6 +354,8 @@ public class SwingScilabWindow extends JFrame implements SimpleWindow {
      */
     @Override
     public void setDims(Size newWindowSize) {
+        //System.out.println("{SwingScilabWindow.setDims} "+newWindowSize.getWidth()+"x"+newWindowSize.getHeight());
+        //System.out.println("{called by} "+Thread.currentThread().getStackTrace()[2]);
         //if (!SwingUtilities.isEventDispatchThread()) {
         if (getDims().getWidth() != newWindowSize.getWidth() || getDims().getHeight() != newWindowSize.getHeight()) {
             Dimension finalDim = new Dimension(newWindowSize.getWidth(), newWindowSize.getHeight());