Update figure function : 07/14007/5
Bruno JOFRET [Thu, 13 Mar 2014 11:18:37 +0000 (12:18 +0100)]
- remove foregroundcolor parameter : does nothing
- update documentation
- add backgroundcolor management (addcolor + index)
- add unit test

Change-Id: Icecec08cbdd361ce5d9590614a9eaee1d3ce637a

scilab/modules/gui/Makefile.am
scilab/modules/gui/Makefile.in
scilab/modules/gui/help/en_US/figure.xml
scilab/modules/gui/sci_gateway/c/sci_figure.c
scilab/modules/gui/src/c/addColor.c [new file with mode: 0644]
scilab/modules/gui/src/c/addColor.h [new file with mode: 0644]
scilab/modules/gui/src/c/gui.vcxproj
scilab/modules/gui/src/c/gui.vcxproj.filters
scilab/modules/gui/src/cpp/SetUicontrolBackgroundColor.cpp
scilab/modules/gui/tests/unit_tests/figure.dia.ref [new file with mode: 0644]
scilab/modules/gui/tests/unit_tests/figure.tst [new file with mode: 0644]

index 617d1c1..3d6dbac 100755 (executable)
@@ -57,6 +57,7 @@ src/c/CreateUimenu.c \
 src/c/checkColorRange.c \
 src/c/messageboxoptions.c \
 src/c/ScilabTermination.c \
+src/c/addColor.c \
 src/jni/ScilabTermination_wrap.c
 
 GUI_CXX_SOURCES = \
index c2570d1..810f7e8 100644 (file)
@@ -186,6 +186,7 @@ am__objects_1 = src/c/libscigui_algo_la-buildMainWindowTitle.lo \
        src/c/libscigui_algo_la-checkColorRange.lo \
        src/c/libscigui_algo_la-messageboxoptions.lo \
        src/c/libscigui_algo_la-ScilabTermination.lo \
+       src/c/libscigui_algo_la-addColor.lo \
        src/jni/libscigui_algo_la-ScilabTermination_wrap.lo
 am__objects_2 = src/cpp/libscigui_algo_la-InitUIMenu.lo \
        src/jni/libscigui_algo_la-CallScilabBridge.lo \
@@ -734,6 +735,7 @@ src/c/CreateUimenu.c \
 src/c/checkColorRange.c \
 src/c/messageboxoptions.c \
 src/c/ScilabTermination.c \
+src/c/addColor.c \
 src/jni/ScilabTermination_wrap.c
 
 GUI_CXX_SOURCES = \
@@ -1258,6 +1260,8 @@ src/c/libscigui_algo_la-messageboxoptions.lo: src/c/$(am__dirstamp) \
        src/c/$(DEPDIR)/$(am__dirstamp)
 src/c/libscigui_algo_la-ScilabTermination.lo: src/c/$(am__dirstamp) \
        src/c/$(DEPDIR)/$(am__dirstamp)
+src/c/libscigui_algo_la-addColor.lo: src/c/$(am__dirstamp) \
+       src/c/$(DEPDIR)/$(am__dirstamp)
 src/jni/$(am__dirstamp):
        @$(MKDIR_P) src/jni
        @: > src/jni/$(am__dirstamp)
@@ -1696,6 +1700,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-CreateUimenu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-InitializeGUI.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-ScilabTermination.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-addColor.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-addmenu.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-buildMainWindowTitle.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@src/c/$(DEPDIR)/libscigui_algo_la-checkColorRange.Plo@am__quote@
@@ -1873,6 +1878,13 @@ src/c/libscigui_algo_la-ScilabTermination.lo: src/c/ScilabTermination.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigui_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/libscigui_algo_la-ScilabTermination.lo `test -f 'src/c/ScilabTermination.c' || echo '$(srcdir)/'`src/c/ScilabTermination.c
 
