rewrite of atomsGui
[scilab.git] / scilab / modules / atoms / macros / atoms_internals / atomsGetLeftListboxElts.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) 2010 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
3 //
4 // This file must be used under the terms of the CeCILL.
5 // This source file is licensed as described in the file COPYING, which
6 // you should have received as part of this distribution. The terms
7 // are also available at
8 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
9
10 // Internal function
11 // GUI function
12
13 // Returns a struct that contains the followings fields:
14 //  - elements("items_str")
15 //  - elements("items_mat")
16 //  - elements("title")
17 //
18
19 function elements = atomsGetLeftListboxElts(category)
20
21     rhs = argn(2);
22
23     // Check number of input arguments
24     // =========================================================================
25
26     if rhs <> 1 then
27         error(msprintf(_("%s: Wrong number of input argument: %d expected.\n"),"getLeftListboxElements",1));
28     end
29
30     // Check input argument types
31     // =========================================================================
32
33     if category<>[] & type(category) <> 10 then
34         error(msprintf(_("%s: Wrong type for input argument #%d: Single string expected.\n"),"getLeftListboxElements",1));
35     end
36
37     if category<>[] & type(category) <> 10 then
38         error(msprintf(_("%s: Wrong type for input argument #%d: Single string expected.\n"),"getLeftListboxElements",1));
39     end
40
41     if size(category(1,:),"*") > 2 then
42         error(msprintf(_("%s: Wrong size for input argument #%d: mx1 or mx2 string matrix expected.\n"),"atomsIsCategory",1));
43     end
44
45     // Build lists
46     // =========================================================================
47
48     items_str  = [];
49     items_mat  = [];
50
51     atomsfig   = findobj("tag","atomsFigure");
52     allModules = atomsfig("UserData");
53
54     background = "#ffffff";
55
56     // 1st case, All main categories
57     // -------------------------------------------------------------------------
58
59     if category=="filter:main" then
60
61         categories = atomsCategoryGet("filter:main");
62
63         items_str = [items_str ; "user-home", _("All modules"), "#ffffff"];
64         items_mat = [items_mat ; "category" "filter:all"];
65
66         for i=1:size(categories, "*")
67             if background == "#eeeeee" then
68                 background = "#ffffff";
69             else
70                 background = "#eeeeee";
71             end
72
73             items_str = [items_str ; "folder", _(categories(i)), background];
74             items_mat = [items_mat ; "category" categories(i)];
75         end
76
77         // 2nd case: Sub categories + modules
78         // -------------------------------------------------------------------------
79
80     else
81
82         // Categories
83         // ---------------------------------------------------------------------
84
85         index_start = regexp(category,"/ - /");
86         // if index_start == [], category is a main category
87         // otherwise, category is a subcategory
88
89         if category=="filter:all" then
90             categories = [];
91             top_str    = _("Main categories");
92             top_mat    = ["category" "filter:main"];
93
94         elseif index_start==[] then
95             categories = atomsCategoryGet(category);
96             top_str    = _("Main categories");
97             top_mat    = ["category" "filter:main"];
98
99         else
100             categories = [];
101             parent     = part(category,1:index_start-1);
102             top_str    = parent;
103             top_mat    = ["category" parent];
104
105         end
106
107         items_str = [items_str ; "user-home", _(top_str), "#ffffff"];
108         //items_str = [items_str ; thisItem ];
109         items_mat = [items_mat ; top_mat  ];
110
111         for i=1:size(categories, "*")
112             if background == "#eeeeee" then
113                 background = "#ffffff";
114             else
115                 background = "#eeeeee";
116             end
117
118             items_str = [items_str ; "folder", _(categories(i)), background];
119             items_mat = [items_mat ; "category" category+" - "+categories(i) ];
120         end
121
122         // Modules
123         // ---------------------------------------------------------------------
124
125         if category=="filter:all" then
126             modulesNames = atomsGetAvailable([],%T);
127         else
128             modulesNames = atomsGetAvailable(category,%T);
129         end
130
131         MRVersionAvailable = atomsGetMRVersion(modulesNames);
132         modulesIsInstalled = atomsIsInstalled(modulesNames);
133
134         for i=1:size(modulesNames, "*")
135
136             thisModuleTitle    = allModules(modulesNames(i))(MRVersionAvailable(i)).Title;
137
138             if modulesIsInstalled(i) then
139
140                 MRVersionInstalled = atomsVersionSort(atomsGetInstalledVers(modulesNames(i)),"DESC");
141                 MRVersionInstalled = MRVersionInstalled(1);
142                 thisModuleTitle    = allModules(modulesNames(i))(MRVersionInstalled).Title;
143
144                 if atomsVersionCompare(MRVersionInstalled,MRVersionAvailable(i)) == -1 then
145                     // Not up-to-date
146                     icon = "software-update-notuptodate";
147                 else
148                     // The Most Recent Version is already installed
149                     icon = "software-update-installed";
150                 end
151
152             else
153                 icon = "software-update-notinstalled";
154             end
155
156             if background == "#eeeeee" then
157                 background = "#ffffff";
158             else
159                 background = "#eeeeee";
160             end
161
162             items_str = [items_str ; icon, _(thisModuleTitle), background];
163             items_mat = [items_mat ; "module" modulesNames(i)];
164
165         end
166
167     end
168
169     if items_str==[] then
170         elements("items_str") = "";
171     else
172         elements("items_str") = items_str;
173     end
174
175     elements("items_mat") = items_mat;
176
177     if category=="filter:main" then
178         elements("title") = _("Main categories");
179     elseif category=="filter:all" then
180         elements("title") = _("All modules");
181     else
182         elements("title") = _(category);
183     end
184
185     if %f then
186         // NEVER EXECUTED ON PURPOSE
187         // inlined category "filter:main" data to ease localization
188         _("Aerospace");
189         _("Contributed Scilab Binaries");
190         _("Data Analysis And Statistics");
191         _("Data Handling");
192         _("Editor Styles");
193         _("Education");
194         _("GUI");
195         _("Graphics");
196         _("Graphs");
197         _("Image Processing");
198         _("Instruments Control");
199         _("Linear algebra");
200         _("Modeling and Control Tools");
201         _("Number theory");
202         _("Numerical Maths");
203         _("Optimization");
204         _("Physics");
205         _("Real-Time");
206         _("Scilab development");
207         _("Signal Processing");
208         _("Technical");
209         _("Tests");
210         _("Xcos");
211     end
212 endfunction