0ba27069e81a96178941214f4098fedf813e70cf
[scilab.git] / scilab / modules / graphics / macros / getlinestyle.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 k=getlinestyle()
11 [lhs,rhs]=argn(0)
12 win=max(winsid()+1)
13 scf(win);
14
15 toolbar(win, "off");
16 delmenu(win,_("&File")); 
17 delmenu(win,_("&Edit"));
18 delmenu(win,_("&Tools"));
19 delmenu(win,_("&?"));
20
21 //Event handler and menu definition
22 deff('evh(gwin,x,y,ibut)',..
23      ['global pos done'
24       'if or(ibut==(0:5)) then '
25       '   [x,y]=xchange(x,y,''i2f'')'
26       '   pos=[x,y],done=0,'
27       'end'
28       'if ibut==-1000 then ,done=3,end'
29      ])
30 deff('menu_ok(k,gwin)','global done;done=1')
31 deff('menu_cancel(k,gwin)','global done;done=2')
32
33
34 f=gcf();
35 cur_draw_mode = f.immediate_drawing;
36 f.immediate_drawing='off'
37 a=gca();
38 a.axes_visible='off';
39 a.data_bounds=[0 0;5 12];
40 a.font_size=3;
41 a.title.text = "Select line style k by clicking in rectangle or line";
42 a.title.font_size=3;
43
44 x=(1:5)';
45 R=[]
46 for k=1:6
47   xstringb(0,2*k-2,"k = "+string(k),1,2);
48   s=gce();
49   s.font_size=3;
50   xrect(0, 2*k, 1, 2);R=[R,gce()]
51 end
52 a.thickness=2
53 for k=1:6
54   xpoly(x,2*k*ones(x) - 1);
55   p=gce();
56   p.mark_mode = 'off';
57   p.line_style=k;
58 end
59 f.immediate_drawing=cur_draw_mode;
60
61 global pos done;done=-1;
62 ksel=1;
63 seteventhandler('evh')
64 addmenu(win,'Ok',list(2,'menu_ok'));
65 addmenu(win,'Cancel',list(2,'menu_cancel'));
66
67 f.pixmap='on';
68
69 k1=[]; //default
70
71 // to be sure that it is shown before the loop
72 show_pixmap();
73
74 while %t
75   select done
76   case 0 then //click somehere
77     cx = pos(1);
78     cy = pos(2);
79     k1 = ceil(cy/2);k1=min(k1,6);k1=max(1,k1);
80     R(ksel).thickness=1;
81     R(k1).thickness=3;
82     ksel=k1
83     show_pixmap()
84   case 1 then  // ok button clicked
85     k=k1;break,
86   case 2 then   // cancel button clicked
87     k=[];break,
88   case 3 then //the window has been blosed
89     k=[],
90     clearglobal pos done
91     return
92   end
93   xpause(100)
94 end
95 seteventhandler('')
96 delete(f);
97 clearglobal pos done
98 endfunction