+src/c/libscigui_algo_la-addColor.lo: src/c/addColor.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigui_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/c/libscigui_algo_la-addColor.lo -MD -MP -MF src/c/$(DEPDIR)/libscigui_algo_la-addColor.Tpo -c -o src/c/libscigui_algo_la-addColor.lo `test -f 'src/c/addColor.c' || echo '$(srcdir)/'`src/c/addColor.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/c/$(DEPDIR)/libscigui_algo_la-addColor.Tpo src/c/$(DEPDIR)/libscigui_algo_la-addColor.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/c/addColor.c' object='src/c/libscigui_algo_la-addColor.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigui_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/c/libscigui_algo_la-addColor.lo `test -f 'src/c/addColor.c' || echo '$(srcdir)/'`src/c/addColor.c
+
 src/jni/libscigui_algo_la-ScilabTermination_wrap.lo: src/jni/ScilabTermination_wrap.c
 @am__fastdepCC_TRUE@   $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libscigui_algo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/jni/libscigui_algo_la-ScilabTermination_wrap.lo -MD -MP -MF src/jni/$(DEPDIR)/libscigui_algo_la-ScilabTermination_wrap.Tpo -c -o src/jni/libscigui_algo_la-ScilabTermination_wrap.lo `test -f 'src/jni/ScilabTermination_wrap.c' || echo '$(srcdir)/'`src/jni/ScilabTermination_wrap.c
 @am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/jni/$(DEPDIR)/libscigui_algo_la-ScilabTermination_wrap.Tpo src/jni/$(DEPDIR)/libscigui_algo_la-ScilabTermination_wrap.Plo
index a92b30a..aa546a0 100644 (file)
@@ -8,7 +8,7 @@
         <title>Calling Sequence</title>
         <synopsis>
             f = figure(num);
-            f = figure("PropertyName1", Propertyvalue1, ..., ..., "PropertyNameN", PropertyvalueN); 
+            f = figure("PropertyName1", Propertyvalue1, ..., ..., "PropertyNameN", PropertyvalueN);
         </synopsis>
     </refsynopsisdiv>
     <refsection>
                 </listitem>
             </varlistentry>
             <varlistentry>
-                <term>ForegroundColor</term>
-                <listitem>
-                    <para>[1,3] real vector or string Foreground color of the figure. A
-                        color is specified as Red, Green and Blue values. Those values are
-                        real in [0,1]. The color can be given as a real vector, ie [R,G,B] or
-                        a string where each value is separated by a "|", ie "R|G|B"
-                    </para>
-                </listitem>
-            </varlistentry>
-            <varlistentry>
                 <term>Position</term>
                 <listitem>
                     <para>allows to control the geometrical aspect of the figure.
     </refsection>
     <refsection>
         <title>Examples</title>
