b700a2433193f05cd9113378cb86bb6571b7b80e
[scilab.git] / scilab / modules / graphics / macros / getfont.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
10 function [fontId,fontSize]=getfont(S,v1)
11   
12 //returns the clicked font id and font size. 
13   fontId=[];fontSize=[];
14   
15   if exists('S','local')==0 then S="a";end
16   if type(S)<>10 then
17     error(msprintf(gettext("%s: Wrong type for input argument #%d: String array expected.\n"), "getfont", 1));
18   end
19   S=part(S(1),1)
20   
21   win=max(winsid()+1);
22   f=scf(win);
23   
24   //fnts=xlfont();nf=size(find(fnts<>''),'*')-1 
25   fontnames=['Courrier';'Symbol';'Times';'Times Italic';
26              'Times Bold';'Times Bold Italic';
27              'Helvetica';'Helvetica Italic';
28              'Helvetica Bold';'Helvetica Bold Italic'];
29
30   nf=size(fontnames,'*')
31
32   font_sz=[0.5 1:6];
33   nz=size(font_sz,'*'); //number of font sizes
34 //Disabling standard menus
35
36   addmenu(win,'Ok',list(2,'menu_ok'));
37   addmenu(win,'Cancel',list(2,'menu_cancel'));
38   delmenu(win,"&?")
39   delmenu(win,_("&Edit"))
40   delmenu(win,_("&Tools"))  
41   delmenu(win,_("&File"))
42   toolbar(win,'off')
43   x=2;
44   red=addcolor([1 0 0]);
45     W1=6 //first column width
46   H1=2 // first row height
47   H=3.5;W=2.5;
48
49   Hdl=drawchart();
50   
51   done=%f;
52   
53   deff('menu_ok(k,gwin)','done=%t;k=[-fontId,fontSize];')
54   deff('menu_cancel(k,gwin)','done=%t;k=[];')
55     
56   if exists('font','local') then
57     fontId=max(0,min(nf,font(1)))
58     fontSize=max(0,min(5,font(2)))
59     selected=fontId+nf*fontSize+1;
60     t=Hdl(selected); t.foreground=red;
61   else
62     selected=0
63   end
64   
65   while %t
66     
67     [c_i,cx,cy,cw,str]=xclick();
68     
69     if c_i==-2 then
70       if strindex(str,"menu_ok")==1 then xdel(win);break,end
71       if strindex(str,"menu_cancel")==1 then xdel(win);break,end
72       
73     elseif c_i==-1000 then
74       fontId=[];
75       fontSize=[];
76       break,
77       
78     elseif c_i>=0 & c_i<=12 then
79       if selected<>0 then 
80         t=Hdl(selected)
81         t.foreground=-1;
82       end
83       
84       fontId=max(0,min(nf,floor((cy)/H)));
85       fontSize=max(0,min(nz,floor((cx-W1)/W)));
86       selected=fontId+nf*fontSize+1;
87       t=Hdl(selected);t.foreground=red;
88
89       xinfo('You have chosen fontId = '+string(fontId)+' , fontSize =  '+string(fontSize))
90       
91     elseif c_i>=32 & c_i<1032 then
92       S=ascii(c_i)
93       drawlater();Hdl.text=S;drawnow()
94     elseif c_i>=1032
95       S=ascii(c_i-1000)
96       drawlater();Hdl.text=S;;drawnow()
97     end
98   end
99   
100   if strindex(str,"menu_cancel")==1 then
101     fontId=[];
102     fontSize=[];
103   end
104   
105   if argn(1)<2 then
106     fontId=[fontId,fontSize];
107   end
108
109 endfunction
110
111 function Hdl=drawchart()
112   f=gcf();
113   a=gca();
114   drawlater()
115   a.margins([1:2 4])=0.1
116   a.data_bounds=[0 0;W1+nz*W H1+(nf)*H]
117   a.title.text=["Click to select font Id  and font size";
118                 "or press a key to select a character"];
119   
120   // Drawing first column
121   for k=0:nf-1
122     xstringb(0,H*k,fontnames(k+1)+' ('+string(k)+')',W1,H)
123     xrect(0, H*(k+1), W1, H);
124   end
125   
126   // Drawing first row
127   for l=0:nz-1
128     xstringb(W1+l*W,(nf)*H ,string(font_sz(l+1)),W,H1)
129     xrect(W1+l*W, H1+(nf)*H, W, H1);
130   end
131   
132   // drawing top left corner
133   xrect(0,H1+(nf)*H,W1,H1);
134   xstringb(0, (nf)*H,"Id (index)\Size",W1,H1)
135   
136   Hdl=[]
137   for k=-(0:nf-1)
138     Hdll=[]
139     for x=1:nz
140       xstringb(W1+(x-1)*W,-H*k,S,W,H)
141       t=gce();t.font_size=font_sz(x);t.font_style=-k
142       Hdll=[Hdll t]
143     end
144     Hdl=[Hdl;Hdll]
145   end
146
147   glue(Hdl)
148   drawnow()
149   
150 endfunction