Update for localisation + obsolete functions replaced
[scilab.git] / scilab / modules / graphics / macros / getcolor.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) INRIA
3 // This file must be used under the terms of the CeCILL.
4 // This source file is licensed as described in the file COPYING, which
5 // you should have received as part of this distribution.  The terms
6 // are also available at    
7 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
8
9 function [c] = getcolor(Title,cini)
10
11 [lhs,rhs] = argn(0)
12
13 if rhs==0 then
14   Title = "";
15   cini = 1;
16 elseif rhs==1 then
17   if type(Title)~=10 then
18     error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n")), "getcolor", 1);
19   end
20   if size(Title, "*")~=1 then
21     error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n")), "getcolor", 1);
22   end
23   cini = 1;
24 elseif rhs==2 then
25   if type(Title)~=10 then
26     error(msprintf(gettext("%s: Wrong type for input argument #%d: A string expected.\n")), "getcolor", 1);
27   end
28   if size(Title, "*")~=1 then
29     error(msprintf(gettext("%s: Wrong size for input argument #%d: A string expected.\n")), "getcolor", 1);
30   end
31   if type(cini)~=1 then
32     error(msprintf(gettext("%s: Wrong type for input argument #%d: A real expected.\n")), "getcolor", 2);
33   end
34   if size(cini, "*")~=1 then
35     error(msprintf(gettext("%s: Wrong size for input argument #%d: A real expected.\n")), "getcolor", 2);
36   end
37 else
38   error(msprintf(gettext("%s: Wrong number of input arguments: %d to %d expected.\n")), "getcolor", 2, 0, 2);
39 end
40
41 if winsid()~=[] then
42   cmap = get(gcf(),"color_map");
43   curwin = xget("window");
44 else
45   cmap = []
46   curwin = []
47 end;
48 win = max(winsid()+1);
49 xset("window",win);
50
51 sdf;
52 sda;
53 f = gcf();
54 if cmap~=[] then
55   f.color_map = cmap;
56 else
57   cmap = f.color_map;
58 end;
59
60 N = size(cmap,1);
61 wdim = [1,1];
62 r = wdim(1)/wdim(2);
63 n = round(sqrt(N/r));
64 m = int(n*r);
65 H = m*45; // These numbers set the size of the getcolor window
66 W = n*45;
67 f.figure_size = [H,W];
68
69 toolbar(win, "off")
70
71 delmenu(win,"&File")
72 delmenu(win,"&Tools")
73 delmenu(win,"&Edit")
74 delmenu(win,"&?")
75
76 dx = wdim(1)/m;
77 dy = wdim(2)/n;
78 x = -dx;
79 y = wdim(2);
80 R = [0;0;dx*0.95;dy*0.95];
81 rects = [];
82 for k = 1:N
83   if modulo(k,n)==1 then
84     x = x+dx;
85     y = wdim(2);
86   end;
87   rects = [rects,R+[x;y;0;0]];
88   y = y-dy;
89 end;
90
91 if Title~="" then
92   xsetech([-1/8,0,1+1/6,1+1/6-1/8],[0,0,wdim(1),wdim(2)]);
93 else
94   xsetech([-1/8,-1/8,1+1/6,1+1/6],[0,0,wdim(1),wdim(2)]);
95 end;
96 // rectangles with the colors
97 xrects(rects,1:N);
98 // frame around the colors
99 r = m*n-N;
100 ddx = 0.05*dx;
101 ddy = 0.05*dy;
102 if r==0 then
103   xpoly([-ddx,1,1,-ddx],[0,0,1+ddy,1+ddy],"lines",1);
104 else
105   xpoly([-ddx,1-1/n,1-1/n,1,1,-ddx],[0,0,r/m,r/m,1+ddy,1+ddy],"lines",1);
106 end;
107
108 // title
109 if Title~="" then
110   xtitle(Title);
111   t = gce();
112   t.font_size = 4;
113   t.font_style = 6;
114 end;
115
116 k1 = min(max(cini,1),N);
117 xrects(rects(eye(),k1),-k1);
118 e = gce();
119 rector = e.children;
120 rector.thickness = 4;
121 rector.foreground = color(255*(1-cmap(k1,1)),255*(1-cmap(k1,2)),255*(1-cmap(k1,3)));
122
123 //add a menu and its callback
124 done = %f;
125 Ok = "execstr("+gettext("Ok")+"_"+string(win)+"(1))";
126 Cancel = "execstr("+gettext("Cancel")+"_"+string(win)+"(1))";
127
128 addmenu(win, gettext("Ok"));
129 addmenu(win, gettext("Cancel"));
130
131 c_i = 0;
132 c = cini;
133 while %t
134   str = '';
135   [c_i,cx,cy,cw,str] = xclick();
136   if c_i==(-2) then
137     if str==Ok then k = k1; c = k; break;end;
138     if str==Cancel then k = []; c = []; break;end;
139   end;
140   if c_i==(-100) then k = []; break;end;
141   mc = int(cx/dx)+1;
142   nc = n-int(cy/dy);
143   k = (mc-1)*n+nc; 
144   if or(c_i==[0,3])&k<=N&k>0 then
145     if k1~=0 then
146       move(rector,[rects(1,k)-rects(1,k1),rects(2,k)-rects(2,k1)]);
147       rector.foreground = color(255*(1-cmap(k,1)),255*(1-cmap(k,2)),255*(1-cmap(k,3)));
148     end;
149     k1 = k;
150     name = rgb2name(cmap(k,eye())*255);
151     xinfo(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)+"""");
152   
153   
154   end;
155 end;
156
157 xdel(win);
158 if curwin~=[] then
159   xset("window",curwin);
160 end;
161
162
163 endfunction
164