* Bug 15089 fixed: getcolor GUI cleared and used the current figure 22/19222/5
Samuel GOUGEON [Wed, 22 Mar 2017 19:38:05 +0000 (20:38 +0100)]
  http://bugzilla.scilab.org/15089
  - Bug fix
  - speed up the display of the GUI
  - compact color's infos in the status bar to make them readable even
    when the GUI is small
  - fixes a ".."+[]+".." warning when the picked color has no name.

  Was correct when commited @ https://codereview.scilab.org/#/c/18308
  but not taken into account in the final commit.

Change-Id: I7bf5d8c1f684c4c0bdd7a938f9afa41aecc76e79

scilab/CHANGES.md
scilab/modules/graphics/macros/getcolor.sci

index 675ee9f..925cdce 100644 (file)
@@ -364,16 +364,12 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 ### Bugs fixed in 6.0.1:
 * [#4276](http://bugzilla.scilab.org/show_bug.cgi?id=4276): `strsubst` replaced the first occurence in regex mode.
 * [#5278](http://bugzilla.scilab.org/show_bug.cgi?id=5278): obsolete `xset()` was still used in scripts, macros, tests and help pages.
-<<<<<<< HEAD
 * [#8297](http://bugzilla.scilab.org/show_bug.cgi?id=8297): `cat` slowness was exponential, crippling, and made it useless.
 * [#9519](http://bugzilla.scilab.org/show_bug.cgi?id=9519): The console menu `File -> Open a file` opened any file in Scinotes. Binary files like .zcos blocked Scinotes.
 * [#11756](http://bugzilla.scilab.org/show_bug.cgi?id=11756): In the categories of the ATOMS GUI, actually available modules might be not listed.
 * [#12195](http://bugzilla.scilab.org/show_bug.cgi?id=12195): `generateBlockImage` sometimes changed the current graphic driver.
-* [#12771](http://bugzilla.scilab.org/show_bug.cgi?id=12771): xcosPalGenerateAllIcons help example was broken.
-=======
 * [#12372](http://bugzilla.scilab.org/show_bug.cgi?id=12372): The `mode` function was poorly documented.
-* [#12771](http://bugzilla.scilab.org/show_bug.cgi?id=12771): xcosPalGenerateAllIcons help example was broken
->>>>>>> e8fcc0dce30... * Bug 12330: mode() was poorly documented. Page overhauled
+* [#12771](http://bugzilla.scilab.org/show_bug.cgi?id=12771): xcosPalGenerateAllIcons help example was broken.
 * [#13592](http://bugzilla.scilab.org/show_bug.cgi?id=13592): In an axes in a uicontrol frame, setting a `legend` interactively might not follow the mouse accurately.
 * [#13900](http://bugzilla.scilab.org/show_bug.cgi?id=13900): `nanmin` and `nanmax` were useless duplicates of `min` and `max`
 * [#14254](http://bugzilla.scilab.org/show_bug.cgi?id=14254): When installing an ATOMS module that is not locally registered and available, the error message was unclear.
@@ -413,6 +409,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#15070](http://bugzilla.scilab.org/show_bug.cgi?id=15070): `bitset` failed when the bit position is an encoded integer.
 * [#15072](http://bugzilla.scilab.org/show_bug.cgi?id=15072): The context was stored as a root diagram attribute instead of being stored on each Superblock layer.
 * [#15079](http://bugzilla.scilab.org/show_bug.cgi?id=15079): When all children of a graphic handle have not the same number of sub-children, any vectorized extraction or insertion in subchildren failed.
+* [#15089](http://bugzilla.scilab.org/show_bug.cgi?id=15089): The `getcolor` GUI cleared and used the current figure.
 * [#15107](http://bugzilla.scilab.org/show_bug.cgi?id=15107): failed to build with ocaml 4.04.0.
 * [#15117](http://bugzilla.scilab.org/show_bug.cgi?id=15117): Imbricated optim/leastsq/lsqrsolve/fsolve calls either crashed or returned errors
 * [#15119](http://bugzilla.scilab.org/show_bug.cgi?id=15119): Inequality comparisons between complex-encoded real numbers failed.
index ccaea69..19a4282 100644 (file)
@@ -1,5 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2017 - Samuel GOUGEON
+//
 // Copyright (C) 2012 - 2016 - Scilab Enterprises
 //
 // This file is hereby licensed under the terms of the GNU GPL v2.0,
@@ -18,27 +20,34 @@ function [c] = getcolor(Title,cini)
         cini = 1;
     elseif rhs==1 then
         if type(Title)~=10 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"), "getcolor", 1));
+            msg = gettext("%s: Wrong type for input argument #%d: string expected.\n")
+            error(msprintf(msg, "getcolor", 1));
         end
         if size(Title, "*")~=1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"), "getcolor", 1));
+            msg = gettext("%s: Wrong size for input argument #%d: string expected.\n")
+            error(msprintf(msg, "getcolor", 1));
         end
         cini = 1;
     elseif rhs==2 then
         if type(Title)~=10 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: string expected.\n"), "getcolor", 1));
+            msg = gettext("%s: Wrong type for input argument #%d: string expected.\n")
+            error(msprintf(msg, "getcolor", 1));
         end
         if size(Title, "*")~=1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: string expected.\n"), "getcolor", 1));
+            msg = gettext("%s: Wrong size for input argument #%d: string expected.\n")
+            error(msprintf(msg, "getcolor", 1));
         end
         if type(cini)~=1 then
-            error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n"), "getcolor", 2));
+            msg = gettext("%s: Wrong type for input argument #%d: A real expected.\n")
+            error(msprintf(msg, "getcolor", 2));
         end
         if size(cini, "*")~=1 then
-            error(msprintf(gettext("%s: Wrong size for input argument #%d: A real expected.\n"), "getcolor", 2));
+            msg = gettext("%s: Wrong size for input argument #%d: A real expected.\n")
+            error(msprintf(msg, "getcolor", 2));
         end
     else
-        error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n"), "getcolor", 2, 0, 2));
+        msg = gettext("%s: Wrong number of input arguments: %d to %d expected.\n")
+        error(msprintf(msg, "getcolor", 2, 0, 2));
     end
 
     if winsid()~=[] then
@@ -51,17 +60,12 @@ function [c] = getcolor(Title,cini)
     end;
 
     // create the window for getcolor
-    
-    win = max(winsid());
-    if isempty(win) then 
-        win = 1;
-    end
-        
-    scf(win);
+    fig = scf();
+    fig.visible = "off";
+    win = fig.figure_id;
 
-    sdf;
-    sda;
-    fig = gcf();
+    sdf;    // quite agressive. Not sure it is actually useful
+    sda;    // same remark
     if cmap~=[] then
         fig.color_map = cmap;
     else
@@ -79,10 +83,10 @@ function [c] = getcolor(Title,cini)
 
     toolbar(win, "off")
 
-    delmenu(win,gettext("&File"))
-    delmenu(win,gettext("&Tools"))
-    delmenu(win,gettext("&Edit"))
-    delmenu(win,gettext("&?"))
+    delmenu(win, gettext("&File"))
+    delmenu(win, gettext("&Tools"))
+    delmenu(win, gettext("&Edit"))
+    delmenu(win, gettext("&?"))
 
     dx = wdim(1)/m;
     dy = wdim(2)/n;
@@ -138,6 +142,7 @@ function [c] = getcolor(Title,cini)
 
     addmenu(win, gettext("Ok"));
     addmenu(win, gettext("Cancel"));
+    fig.visible = "on";
 
     c_i = 0;
     c = cini;
@@ -165,12 +170,13 @@ function [c] = getcolor(Title,cini)
             end;
             k1 = k;
             name = rgb2name(cmap(k,eye())*255);
-            fig.info_message = ..
-            gettext("Color number")+" "+string(k)+": R="+string(floor(cmap(k,1)*255))+" G="+string(floor(cmap(k,2)*255))+" B="+string(floor(cmap(k,3)*255))+" "+gettext("Name")+"="""+name(1)+"""";
-
-
-        end;
-    end;
+            txt = msprintf("RGB(%d)=[%d %d %d]",k,cmap(k,1:3)*255);
+            if name~=[]
+                txt = txt + " : """ + name(1) + """"
+            end
+            fig.info_message = txt
+        end
+    end
 
     if (c_i <> windowCloseButton) then
         delete(fig);