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