8c63299553a44b3fa46a9de487b2a50299da21c2
[scilab.git] / scilab / modules / gui / macros / figure.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2005 - INRIA - Allan CORNET
3 // Copyright (C) 2008 - INRIA - Vincent COUVERT (Java version of uicontrols)
4 //
5 // This file must be used under the terms of the CeCILL.
6 // This source file is licensed as described in the file COPYING, which
7 // you should have received as part of this distribution.  The terms
8 // are also available at
9 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10
11 function h=figure(varargin)
12     // -----------------------------------------------------------
13     function h = createOrSetFigure(numOrHandle)
14         // Vincent COUVERT - INRIA 2008
15         // This function create a figure or set if if already exists
16         // The figure background is set to default for new figures
17
18         if isempty(numOrHandle)
19             alreadyExists = %F;
20         elseif type(numOrHandle)==1 // Single value
21             alreadyExists = ~isempty(find(winsid()==numOrHandle));
22         else // Handle
23             alreadyExists = ~isempty(find(winsid()==get(numOrHandle,"figure_id")));
24         end
25
26         if isempty(numOrHandle)
27             h = scf();
28         else
29             h=scf(numOrHandle);
30         end
31
32         setFigDefaultProperties(alreadyExists);
33
34     endfunction
35     // -----------------------------------------------------------
36
37     // -----------------------------------------------------------
38     function sciFigProperty = getFigureProperty(tkFigProperty)
39         // Vincent COUVERT - INRIA 2008
40         // Get the Java figure property corresponding to the TK figure property
41
42         if strcmpi(tkFigProperty, "backgroundcolor") == 0 then
43             sciFigProperty = "background";
44         elseif strcmpi(tkFigProperty, "foregroundcolor") == 0 then
45             sciFigProperty = "foreground";
46         else
47             sciFigProperty = tkFigProperty;
48         end
49     endfunction
50     // -----------------------------------------------------------
51
52     // -----------------------------------------------------------
53     function sciPropertyValue = getPropertyValue(tkFigProperty, tkPropertyValue)
54         // Vincent COUVERT - INRIA 2008
55         // Get the Java property value corresponding to the TK property value
56
57         if strcmpi(tkFigProperty, "backgroundcolor") == 0 then
58             sciPropertyValue = addcolor(tkPropertyValue);
59         elseif strcmpi(tkFigProperty, "foregroundcolor") == 0 then
60             sciPropertyValue = addcolor(tkPropertyValue);
61         else
62             sciPropertyValue = tkPropertyValue;
63         end
64     endfunction
65     // -----------------------------------------------------------
66
67     // -----------------------------------------------------------
68     function setFigDefaultProperties(alreadyExists)
69         // Jean-Baptiste SILVY - Digiteo 2008
70         // Set default properties for the lastly created figure.
71         // These properties ensure that the 3D canvas won't be created
72         // argument already exists is false if the figure has just been created.
73
74         defaultColor = [0.8 0.8 0.8];
75         curFig = gcf();
76         axes = gca();
77
78         set(curFig, "immediate_drawing", "off"); // to avoid canvas creation
79
80         if ~alreadyExists
81             // Set the default background if figure has just been created (compatibility with versions < 5.0)
82             set(curFig,"background", addcolor(defaultColor));
83             set(axes, "background", addcolor(defaultColor)); // same as figure
84         end
85
86         set(axes, "filled", "off"); // transparent axes so no need to display them
87         set(axes, "axes_visible", "off");
88
89         set(curFig, "immediate_drawing", "on"); // we can draw now
90
91     endfunction
92     // -----------------------------------------------------------
93
94     Rhs=length(varargin);
95
96     if (Rhs == 0) then
97         // Create a new graphic window
98         h = scf();
99         setFigDefaultProperties(%f);
100     else
101         if (Rhs == 1) then
102
103             if size(varargin(1), "*")==1 then
104                 // Create a new graphic window or set it (if already exists)
105                 h = createOrSetFigure(varargin(1));
106             else
107                 error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
108             end
109
110         else
111
112             if (modulo(Rhs,2)==0) then
113                 // Even number of input arguments
114
115                 // Create a new graphic window or set it (if already exists)
116                 h = createOrSetFigure([]);
117
118                 // Set all properties
119                 for i=1:2:Rhs
120                     set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
121                 end
122
123             else
124                 // Odd number of input arguments
125                 if size(varargin(1), "*")==1 then
126                     // Create a new graphic window or set it (if already exists)
127                     h = createOrSetFigure(varargin(1));
128
129                     // Set all properties
130                     for i=2:2:Rhs
131                         set(h, getFigureProperty(varargin(i)), getPropertyValue(varargin(i),varargin(i+1)));
132                     end
133                 else
134                     error(msprintf(gettext("%s: Wrong size for input argument #%d: A ''Figure'' handle or a real expected.\n")), "figure", 1);
135                 end
136             end
137         end
138     end
139
140 endfunction
141 // -----------------------------------------------------------
142