* Bug #14359 fixed - Black Hole demo updated. Stop and Clear buttons did not have...
[scilab.git] / scilab / modules / differential_equations / demos / flow / create_interface.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) 2014 - Scilab Enterprises - Pierre-Aime Agnel
4 //
5 // This file is distributed under the same license as the Scilab package.
6 //
7
8 function fig_handle = createMainWindow(axes_size, fig_name, tag_name)
9     fig_handle = figure( ...
10         "dockable", "off", ...
11         "infobar_visible", "off", ...
12         "toolbar_visible", "off", ...
13         "toolbar", "none", ...
14         "menubar_visible", "off", ...
15         "menubar", "none", ...
16         "default_axes", "on", ...
17         "layout", "none", ...
18         "visible", "off", ...
19         "immediate_drawing", "off", ...
20         "background", -2, ...
21         "figure_position", [0 0], ...
22         "axes_size", axes_size, ...
23         "figure_name", fig_name, ...
24         "tag", tag_name);
25
26     //The plot will be in the top 3/4 of the figure
27     a = gca();
28     a.axes_bounds = [0 0 1 2/3];
29     a.tight_limits = "on";
30 endfunction
31
32 //Gui Creation: Plot zone and Param zone createion
33 //Plot zone is twice the height of Param zone
34 function [plot_frame, param_frame, button_frame] = create_gui(fig_handle)
35     //Set the layout for the figure
36     set(fig_handle, "layout", "gridbag");
37     plot_frame = [];
38
39     c = createConstraints("gridbag", [1 1 1 1], [1 1], "vertical", "left");
40     //create false panel on the left to occupy the 3/4 of the screen (figure plot)
41    empty_frame = uicontrol(fig_handle, "style", "frame", "constraints", c);
42
43     c = createConstraints("gridbag", [1 2 1 1], [1 0.25], "both", "lower", [0 0], [0 150]);
44     u = uicontrol(fig_handle, ...
45         "style", "frame", ...
46         "backgroundcolor", [1 1 1], ...
47         "layout", "border", ...
48         "constraints", c);
49
50     c = createConstraints("border", "right", [20 0]);
51     left = uicontrol(u, "style", "frame", "backgroundcolor", [1 1 1], "constraints", c);
52     c = createConstraints("border", "left", [20 0]);
53     right = uicontrol(u, "style", "frame", "backgroundcolor", [1 1 1], "constraints", c);
54
55     //Border for the simulation Params
56     b_f_simuParams = createBorderFont("", 18);
57     b_l_simuParams = createBorder("line", "navy", 2);
58     b_simuParams   = createBorder("titled", b_l_simuParams, _("Simulation Parameters"), "center", "top", b_f_simuParams, "navy");
59
60     param_frame = uicontrol(u, ...
61         "style", "frame", ...
62         "backgroundcolor", [1 1 1], ...
63         "border", b_simuParams, ...
64         "tag", "param_frame");
65
66     c = createConstraints("border", "bottom", [0 50]);
67     button_frame = uicontrol(u, ...
68         "style", "frame", ...
69         "backgroundcolor", [1 1 1], ...
70         "constraints", c, ...
71         "tag", "button_frame");
72
73 endfunction
74
75 //Creates the parameter zone for all sim_param objects in the param_list
76 function create_param_zone(param_frame, param_list)
77     //Set the layout for the param frame to a grid of the correct size 2 columns
78     param_frame.layout = "gridbag";
79     depth = ceil(size(param_list) / 2);
80
81     //Creates the text and slider for each parameter
82     for i = [1:depth]
83         for j = [1 5]
84             //Text on the left: name of the param
85             if i == depth & j == 5 & (depth - size(param_list) / 2) > %eps
86                 c = createConstraints("gridbag", [6 i 4 1], [1 1], "both", "left", [0 5], [100 0])
87                 empty_frame = uicontrol(f, "style", "frame", "constraints", c, "horizontalalignment", "left");
88             else
89                 if j == 1
90                     param = param_list(i)
91                 else
92                     param = param_list(depth + i)
93                 end
94
95                 c = createConstraints("gridbag", [j + 1 i 1 1], [1 1], "both", "left", [0 5], [75 0])
96                 name_p = uicontrol(param_frame, ...
97                     "Style", "text", ...
98                     "String", param.name + " ", ...
99                     "BackgroundColor", [1 1 1], ...
100                     "horizontalalignment", "right", ...
101                     "constraints", c, ...
102                     "tag", "text_" + param.tag);
103
104                 c = createConstraints("gridbag", [j + 2 i 1 1], [1 0], "both", "center", [0 5], [100 60])
105                 slider_p = uicontrol(param_frame, ...
106                     "Style", "slider", ...
107                     "Value", param.default, ...
108                     "Min", param.range(1), ...
109                     "Max", param.range(2), ...
110                     "callback", "change_" + param.tag + "()", ...
111                     "constraints", c, ...
112                     "horizontalalignment", "center", ...
113                     "backgroundcolor", [1 1 1], ...
114                     "tag", "slider_" + param.tag);
115
116                 c = createConstraints("gridbag", [j + 3 i 1 1], [1 1], "both", "center", [0 5], [25 0])
117                 value_p = uicontrol(param_frame, ...
118                     "Style", "text", ...
119                     "String", string(param.default), ...
120                     "BackgroundColor", [1 1 1], ...
121                     "constraints", c, ...
122                     "foregroundcolor", [0 0 1], ...
123                     "horizontalalignment", "center", ...
124                     "tag", "value_" + param.tag);
125
126                 c = createConstraints("gridbag", [j + 4 i 1 1], [1 1], "both", "right", [0 5], [25 0])
127                 unite_p = uicontrol(param_frame, ...
128                     "Style", "text", ...
129                     "String", param.unit, ...
130                     "BackgroundColor", [1 1 1], ...
131                     "constraints", c, ...
132                     "horizontalalignment", "left", ...
133                     "tag", "unite_" + param.tag);
134             end
135         end
136     end
137 endfunction
138
139 function create_buttons(button_frame)
140     //Adds buttons in the middle of the frame
141     set(button_frame, "layout", "gridbag");
142     set(button_frame, "layout_options", createLayoutOptions("gridbag"));
143     c = createConstraints("gridbag", [1 1 1 1], [1 0], "horizontal", "center");
144
145     esthetic = uicontrol(button_frame, ...
146         "style", "frame", ...
147         "backgroundcolor", [1 1 1], ...
148         "constraints", c);
149
150     //Place each button inside buttons
151     c_buttons = createConstraints("gridbag", [2 1 1 1], [1 0], "both", "center");
152     start_button = uicontrol(button_frame, ...
153         "Style", "pushbutton", ...
154         "String", "Start", ...
155         "Fontsize", 14, ...
156         "callback", "start_simu()", ...
157         "constraints", c_buttons, ...
158         "tag", "start_button");
159
160     c_buttons = createConstraints("gridbag", [3 1 1 1], [1 0], "both", "center");
161     esthetic = uicontrol(button_frame, ...
162         "style", "frame", ...
163         "backgroundcolor", [1 1 1], ...
164         "constraints", c_buttons);
165
166     c_buttons = createConstraints("gridbag", [4 1 1 1], [1 0], "both", "center");
167
168     stop_button = uicontrol(button_frame, ...
169         "Style", "pushbutton", ...
170         "String", "Stop", ...
171         "Fontsize", 14, ...
172         "callback", "stop_simu", ...
173         "callback_type", 10, ...
174         "constraints", c_buttons, ...
175         "tag", "stop_button");
176
177     c_buttons = createConstraints("gridbag", [5 1 1 1], [1 0], "both", "center");
178     esthetic = uicontrol(button_frame, ...
179         "style", "frame", ...
180         "backgroundcolor", [1 1 1], ...
181         "constraints", c_buttons);
182
183     c_buttons = createConstraints("gridbag", [6 1 1 1], [1 0], "both", "center");
184     clear_button = uicontrol(button_frame, ...
185         "Style", "pushbutton", ...
186         "String", "Clear", ...
187         "Fontsize", 14, ...
188         "callback", "clear_simu", ...
189         "callback_type", 10, ...
190         "constraints", c_buttons, ...
191         "tag", "clear_button");
192
193     //esthetic panel on the right
194     c = createConstraints("gridbag", [7 1 1 1], [1 0], "both", "right");
195     esthetic = uicontrol(button_frame, ...
196         "style", "frame", ...
197         "backgroundcolor", [1 1 1], ...
198         "constraints", c);
199 endfunction