-        <programlisting role="example"><![CDATA[ 
+        <programlisting role="example"><![CDATA[
 // Create figure having figure_id==3
 h=figure(3);
 // Add a text uicontrol in figure 3
index e7d493b..dc69542 100644 (file)
 #endif
 
 #include "sciprint.h"
+#include "addColor.h"
 
-#define COLOR_COMPONENT 3
 /*--------------------------------------------------------------------------*/
-void setDefaultProperties(int _iFig);
-int addColor(int _iFig, double* _pdblColor);
+int setDefaultProperties(int _iFig, BOOL bDefaultAxes);
 /*--------------------------------------------------------------------------*/
 int sci_figure(char * fname, unsigned long fname_len)
 {
@@ -49,7 +48,6 @@ int sci_figure(char * fname, unsigned long fname_len)
     int i = 0;
     int iNewId = -1;
     int iAxes = 0;
-    int* piAxes = &iAxes;
     int iPropertyOffset = 0;
     BOOL bDoCreation = TRUE;
     BOOL bVisible = TRUE; // Create a visible figure by default
@@ -58,6 +56,7 @@ int sci_figure(char * fname, unsigned long fname_len)
     int iMenubarType = 1; // Create a 'figure' menubar by default
     int iToolbarType = 1; // Create a 'figure' toolbar by default
     double dblId = 0;
+    BOOL status = FALSE;
 
     //figure(num) -> scf(num)
     //figure() -> scf()
@@ -68,7 +67,7 @@ int sci_figure(char * fname, unsigned long fname_len)
     if (iRhs == 0) // Auto ID
     {
         iFig = createNewFigureWithAxes();
-        setDefaultProperties(iFig);
+        iAxes = setDefaultProperties(iFig, TRUE);
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
         AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
         ReturnArguments(pvApiCtx);
@@ -106,7 +105,7 @@ int sci_figure(char * fname, unsigned long fname_len)
         {
             iFig = createNewFigureWithAxes();
             setGraphicObjectProperty(iFig, __GO_ID__, &iId, jni_int,  1);
-            setDefaultProperties(iFig);
+            iAxes = setDefaultProperties(iFig, TRUE);
         }
 
         createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iFig));
@@ -292,7 +291,7 @@ int sci_figure(char * fname, unsigned long fname_len)
         }
         iFig = createFigure(bDockable, iMenubarType, iToolbarType, bDefaultAxes, bVisible);
         setGraphicObjectProperty(iFig, __GO_ID__, &iNewId, jni_int, 1);
-
+        setDefaultProperties(iFig, bDefaultAxes);
     }
 
     //set(iFig, iPos, iPos + 1)
@@ -331,18 +330,6 @@ int sci_figure(char * fname, unsigned long fname_len)
             continue;
         }
 
-        //check property value to compatibility
-        if (stricmp(pstProName, "backgroundcolor") == 0)
-        {
-            freeAllocatedSingleString(pstProName);
-            pstProName = strdup("background");
-        }
-        else if (stricmp(pstProName, "foregroundcolor") == 0)
-        {
-            freeAllocatedSingleString(pstProName);
-            pstProName = strdup("foreground");
-        }
-
         //get address of value on stack
         sciErr = getVarAddressFromPosition(pvApiCtx, i + 1, &piAddrData);
         if (sciErr.iErr)
@@ -409,6 +396,20 @@ int sci_figure(char * fname, unsigned long fname_len)
         }
 
         callSetProperty(pvApiCtx, iFig, _pvData, iType, iRows, iCols, pstProName);
+
+        // If backgroundcolor is set :
+        // * add it to colormap => performed by callSetProperty
+        // * set background to index => performed by callSetProperty
+        // * copy value into axes background property
+        if (stricmp(pstProName, "backgroundcolor") == 0 && iAxes > 0)
+        {
+            int iBackground = 0;
+            int *piBackground = &iBackground;
+
+            getGraphicObjectProperty(iFig, __GO_BACKGROUND__, jni_int, (void **)&piBackground);
+            setGraphicObjectProperty(iAxes, __GO_BACKGROUND__, piBackground, jni_int, 1);
+        }
+
         if (iType == sci_strings)
         {
             //free allacted data
@@ -430,10 +431,10 @@ int sci_figure(char * fname, unsigned long fname_len)
     return 0;
 }
 /*--------------------------------------------------------------------------*/
