17dcead6a92cce6b9b1b2b27be8cb1420d814023
[scilab.git] / scilab / modules / graphics / macros / getmark.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 [k1,k2]=getmark()
11   
12 //returns the clicked markid (with a minus sign) 
13 //and mark size. 
14   [lhs,rhs]=argn(0)
15   k1=[];k2=[];
16   win=max(winsid()+1);
17   f=scf(win)
18
19   nbMarks = 14;
20   nbSizes = 6;
21   
22   delmenu(win,_("&File")); 
23   delmenu(win,_("&Edit"));
24   delmenu(win,_("&Tools"));
25   delmenu(win,_("&?")); 
26
27   toolbar(win, "off");
28   
29   //Event handler and menu definition
30   
31   deff('evh(gwin,x,y,ibut)',..
32        ['global pos done'
33         'if or(ibut==(0:5)) then '
34         '   [x,y]=xchange(x,y,''i2f'')'
35         '   pos=[x,y],done=0,'
36         'end'
37         'if ibut==-1000 then ,done=3,end'
38        ])
39   
40   deff('menu_ok(k,gwin)','global done;done=1')
41   deff('menu_cancel(k,gwin)','global done;done=2')
42   drawlater()   
43   f.axes_size = [610,610]
44   f.auto_resize='off'
45   
46   a=gca();
47   
48   a.axes_visible='off';
49   a.data_bounds=[0 0;10 30];
50   a.font_size=2;
51   a.mark_size_unit="tabulated"
52   a.margins=[0.04 0.06 0.05 0.1];
53   
54   a.title.text = " Select mark style k and mark size l";
55   a.title.font_size = 3;
56   for k=0:nbMarks
57     xstringb(0,2*k - 2,"k = "+msprintf("%2d",k),1.5,2)
58     xrect(0, 2*k, 1.5, 2);
59   end
60   
61   for l=1:nbSizes
62     xstringb(l*1.5, 28,"l = "+msprintf("%2d",l-1),1.5,2)
63     xrect(l*1.5, 30, 1.5, 2);
64   end
65   
66   H=[]
67   for x=1:nbSizes
68     Hc=[]
69     for k=(0:nbMarks)
70       xpoly(0.75+x*1.5,2*k - 1,'marks');
71       p=gce();p.mark_size=x-1;p.mark_style=k;
72       Hc=[Hc;p];
73     end
74     H=[H Hc]
75   end
76   drawnow()
77   seteventhandler('evh')
78   
79   addmenu(win,'Ok',list(2,'menu_ok'));
80   addmenu(win,'Cancel',list(2,'menu_cancel'));
81   
82   global pos done;done=-1;
83   ksel=9;xsel=1;
84   //H(k1+1,(k2+1)).mark_foreground=5;
85   while %t
86     select done
87     case 0 then //click somehere
88       seteventhandler('');drawlater()
89       cx=pos(1);cy=pos(2)
90       k1=round((cy + 1)/2);k1=min(k1,nbMarks);k1=max(0,k1);
91       k2=round((cx + 0.75)/1.5);k2=k2-2;k2=min(k2,nbSizes - 1);k2=max(0,k2);
92       H(ksel+1,xsel+1).mark_foreground=-1;
93       H(k1+1,k2+1).mark_foreground=5;
94       ksel=k1;xsel=k2;
95       done=-1;
96       xinfo('You have chosen mark_style = '+string(k1)+', mark_size = '+string(k2))
97       drawnow();seteventhandler('evh')
98     case 1 then  // ok button clicked
99       k1=k1;k=[k1,k2];break,
100     case 2 then   // cancel button clicked
101       k=[];break,
102     case 3 then //the window has been blosed
103       k=[],if argn(1)==1 then k1=k,end
104       clearglobal pos done
105       return
106     end
107     xpause(100)
108   end
109   if argn(1)==1 then k1=k,end
110   seteventhandler('')
111   xdel(win)
112   clearglobal pos done
113 endfunction