rewrite of atomsGui
[scilab.git] / scilab / modules / atoms / macros / atoms_gui / atomsGui.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
3 // Copyright (C) 2010 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
4 // Copyright (C) 2012 - Samuel GOUGEON
5 // Copyright (C) 2012 - DIGITEO - Allan CORNET
6 //
7 // This file must be used under the terms of the CeCILL.
8 // This source file is licensed as described in the file COPYING, which
9 // you should have received as part of this distribution. The terms
10 // are also available at
11 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
12
13 function atomsGui()
14     function elements = getHomeListboxElements(LeftFixedWidth)
15         items_str  = [];
16         items_mat  = [];
17
18         installed  = atomsGetInstalled();
19         allModules   = get("atomsFigure", "userdata");
20         AxesSize = get("atomsFigure", "axes_size");
21         Width = (AxesSize(1) - LeftFixedWidth) - 20*2; //16*2 is icon size
22
23         for i=1:size(installed(:,1), "*")
24             MRVersionAvailable = atomsGetMRVersion(installed(i,1));
25             MRVersionInstalled = atomsVersionSort(atomsGetInstalledVers(installed(i,1)),"DESC");
26             MRVersionInstalled = MRVersionInstalled(1);
27             if atomsVersionCompare(MRVersionInstalled,MRVersionAvailable) == -1 then
28                 // Not up-to-date
29                 icon = "software-update-notinstalled.png";
30             else
31                 // The Most Recent Version is already installed
32                 icon = "software-update-installed.png";
33             end
34
35             if modulo(i,2) == 0 then
36                 background = "#eeeeee";
37             else
38                 background = "#ffffff";
39             end
40
41             thisItem = "<html>";
42             thisItem = thisItem + "<table width=""100%"" style=""background-color:" + background + ";color:#000000;"" ><tr>";
43             thisItem = thisItem + "<td><img src=""file:///"+SCI+"/modules/atoms/images/icons/16x16/status/"+icon+""" /></td>";
44             thisItem = thisItem + "<td width=""100%"">";
45             thisItem = thisItem + "  <div width=""" + string(Width) + """>";
46             thisItem = thisItem + "  <span style=""font-weight:bold;"">"+allModules(installed(i,1))(installed(i,2)).Title+" "+installed(i,2)+"</span><br />";
47             thisItem = thisItem + "  <span>"+allModules(installed(i,1))(installed(i,2)).Summary+"</span><br />";
48             thisItem = thisItem + "  <span style=""font-style:italic;"">"+installed(i,4)+"</span>";
49             thisItem = thisItem + "  </div>";
50             thisItem = thisItem + "</td>";
51             thisItem = thisItem + "</tr></table>";
52             thisItem = thisItem + "</html>";
53
54             items_str = [items_str ; thisItem];
55             items_mat = [items_mat ; "module" installed(i,1)];
56         end
57
58         if items_str==[] then
59             elements("items_str") = "";
60         else
61             elements("items_str") = items_str;
62         end
63
64         elements("items_mat") = items_mat;
65
66     endfunction
67
68     creation = %f;
69     if creation then
70         figwidth = 900;
71         figheight = 600;
72         defaultFontSize = 12;
73
74         f = figure( ...
75             "dockable", "off" , ...
76             "infobar_visible", "off", ...
77             "toolbar_visible", "off", ...
78             "toolbar", "none", ...
79             "menubar_visible", "on", ...
80             "menubar", "none", ...
81             "default_axes", "off", ...
82             "tag", "atomsFigure", ...
83             "visible", "off", ...
84             "icon", "software-update-notinstalled", ...
85             "position", [0 0 figwidth figheight], ...
86             "layout", "border");
87
88         h = uimenu( ...
89         "parent", f, ...
90         "tag", "home");
91
92         // Menu File:Installed Modules
93         uimenu( ...
94         "parent", h, ...
95         "callback", "cbAtomsGui", ...
96         "tag", "homeMenu");
97
98         // Menu File:Update List of Packages
99         uimenu( ...
100         "parent", h, ...
101         "callback", "xinfo(_(''Updating the list of packages. Please wait... until Done.''));" + ...
102         "atomsSystemUpdate();" + ...
103         "xinfo(_(''Update done.''));" , ...
104         "tag", "updatePackages");
105
106         // Menu File:Close
107         uimenu( ...
108         "parent", h, ...
109         "callback", "cbAtomsGui", ...
110         "tag", "closeMenu");
111
112         // Menu ?
113         h = uimenu( ...
114         "parent", f, ...
115         "tag", "help");
116
117         // Menu ?:Atoms Help...
118         uimenu( ...
119         "parent", h, ...
120         "callback", "cbAtomsGui", ...
121         "tag", "helpMenu");
122
123         MainFrame = uicontrol(f, ...
124             "Style", "frame", ...
125             "background", [1 1 1], ...
126             "Tag", "MainFrame");
127             MainFrame.layout_options = createLayoutOptions("border", [5, 5]);
128             MainFrame.layout = "border";
129
130         //Left frame + listbox
131         LeftFrame = uicontrol(MainFrame, ...
132             "Style", "frame", ...
133             "background", [1 1 1], ...
134             "border", createBorder("titled", createBorder("line", "black", 1), ""), ...
135             "constraints", createConstraints("border", "left", [300 0]), ...
136             "Tag", "LeftFrame");
137             LeftFrame.layout = "border";
138
139
140         LeftListbox = uicontrol(LeftFrame, ...
141             "Style" , "listbox", ...
142             "FontSize", defaultFontSize, ...
143             "String", "", ...
144             "Callback", "cbAtomsGui", ...
145             "Tag", "LeftListbox");
146
147         //layer right frame
148         LayerFrame = uicontrol(MainFrame, ...
149             "style", "layer", ...
150             "constraints", createConstraints("border", "center"), ...
151             "tag", "LayerFrame");
152
153         //1st layer, description module
154         DescFrame = uicontrol(LayerFrame, ...
155             "style", "frame", ...
156             "background", [1 1 1], ...
157             "border", createBorder("titled", createBorder("line", "black", 1), "", "", "", createBorderFont("", 14, "normal")), ...
158             "layout", "border", ...
159             "tag", "DescFrame");
160
161         Desc = uicontrol(DescFrame, ...
162             "Style", "text", ...
163             "background", [1 1 1], ...
164             "FontSize", defaultFontSize, ...
165             "string", [""], ...
166             "min", 0, ...
167             "max", 2, ...
168             "Tag", "Desc");
169
170         ButtonFrame = uicontrol(DescFrame, ...
171             "style", "frame", ...
172             "backgroundcolor", [1 1 1], ...
173             "constraints", createConstraints("border", "bottom"));
174             ButtonFrame.layout_options = createLayoutOptions("grid", [1 3], [20, 0]);
175             ButtonFrame.layout = "grid";
176
177         removeButton = uicontrol(ButtonFrame, ...
178             "Style" , "pushbutton", ...
179             "FontSize", defaultFontSize, ...
180             "FontWeight", "bold", ...
181             "Callback", "cbAtomsGui", ...
182             "Enable", "off", ...
183             "Tag", "removeButton");
184
185         installButton = uicontrol(ButtonFrame, ...
186             "Style" , "pushbutton", ...
187             "FontSize", defaultFontSize, ...
188             "FontWeight", "bold", ...
189             "Callback", "cbAtomsGui", ...
190             "Enable", "off", ...
191             "Tag", "installButton");
192
193         updateButton = uicontrol(ButtonFrame, ...
194             "Style" , "pushbutton", ...
195             "FontSize", defaultFontSize, ...
196             "FontWeight", "bold", ...
197             "Callback", "cbAtomsGui", ...
198             "Enable", "off", ...
199             "Tag", "updateButton");
200
201         //2nd layer, installed modules
202         HomeFrame = uicontrol(LayerFrame, ...
203             "style", "frame", ...
204             "background", [1 1 1], ...
205             "border", createBorder("titled", createBorder("line", "black", 1), ""), ...
206             "layout", "border", ...
207             "tag", "HomeFrame");
208
209         HomeListbox = uicontrol(HomeFrame,..
210             "Style", "listbox",..
211             "Background", [1 1 1],..
212             "FontSize", defaultFontSize,..
213             "Callback", "cbAtomsGui", ..
214             "Tag", "HomeListbox");
215
216         //message frame
217         msgFrame = uicontrol(MainFrame, ...
218             "style", "frame", ...
219             "Background", [1 1 1], ...
220             "layout", "border", ...
221             "border", createBorder("titled", createBorder("line", "black", 1), ""), ...
222             "constraints", createConstraints("border", "bottom", [0, 40]), ...
223             "margins", [5 5 5 5], ...
224             "tag", "msgFrame");
225
226         msgText = uicontrol(msgFrame, ....
227             "Style", "text", ...
228             "HorizontalAlignment", "left", ...
229             "VerticalAlignment", "middle", ...
230             "FontSize", defaultFontSize, ...
231             "Background", [1 1 1], ...
232             "Tag", "msgText");
233
234         saveGui(f, SCI + "/modules/atoms/gui/atomsGui.xml");
235         delete(f);
236     end //creation
237
238     if ~ exists("atomsinternalslib") then
239         load("SCI/modules/atoms/macros/atoms_internals/lib");
240     end
241
242     // Test connection
243     allModules = [];
244     errStatus  = execstr("allModules = atomsDESCRIPTIONget();", "errcatch");
245
246     if errStatus<>0 | size(allModules, "*") == 0 then
247         if size(atomsRepositoryList(),"*") > 0 then
248             messagebox(gettext("No ATOMS module is available. Please, check your Internet connection or make sure that your OS is compatible with ATOMS."), gettext("ATOMS error"), "error");
249         else
250             messagebox(gettext("No ATOMS module is available: your repository list is empty."), gettext("ATOMS error"), "error");
251         end
252         return
253     end
254
255     atomsfig = loadGui(SCI + "/modules/atoms/gui/atomsGui.xml");
256     set("atomsFigure", "userdata", allModules);
257
258     // Build the module list (listbox on the left)
259     LeftElements = atomsGetLeftListboxElts("filter:main");
260
261     //localized title/menu
262
263     //menu
264     set("home", "label", _("File"));
265     set("homeMenu", "label", _("Installed modules"));
266     set("updatePackages", "label", _("Update List of Packages"));
267     set("closeMenu", "label", _("Close"));
268     set("help", "label", _("?"));
269     set("helpMenu", "label", _("Atoms Help..."));
270
271     set("LeftFrame", "UserData", "filter:main");
272
273     set("atomsFigure", "figure_name", LeftElements("title")+" - ATOMS");
274
275     set("LeftListbox", "string", LeftElements("items_str"));
276     set("LeftListbox", "userdata", LeftElements("items_mat"));
277
278     set("removeButton", "String", _("Remove"));
279     set("installButton", "String", _("Install"));
280     set("updateButton", "String", _("Update"));
281
282
283     homeFrame = get("HomeFrame");
284     homFrame.border.title = _("List of installed modules");
285
286     //compute size of right available width
287     Constraints = get("LeftFrame", "constraints");
288     ListBoxSize = Constraints.preferredsize;
289     LayoutOptions = get("MainFrame", "layout_options");
290     Padding = LayoutOptions.padding;
291     //TLBR : right padding + left padding + LeftFrame.width
292     LeftFixedWidth = Padding(1) * 2 + ListBoxSize(1);
293
294     // Build the installed module list
295     HomeElements = getHomeListboxElements(LeftFixedWidth);
296
297     //Update Installed Toolbox Listbox
298     set("HomeListbox", "String", HomeElements("items_str"));
299     set("HomeListbox", "UserData", HomeElements("items_mat"));
300     set("atomsFigure", "visible", "on");
301 endfunction
302