-void setDefaultProperties(int _iFig)
+int setDefaultProperties(int _iFig, BOOL _bDefaultAxes)
 {
     //get figure axes
-    int iAxes = getOrCreateDefaultSubwin();
+    int iAxes = -1;
     int iDrawing = 0;
     int iColorIndex = 0;
     int iFilled = 0;
@@ -444,78 +445,25 @@ void setDefaultProperties(int _iFig)
 
     iColorIndex = addColor(_iFig, pdblNewColor);
 
-    //set background in figure and axes to new ( or existting ) color
     setGraphicObjectProperty(_iFig, __GO_BACKGROUND__, &iColorIndex, jni_int, 1);
-    setGraphicObjectProperty(iAxes, __GO_BACKGROUND__, &iColorIndex, jni_int, 1);
-
-    //a.filled = "off"
-    setGraphicObjectProperty(iAxes, __GO_FILLED__, &iFilled, jni_bool, 1);
+    if (_bDefaultAxes)
+    {
+        iAxes = getOrCreateDefaultSubwin();
+        //set background in figure and axes to new ( or existting ) color
+        setGraphicObjectProperty(iAxes, __GO_BACKGROUND__, &iColorIndex, jni_int, 1);
 
-    //a.axes_visible = "off"
-    setGraphicObjectProperty(iAxes, __GO_X_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
-    setGraphicObjectProperty(iAxes, __GO_Y_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
-    setGraphicObjectProperty(iAxes, __GO_Z_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
+        //a.filled = "off"
+        setGraphicObjectProperty(iAxes, __GO_FILLED__, &iFilled, jni_bool, 1);
 
+        //a.axes_visible = "off"
+        setGraphicObjectProperty(iAxes, __GO_X_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
+        setGraphicObjectProperty(iAxes, __GO_Y_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
+        setGraphicObjectProperty(iAxes, __GO_Z_AXIS_VISIBLE__, &iAxesVisible, jni_bool, 1);
+    }
     //f.immediate_drawing = "on"
     iDrawing = 1;
     setGraphicObjectProperty(_iFig, __GO_IMMEDIATE_DRAWING__, &iDrawing, jni_bool, 1);
-}
-/*--------------------------------------------------------------------------*/
-int addColor(int _iFig, double* _pdblNewColor)
-{
-    int iColorIndex = 0;
-    int i = 0, j = 0;
-    int iColorMapSize = 0;
-    int* piColorMapSize = &iColorMapSize;
-    double* pdblColorMap = NULL;
-    //for new figure, we have to set figure and axes background to [0.8 0.8 0.8]
-    //to do that, we have to update figure.colormap to add new color if not exist.
-    //or get index of color in current color_map
-
-    //first get figure.color_map
-    getGraphicObjectProperty(_iFig, __GO_COLORMAP_SIZE__, jni_int, (void**)&piColorMapSize);
-    getGraphicObjectProperty(_iFig, __GO_COLORMAP__, jni_double_vector, (void **)&pdblColorMap);
-
-    //check if newColor already in coloMap
-    for (i = 0 ; i < iColorMapSize ; i++)
-    {
-        BOOL bFound = TRUE;
-        double* pdblCurrentColor = pdblColorMap + i;
-        for (j = 0 ; j < COLOR_COMPONENT ; j++)
-        {
-            if (*(pdblCurrentColor + j * iColorMapSize) != _pdblNewColor[j])
-            {
-                bFound = FALSE;
-                break;
-            }
-        }
 
-        if (bFound)
-        {
-            iColorIndex = i + 1;
-            break;
-        }
-    }
-
-    //not found in current color map
-    if (iColorIndex == 0)
-    {
-        int iNewColorMapSize = (iColorMapSize + 1) * COLOR_COMPONENT;
-        double* pdblNewColorMap = (double*)MALLOC(sizeof(double) * iNewColorMapSize);
-        //we have to add the new color at the end of the current color map
-        for (i = 0 ; i < COLOR_COMPONENT ; i++)
-        {
-            memcpy(pdblNewColorMap + i * (iColorMapSize + 1),
-                   pdblColorMap + (i * iColorMapSize),
-                   iColorMapSize * sizeof(double));
-
-            pdblNewColorMap[i * (iColorMapSize + 1) + iColorMapSize] = _pdblNewColor[i];
-        }
-
-        setGraphicObjectProperty(_iFig, __GO_COLORMAP__, pdblNewColorMap, jni_double_vector, iNewColorMapSize);
-
-        iColorIndex = iColorMapSize + 1;
-    }
-    return iColorIndex;
+    return iAxes;
 }
 /*--------------------------------------------------------------------------*/
diff --git a/scilab/modules/gui/src/c/addColor.c b/scilab/modules/gui/src/c/addColor.c
new file mode 100644 (file)
index 0000000..5907c93
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ * Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
+ *
+ * This file must be used under the terms of the CeCILL.
+ * This source file is licensed as described in the file COPYING, which
+ * you should have received as part of this distribution.  The terms
+ * are also available at
+ * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ */
+#include "addColor.h"
+#include "string.h"
+#include "setGraphicObjectProperty.h"
+#include "getGraphicObjectProperty.h"
+#include "graphicObjectProperties.h"
+
+#include "MALLOC.h"
+
+int addColor(int _iFig, double* _pdblNewColor)
+{
+    int iColorIndex = 0;
+    int i = 0, j = 0;
+    int iColorMapSize = 0;
+    int* piColorMapSize = &iColorMapSize;
+    double* pdblColorMap = NULL;
+    //for new figure, we have to set figure and axes background to [0.8 0.8 0.8]
+    //to do that, we have to update figure.colormap to add new color if not exist.
+    //or get index of color in current color_map
+
+    //first get figure.color_map
+    getGraphicObjectProperty(_iFig, __GO_COLORMAP_SIZE__, jni_int, (void**)&piColorMapSize);
+    getGraphicObjectProperty(_iFig, __GO_COLORMAP__, jni_double_vector, (void **)&pdblColorMap);
+
+    //check if newColor already in coloMap
+    for (i = 0 ; i < iColorMapSize ; i++)
+    {
+        BOOL bFound = TRUE;
+        double* pdblCurrentColor = pdblColorMap + i;
+        for (j = 0 ; j < COLOR_COMPONENT ; j++)
+        {
+            if (*(pdblCurrentColor + j * iColorMapSize) != _pdblNewColor[j])
+            {
+                bFound = FALSE;
+                break;
+            }
+        }
+
+        if (bFound)
+        {
+            iColorIndex = i + 1;
+            break;
+        }
+    }
+
+    //not found in current color map
+    if (iColorIndex == 0)
+    {
+        int iNewColorMapSize = (iColorMapSize + 1) * COLOR_COMPONENT;
+        double* pdblNewColorMap = (double*)MALLOC(sizeof(double) * iNewColorMapSize);
+        //we have to add the new color at the end of the current color map
+        for (i = 0 ; i < COLOR_COMPONENT ; i++)
+        {
+            memcpy(pdblNewColorMap + i * (iColorMapSize + 1),
+                   pdblColorMap + (i * iColorMapSize),
+                   iColorMapSize * sizeof(double));
+
+            pdblNewColorMap[i * (iColorMapSize + 1) + iColorMapSize] = _pdblNewColor[i];
+        }
+
+        setGraphicObjectProperty(_iFig, __GO_COLORMAP__, pdblNewColorMap, jni_double_vector, iNewColorMapSize);
+
+        iColorIndex = iColorMapSize + 1;
+    }
+    return iColorIndex;
+}
diff --git a/scilab/modules/gui/src/c/addColor.h b/scilab/modules/gui/src/c/addColor.h
new file mode 100644 (file)
index 0000000..cdc5fb1
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+ *  Copyright (C) 2014-2014 - Scilab Enterprises - Bruno JOFRET
+ *
+ *  This file must be used under the terms of the CeCILL.
+ *  This source file is licensed as described in the file COPYING, which
+ *  you should have received as part of this distribution.  The terms
+ *  are also available at
+ *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+ *
+ */
+
+#ifndef __ADDCOLOR_H__
+#define __ADDCOLOR_H__
+
+#define COLOR_COMPONENT 3
+
+/*
+** Add color into figure colormap
+** _iFig : the figure UID
+** _pdblColor[3] : [R,G,B] color
+*/
+int addColor(int _iFig, double* _pdblColor);
+
+#endif /* !__ADDCOLOR_H__ */
index 440c42b..e368781 100755 (executable)
     <ClCompile Include="..\jni\ScilabTermination_wrap.c" />
     <ClCompile Include="..\jni\StartPlotBrowser.cpp" />
     <ClCompile Include="..\jni\SwingView.cpp" />
+    <ClCompile Include="addColor.c" />
     <ClCompile Include="addmenu.c" />
     <ClCompile Include="buildMainWindowTitle.c" />
     <ClCompile Include="..\cpp\CallClipboard.cpp" />
     <ClInclude Include="..\jni\ScilabDisplayTree.hxx" />
     <ClInclude Include="..\jni\StartPlotBrowser.hxx" />
     <ClInclude Include="..\jni\SwingView.hxx" />
+    <ClInclude Include="addColor.h" />
     <ClInclude Include="buildMainWindowTitle.h" />
     <ClInclude Include="checkColorRange.h" />
     <ClInclude Include="CreateUimenu.h" />
index ef70067..c1293b2 100755 (executable)
     <ClCompile Include="..\..\sci_gateway\cpp\sci_loadGui.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="addColor.c">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <None Include="core_import.def">
     <ClInclude Include="..\cpp\CreateUIControl.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="addColor.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
 </Project>
\ No newline at end of file
index b8c3da5..ef5bdeb 100644 (file)
@@ -15,6 +15,7 @@
 
 extern "C"
 {
+#include "addColor.h"
 #include "SetUicontrol.h"
 }
 
@@ -25,6 +26,9 @@ int SetUicontrolBackgroundColor(void* _pvCtx, int iObjUID, void* _pvData, int va
     double* allColors = NULL;
     BOOL status = FALSE;
     int nbValues = 0;
+    int iType = -1;
+    int *piType = &iType;
+    int iColorIndex = 0;
 
     if (valueType == sci_strings)
     {
@@ -71,7 +75,18 @@ int SetUicontrolBackgroundColor(void* _pvCtx, int iObjUID, void* _pvData, int va
         return SET_PROPERTY_ERROR;
     }
 
-    status = setGraphicObjectProperty(iObjUID, __GO_UI_BACKGROUNDCOLOR__, allColors, jni_double_vector, 3);
+    getGraphicObjectProperty(iObjUID, __GO_TYPE__, jni_int, (void **) &piType);
+    switch (iType)
+    {
+    case __GO_FIGURE__ :
+        iColorIndex = addColor(iObjUID, allColors);
+        status = setGraphicObjectProperty(iObjUID, __GO_BACKGROUND__, &iColorIndex, jni_int, 1);
+        break;
+    default :
+        status = setGraphicObjectProperty(iObjUID, __GO_UI_BACKGROUNDCOLOR__, allColors, jni_double_vector, 3);
+        break;
+    }
+
 
     if (valueType == sci_strings)
     {
diff --git a/scilab/modules/gui/tests/unit_tests/figure.dia.ref b/scilab/modules/gui/tests/unit_tests/figure.dia.ref
new file mode 100644 (file)
index 0000000..507bc5f
--- /dev/null
@@ -0,0 +1,35 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// Check figure function behaviour
+f = figure();
+a = gca();
+assert_checkequal(f.background, 33);
+assert_checkequal(a.background, f.background);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [33, 3]);
+delete(f);
+f = figure("default_axes", "off");
+assert_checkequal(f.children, []);
+delete(f);
+// Existing color
+f = figure("backgroundcolor", [0 1 0]);
+a = gca();
+assert_checkequal(f.background, 3);
+assert_checkequal(a.background, 33);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [33, 3]);
+assert_checkequal(f.color_map(3,:), [0, 1, 0]);
+delete(f);
+// Non - Existing color
+f = figure("backgroundcolor", [0.5 0.2 0.6]);
+a = gca();
+assert_checkequal(f.background, 34);
+assert_checkequal(a.background, 33);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [34, 3]);
+assert_checkequal(f.color_map(34,:), [0.5 0.2 0.6]);
+delete(f);
diff --git a/scilab/modules/gui/tests/unit_tests/figure.tst b/scilab/modules/gui/tests/unit_tests/figure.tst
new file mode 100644 (file)
index 0000000..07b7b21
--- /dev/null
@@ -0,0 +1,41 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2014 - Scilab Enterprises - Bruno JOFRET
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// Check figure function behaviour
+
+f = figure();
+a = gca();
+assert_checkequal(f.background, 33);
+assert_checkequal(a.background, f.background);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [33, 3]);
+delete(f);
+
+f = figure("default_axes", "off");
+assert_checkequal(f.children, []);
+delete(f);
+
+// Existing color
+f = figure("backgroundcolor", [0 1 0]);
+a = gca();
+assert_checkequal(f.background, 3);
+assert_checkequal(a.background, 33);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [33, 3]);
+assert_checkequal(f.color_map(3,:), [0, 1, 0]);
+delete(f);
+
+// Non - Existing color
+f = figure("backgroundcolor", [0.5 0.2 0.6]);
+a = gca();
+assert_checkequal(f.background, 34);
+assert_checkequal(a.background, 33);
+assert_checkequal(a.filled, "off");
+assert_checkequal(size(f.color_map), [34, 3]);
+assert_checkequal(f.color_map(34,:), [0.5 0.2 0.6]);
+delete(f);
+