Bug #11646 fixed - Autoload status of installed modules should be visible and 38/14038/2
Samuel Gougeon [Fri, 14 Mar 2014 19:29:39 +0000 (20:29 +0100)]
                     swichable in the GUI.

Change-Id: I42d148abcb7f8a3500123746af1d75c1fe7f9e53

scilab/modules/atoms/gui/atomsGui.xml
scilab/modules/atoms/macros/atoms_gui/atomsGui.sci
scilab/modules/atoms/macros/atoms_gui/atomsResize.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atoms_gui/cbAtomsGui.sci
scilab/modules/atoms/macros/atoms_internals/atomsGetHomeListboxElts.sci [new file with mode: 0644]
scilab/modules/atoms/macros/atoms_internals/atomsSetInstalledList.sci [new file with mode: 0644]

index e447939..bfd8fcf 100644 (file)
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <scilabgui usedeprecatedskin="off" version="1.0">
-    <figure axes_size="900,600" background="33" default_axes="off" dockable="off" figure_position="0,0" figure_size="916,665" icon="software-update-notinstalled" infobar_visible="off" layout="3" menubar="0" tag="atomsFigure" toolbar="0" toolbar_visible="off" visible="off">
+    <figure axes_size="900,600" background="33" default_axes="off" dockable="off" figure_position="0,0" figure_size="916,665" icon="software-update-notinstalled" infobar_visible="off" layout="3" menubar="0" resizefcn="atomsResize" tag="atomsFigure" toolbar="0" toolbar_visible="off" visible="off">
         <frame backgroundcolor="1.0,1.0,1.0" borderoptpadding="5,5" layout="3" tag="MainFrame">
             <frame backgroundcolor="1.0,1.0,1.0" borderposition="0" borderpreferredsize="0,40" layout="3" margins="5.0,5.0,5.0,5.0" tag="msgFrame">
                 <border style="titled" title="">
                     <title color="black" style="line" thickness="1"/>
                 </border>
-                <text backgroundcolor="1.0,1.0,1.0" fontsize="12.0" tag="msgText"/>
+                <text backgroundcolor="1.0,1.0,1.0" fontsize="12.0" horizontalalignment="center" tag="msgText"/>
             </frame>
             <layer tag="LayerFrame">
                 <frame backgroundcolor="1.0,1.0,1.0" layout="3" tag="HomeFrame">
                     <border fontangle="normal" fontname="" fontsize="14" fontweight="normal" justification="0" style="titled" title="">
                         <title color="black" style="line" thickness="1"/>
                     </border>
-                    <frame backgroundcolor="1.0,1.0,1.0" borderposition="0" gridoptgrid="1,3" gridoptpadding="20,0" layout="2">
-                        <pushbutton callback="cbAtomsGui" callback_type="0" enable="off" fontsize="12.0" fontweight="bold" tag="updateButton"/>
-                        <pushbutton callback="cbAtomsGui" callback_type="0" enable="off" fontsize="12.0" fontweight="bold" tag="installButton"/>
-                        <pushbutton callback="cbAtomsGui" callback_type="0" enable="off" fontsize="12.0" fontweight="bold" tag="removeButton"/>
+                    <frame backgroundcolor="1.0,1.0,1.0" borderposition="0" gridoptgrid="1,4" gridoptpadding="20,0" layout="2">
+                        <checkbox backgroundcolor="1.0,1.0,1.0" callback="cbAtomsGui" callback_type="0" tag="autoloadCheck"/>
+                        <pushbutton callback="cbAtomsGui" callback_type="0" enable="off" tag="installButton"/>
+                        <pushbutton callback="cbAtomsGui" callback_type="0" enable="off" tag="removeButton"/>
+                        <pushbutton callback="cbAtomsGui" callback_type="0" tag="backButton"/>
                     </frame>
                     <text backgroundcolor="1.0,1.0,1.0" fontsize="12.0" max="2.0" sliderstep="0.02,0.2" tag="Desc"/>
                 </frame>
index 8872e2d..05a303e 100644 (file)
@@ -1,8 +1,8 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
-// Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
-// Copyright (C) 2010 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
-// Copyright (C) 2012 - Samuel GOUGEON
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT
+// Copyright (C) 2010 - DIGITEO - Pierre MARECHAL
 // Copyright (C) 2012 - DIGITEO - Allan CORNET
+// Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
 function atomsGui()
-    function elements = getHomeListboxElements(LeftFixedWidth)
-        items_str  = [];
-        items_mat  = [];
-
-        installed  = atomsGetInstalled();
-        allModules   = get("atomsFigure", "userdata");
-        AxesSize = get("atomsFigure", "axes_size");
-        Width = (AxesSize(1) - LeftFixedWidth) - 20*2; //16*2 is icon size
-
-        for i=1:size(installed(:,1), "*")
-            MRVersionAvailable = atomsGetMRVersion(installed(i,1));
-            MRVersionInstalled = atomsVersionSort(atomsGetInstalledVers(installed(i,1)),"DESC");
-            MRVersionInstalled = MRVersionInstalled(1);
-            if atomsVersionCompare(MRVersionInstalled,MRVersionAvailable) == -1 then
-                // Not up-to-date
-                icon = "software-update-notinstalled.png";
-            else
-                // The Most Recent Version is already installed
-                icon = "software-update-installed.png";
-            end
-
-            if modulo(i,2) == 0 then
-                background = "#eeeeee";
-            else
-                background = "#ffffff";
-            end
-
-            thisItem = "<html>";
-            thisItem = thisItem + "<table width=""100%"" style=""background-color:" + background + ";color:#000000;"" ><tr>";
-            thisItem = thisItem + "<td><img src=""file:///"+SCI+"/modules/atoms/images/icons/16x16/status/"+icon+""" /></td>";
-            thisItem = thisItem + "<td width=""100%"">";
-            thisItem = thisItem + "  <div width=""" + string(Width) + """>";
-            thisItem = thisItem + "  <span style=""font-weight:bold;"">"+allModules(installed(i,1))(installed(i,2)).Title+" "+installed(i,2)+"</span><br />";
-            thisItem = thisItem + "  <span>"+allModules(installed(i,1))(installed(i,2)).Summary+"</span><br />";
-            thisItem = thisItem + "  <span style=""font-style:italic;"">"+installed(i,4)+"</span>";
-            thisItem = thisItem + "  </div>";
-            thisItem = thisItem + "</td>";
-            thisItem = thisItem + "</tr></table>";
-            thisItem = thisItem + "</html>";
-
-            items_str = [items_str ; thisItem];
-            items_mat = [items_mat ; "module" installed(i,1)];
-        end
-
-        if items_str==[] then
-            elements("items_str") = "";
-        else
-            elements("items_str") = items_str;
-        end
-
-        elements("items_mat") = items_mat;
-
-    endfunction
-
     creation = %f;
     if creation then
         figwidth = 900;
@@ -81,6 +27,7 @@ function atomsGui()
             "default_axes", "off", ...
             "tag", "atomsFigure", ...
             "visible", "off", ...
+            "resizefcn", "atomsResize", ...
             "icon", "software-update-notinstalled", ...
             "position", [0 0 figwidth figheight], ...
             "layout", "border");
@@ -171,32 +118,33 @@ function atomsGui()
             "style", "frame", ...
             "backgroundcolor", [1 1 1], ...
             "constraints", createConstraints("border", "bottom"));
-            ButtonFrame.layout_options = createLayoutOptions("grid", [1 3], [20, 0]);
+            ButtonFrame.layout_options = createLayoutOptions("grid", [1 4], [20, 0]);
             ButtonFrame.layout = "grid";
 
+        backButton = uicontrol(ButtonFrame, ...
+            "Style" , "pushbutton", ...
+            "Callback", "cbAtomsGui", ...
+            "Enable", "on", ...
+            "Tag", "backButton");
+
         removeButton = uicontrol(ButtonFrame, ...
             "Style" , "pushbutton", ...
-            "FontSize", defaultFontSize, ...
-            "FontWeight", "bold", ...
             "Callback", "cbAtomsGui", ...
             "Enable", "off", ...
             "Tag", "removeButton");
 
         installButton = uicontrol(ButtonFrame, ...
             "Style" , "pushbutton", ...
-            "FontSize", defaultFontSize, ...
-            "FontWeight", "bold", ...
             "Callback", "cbAtomsGui", ...
             "Enable", "off", ...
             "Tag", "installButton");
 
-        updateButton = uicontrol(ButtonFrame, ...
-            "Style" , "pushbutton", ...
-            "FontSize", defaultFontSize, ...
-            "FontWeight", "bold", ...
+        autoloadCheck = uicontrol(ButtonFrame, ...
+            "Style" , "checkbox", ...
+            "background", [1 1 1], ...
             "Callback", "cbAtomsGui", ...
-            "Enable", "off", ...
-            "Tag", "updateButton");
+            "Enable", "on", ...
+            "Tag", "autoloadCheck");
 
         //2nd layer, installed modules
         HomeFrame = uicontrol(LayerFrame, ...
@@ -225,7 +173,7 @@ function atomsGui()
 
         msgText = uicontrol(msgFrame, ....
             "Style", "text", ...
-            "HorizontalAlignment", "left", ...
+            "HorizontalAlignment", "center", ...
             "VerticalAlignment", "middle", ...
             "FontSize", defaultFontSize, ...
             "Background", [1 1 1], ...
@@ -275,28 +223,23 @@ function atomsGui()
     set("LeftListbox", "string", LeftElements("items_str"));
     set("LeftListbox", "userdata", LeftElements("items_mat"));
 
+    set("backButton", "String", _("Back"));
     set("removeButton", "String", _("Remove"));
     set("installButton", "String", _("Install"));
-    set("updateButton", "String", _("Update"));
+    set("autoloadCheck", "String", _("Autoload"));
 
 
     homeFrame = get("HomeFrame");
     homFrame.border.title = _("List of installed modules");
 
-    //compute size of right available width
-    Constraints = get("LeftFrame", "constraints");
-    ListBoxSize = Constraints.preferredsize;
-    LayoutOptions = get("MainFrame", "layout_options");
-    Padding = LayoutOptions.padding;
-    //TLBR : right padding + left padding + LeftFrame.width
-    LeftFixedWidth = Padding(1) * 2 + ListBoxSize(1);
-
     // Build the installed module list
-    HomeElements = getHomeListboxElements(LeftFixedWidth);
+    HomeElements = atomsGetHomeListboxElts();
 
     //Update Installed Toolbox Listbox
     set("HomeListbox", "String", HomeElements("items_str"));
     set("HomeListbox", "UserData", HomeElements("items_mat"));
     set("atomsFigure", "visible", "on");
+
+    atomsResize();
 endfunction
 
diff --git a/scilab/modules/atoms/macros/atoms_gui/atomsResize.sci b/scilab/modules/atoms/macros/atoms_gui/atomsResize.sci
new file mode 100644 (file)
index 0000000..1b7df7b
--- /dev/null
@@ -0,0 +1,19 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Samuel GOUGEON
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+function atomsResize()
+    // Load Atoms Internals lib if it's not already loaded
+    if ~exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    HomeElements = atomsGetHomeListboxElts();
+    set("HomeListbox", "String", HomeElements("items_str"));
+    set("HomeListbox", "UserData", HomeElements("items_mat"));
+endfunction
\ No newline at end of file
index 616e6b3..619315c 100644 (file)
@@ -1,6 +1,7 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
 // Copyright (C) 2009-2010 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+// Copyright (C) 2014 - Scilab Enterprises - Antoine ELIAS
 //
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
@@ -8,10 +9,7 @@
 // are also available at
 // http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
 
-// Internal function
-
 function cbAtomsGui()
-
     // Load Atoms Internals lib if it's not already loaded
     if ~ exists("atomsinternalslib") then
         load("SCI/modules/atoms/macros/atoms_internals/lib");
@@ -44,29 +42,39 @@ function cbAtomsGui()
 
     // A button has been pressed
     // =========================================================================
-    if or(UItag == ["installButton";"removeButton";"updateButton"]) then
+    if or(UItag == ["installButton";"removeButton"]) then
         // Get the module name
         module = get("DescFrame","userdata");
         // Disable callbacks
         disableAtomsGui();
     end
 
-    // Install selected module
+    // Install or Update selected module
     // =========================================================================
     if UItag == "installButton" then
-        updateStatusBar("info",_("Installing")+" &hellip;");
-        if execstr("atomsInstall("""+module+""")","errcatch")<>0 then
-            updateStatusBar();
-            messagebox(_("Installation failed!"),_("ATOMS error"),"error");
+        if get("installButton", "String") == _("Install") then
+            updateStatusBar("info",_("Installing") + "...");
+            if execstr("atomsInstall("""+module+""")","errcatch")<>0 then
+                updateStatusBar();
+                messagebox(_("Installation failed!"),_("ATOMS error"),"error");
+            else
+                updateDescFrame();
+                updateStatusBar("success",_("Installation done! Please restart Scilab to take changes into account."));
+            end
         else
-            updateDescFrame();
-            updateStatusBar("success",_("Installation done! Please restart Scilab to take changes into account."));
+            updateStatusBar("info",_("Updating") + "...");
+            if execstr("atomsUpdate("""+module+""")","errcatch")<>0 then
+                updateStatusBar();
+                messagebox(_("Update failed!"),_("ATOMS error"),"error");
+            else
+                updateDescFrame();
+                updateStatusBar("success",_("Update done! Please restart Scilab to take changes into account."));
+            end
         end
-
     // Remove selected module
     // =========================================================================
     elseif UItag == "removeButton" then // Remove selected module
-        updateStatusBar("info",_("Removing")+" &hellip;");
+        updateStatusBar("info",_("Removing")+" ...");
         if execstr("atomsRemove("""+module+""")", "errcatch")<>0 then
             updateStatusBar();
             messagebox(_("Remove failed!"),_("ATOMS error"),"error");
@@ -74,69 +82,59 @@ function cbAtomsGui()
             updateDescFrame();
             updateStatusBar("success",_("Remove done! Please restart Scilab to take changes into account. "));
         end
+    end
 
-    // Update selected module
-    // =========================================================================
-    elseif UItag == "updateButton" then // Update selected module
-        updateStatusBar("info",_("Updating")+" &hellip;");
-        if execstr("atomsUpdate("""+module+""")","errcatch")<>0 then
-            updateStatusBar();
-            messagebox(_("Update failed!"),_("ATOMS error"),"error");
+    if UItag == "autoloadCheck" then
+        module = get("DescFrame", "userdata")
+        if get("autoloadCheck", "value") == get("autoloadCheck", "max") then
+            atomsAutoloadAdd(module)
+            msg = _("The module will be automatically loaded at next startup.")
+            updateStatusBar("info", msg)
         else
-            updateDescFrame();
-            updateStatusBar("success",_("Update done! Please restart Scilab to take changes into account."));
+            atomsAutoloadDel(module)
+            msg = _("Autoload at startup is canceled. The ""Toolboxes"" menu or atomsLoad() can be used to load the module when needed.")
+            updateStatusBar("info", msg)
         end
     end
 
     // End of the button action
     // =========================================================================
-    if or(UItag == ["installButton";"removeButton";"updateButton"]) then
-        // Left listbox:
-        //  - Enable it
-        //  - Reload it
+    if or(UItag == ["installButton";"removeButton"]) then
         enableLeftListbox();
         reloadLeftListbox();
     end
 
     // Menu
     // =========================================================================
-
     // File:Home
-    if UItag == "homeMenu" then
+    if or(UItag == ["homeMenu";"backButton"]) then
         showHome();
-
     // File:Close
     elseif UItag == "closeMenu" then
         delete(findobj("Tag", "atomsFigure"));
-
     // ?:Help
     elseif UItag == "helpMenu" then
         help("atoms")
     end
 endfunction
 
-
 // =============================================================================
 // getSelected()
 //  + Return the type: category / module
 //  + Return the name selected from a listbox.
 // =============================================================================
-
 function selected = getSelected(listbox)
     index    = get(listbox, "Value");
     UserData = get(listbox, "UserData");
     selected = UserData(index,:);
 endfunction
 
-
 // =============================================================================
 // disableAtomsGui()
 //  + Disable all callback
 // =============================================================================
-
 function disableAtomsGui()
     set("installButton", "Enable", "off");
-    set("updateButton", "Enable", "off");
     set("removeButton", "Enable", "off");
     disableLeftListbox()
 endfunction
@@ -154,11 +152,9 @@ endfunction
 // =============================================================================
 // reloadLeftListbox()
 // =============================================================================
-
 function reloadLeftListbox()
     category = get("LeftFrame", "UserData");
-    LeftListbox = get("LeftListbox");
-    LeftElements            = atomsGetLeftListboxElts(category);
+    LeftElements = atomsGetLeftListboxElts(category);
     set("LeftListbox", "String", LeftElements("items_str"));
     set("LeftListbox", "UserData", LeftElements("items_mat"));
 endfunction
@@ -168,7 +164,6 @@ endfunction
 //  + Update the description frame with the selected module
 //  + does not change the description frame visibility
 // =============================================================================
-
 function updateDescFrame()
     // Operating system detection + Architecture detection
     // =========================================================================
@@ -176,17 +171,15 @@ function updateDescFrame()
 
     // Get the modules list and the selected module
     // =========================================================================
-
     allModules     = get("atomsFigure", "userdata");
     thisModuleName = get("DescFrame" ,"userdata");
 
     // Reset the message frame
     // =========================================================================
-    set("msgText", "String", "");
+    updateStatusBar();
 
     // Get the module details
     // =========================================================================
-
     modulesNames       = getfield(1, allModules);
     modulesNames (1:2) = [];
     thisModuleStruct   = allModules(thisModuleName);
@@ -204,7 +197,6 @@ function updateDescFrame()
 
     // Download Size
     // =========================================================================
-
     sizeHTML = "";
 
     if isfield(thisModuleDetails,OSNAME+ARCH+"Size") then
@@ -216,7 +208,6 @@ function updateDescFrame()
 
     // Authors
     // =========================================================================
-
     authorMat  = thisModuleDetails.Author;
     authorHTML = "";
 
@@ -231,7 +222,6 @@ function updateDescFrame()
 
     // URLs (See also)
     // =========================================================================
-
     URLs        = [];
     seeAlsoHTML = "";
 
@@ -257,7 +247,6 @@ function updateDescFrame()
 
     // Release date
     // =========================================================================
-
     dateHTML = "";
 
     if isfield(thisModuleDetails,"Date") ..
@@ -271,8 +260,6 @@ function updateDescFrame()
 
     // Build and Set the HTML code
     // =========================================================================
-
-
     htmlcode = "<html>" + ..
     "<body>" + ..
     txt2title(_("Version")) + ..
@@ -296,7 +283,6 @@ function updateDescFrame()
 
     // Description title management
     // =========================================================================
-
     descFrameHTML = thisModuleDetails.Title;
 
     border = get("DescFrame", "border");
@@ -305,39 +291,31 @@ function updateDescFrame()
 
     // Buttons
     // =========================================================================
-
     // Tests for update available
-    // --------------------------
-
-    canUpdate = "off";
-    if atomsIsInstalled(thisModuleName) & atomsVersionCompare(MRVersionInstalled,MRVersionAvailable) == -1 then
-        // Not up-to-date
-        canUpdate = "on";
-        updateStatusBar("warning",sprintf(_("A new version (''%s'') of ''%s'' is available"),MRVersionAvailable,thisModuleDetails.Title));
-    end
+    set("installButton", "String", _("Install"), "Enable", "off");
+    set("removeButton", "Enable", "off");
+    set("autoloadCheck", "Value", get("autoloadCheck", "min"), "Enable", "off");
 
-    // Can be removed
-    // --------------------------
     if atomsIsInstalled(thisModuleName) then
-        canRemove = "on";
-    else
-        canRemove = "off";
-    end
+        if atomsVersionCompare(MRVersionInstalled,MRVersionAvailable) == -1 then
+            // Not up-to-date
+            set("installButton", "String", _("Update"), "Enable", "on");
+            updateStatusBar("warning",sprintf(_("A new version (''%s'') of ''%s'' is available"),MRVersionAvailable,thisModuleDetails.Title));
+        end
+
+        set("removeButton", "Enable", "on");
 
-    // Can be installed
-    // --------------------------
-    if ~ atomsIsInstalled(thisModuleName) then
-        canInstall = "on";
+        // Is autoloaded
+        // -------------
+        tmp = atomsAutoloadList()
+        if or(thisModuleName==tmp) then
+            set("autoloadCheck", "Value", get("autoloadCheck", "max"), "Enable", "on");
+        else
+            set("autoloadCheck", "Value", get("autoloadCheck", "min"), "Enable", "on");
+        end
     else
-        canInstall = "off";
+        set("installButton", "String", _("Install"), "Enable", "on");
     end
-
-    // Update the buttons
-    // --------------------------
-    set("installButton", "Enable", canInstall);
-    set("updateButton", "Enable", canUpdate );
-    set("removeButton", "Enable", canRemove );
-
 endfunction
 
 // =============================================================================
@@ -364,7 +342,6 @@ endfunction
 // =============================================================================
 // hide()
 // =============================================================================
-
 function hide(tag)
     set(tag, "Visible", "Off");
 endfunction
@@ -374,16 +351,21 @@ endfunction
 // + Hide the detailed description of a module
 // + Show the home page
 // =============================================================================
-
 function showHome()
-
     // Reset the message frame
-    set("msgText", "String", "");
+    updateStatusBar();
+
+    //refresh installed listbox
+    HomeElements = atomsGetHomeListboxElts();
+    set("HomeListbox", "String", HomeElements("items_str"));
+    set("HomeListbox", "UserData", HomeElements("items_mat"));
 
     //active home layer
     set("LayerFrame", "String", "HomeFrame");
+    //reset listbox selection
+    set("HomeListbox", "value", []);
 
-    // update the left listbox
+    // reset the left listbox
     LeftElements = atomsGetLeftListboxElts("filter:main");
     set("LeftListbox", "String", LeftElements("items_str"));
     set("LeftListbox", "UserData", LeftElements("items_mat"));
@@ -394,49 +376,36 @@ endfunction
 // + Hide the home page
 // + Show the detailed description of a module
 // =============================================================================
-
 function showDesc()
-
     //active description layer
     set("LayerFrame", "String", "DescFrame");
 endfunction
 
-
 // =============================================================================
 // updateStatusBar
 // + Update the string in the msg Frame
 // =============================================================================
-
 function updateStatusBar(status,msg)
-
     rhs = argn(2);
 
     if rhs==0 then
-        set("msgText", "String", "");
+        set("msgText", "String", "", "Icon", "");
         return
     end
 
     select status
     case "warning" then
-        fontcolor = "#ff0000"; // red
-        icon      = "status/software-update-available.png";
+        fontcolor = [0.75 0 0]; // red
+        icon      = "software-update-available";
     case "success" then
-        fontcolor = "#009a1b"; // dark green
-        icon      = "emblems/emblem-default.png";
+        fontcolor = [0 0.5 0];// dark green
+        icon      = "emblem-default";
     case "info" then
-        fontcolor = "#7d7d7d"; // dark green
-        icon      = "status/dialog-information.png";
+        fontcolor = [0.5 0.5 0.5]; // dark gray
+        icon      = "dialog-information";
     end
 
-    str =       "<html>";
-    str = str + "<table><tr>";
-    str = str + "<td><img src=""file:///"+SCI+"/modules/atoms/images/icons/16x16/"+icon+""" /></td>";
-    str = str + "<td><div style=""color:"+fontcolor+";font-style:italic;"">"+msg+"</div></td>";
-    str = str + "</tr></table>";
-    str = str + "</html>";
-
-    set("msgText", "String", str);
-
+    set("msgText", "Foregroundcolor", fontcolor,  "String", msg, "Icon", icon);
 endfunction
 
 // =============================================================================
@@ -444,9 +413,7 @@ endfunction
 // + Find URLs
 // + Convert them in HTML (hyperlinks)
 // =============================================================================
-
 function txtout = processHTMLLinks(txtin)
-
     regexUrl   = "/((((H|h)(T|t)|(F|f))(T|t)(P|p)((S|s)?))\:\/\/)(www|[a-zA-Z0-9])[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,6}(\:[0-9]{1,5})*(\/($|[a-zA-Z0-9\.\,\;\?\''\\\+&amp;%\$#\=~_\-\/]+))*/";
     txtout     = "";
 
@@ -464,18 +431,14 @@ function txtout = processHTMLLinks(txtin)
     else
         txtout = txtin;
     end
-
 endfunction
 
 // =============================================================================
 // txt2title
 // =============================================================================
-
 function txtout = txt2title(txtin)
-
     txtout = "<div style=""font-weight:bold;margin-top:10px;margin-bottom:3px;"">" + ..
     txtin + ..
     "</div>";
-
 endfunction
 
diff --git a/scilab/modules/atoms/macros/atoms_internals/atomsGetHomeListboxElts.sci b/scilab/modules/atoms/macros/atoms_internals/atomsGetHomeListboxElts.sci
new file mode 100644 (file)
index 0000000..6cfcfbe
--- /dev/null
@@ -0,0 +1,33 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2009 - DIGITEO - Vincent COUVERT <vincent.couvert@scilab.org>
+// Copyright (C) 2009-2010 - DIGITEO - Pierre MARECHAL <pierre.marechal@scilab.org>
+// Copyright (C) 2013 - Samuel GOUGEON
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+
+function elements = atomsGetHomeListboxElts()
+    items_str  = [];
+    items_mat  = [];
+
+    installed  = atomsGetInstalled();
+    tmp = atomsAutoloadList("all")
+    autoloaded = tmp(:,1)
+    allModules = get("atomsFigure", "UserData");
+
+    items_str  = atomsSetInstalledList(installed)
+    items_mat = installed(:,1)
+    items_mat = [emptystr(items_mat)+"module" items_mat ]
+
+    if items_str==[] then
+        elements("items_str") = "";
+    else
+        elements("items_str") = items_str;
+    end
+
+    elements("items_mat") = items_mat;
+
+endfunction
diff --git a/scilab/modules/atoms/macros/atoms_internals/atomsSetInstalledList.sci b/scilab/modules/atoms/macros/atoms_internals/atomsSetInstalledList.sci
new file mode 100644 (file)
index 0000000..ab4c51f
--- /dev/null
@@ -0,0 +1,92 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2013 - Samuel GOUGEON
+//
+// This file must be used under the terms of the CeCILL.
+// This source file is licensed as described in the file COPYING, which
+// you should have received as part of this distribution. The terms
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+
+// =============================================================================
+//
+// items_str = atomsSetInstalledList(installed)
+//
+// items_str must be updated: it contains infos about the autoload status
+//  of each installed module, while this status can be interactively switched
+// =============================================================================
+
+function items_str = atomsSetInstalledList(installed)
+
+    // Load Atoms Internals lib if it's not already loaded
+    if ~exists("atomsinternalslib") then
+        load("SCI/modules/atoms/macros/atoms_internals/lib");
+    end
+
+    tmp = atomsAutoloadList("all")
+    autoloaded = tmp(:,1)
+    allModules = get("atomsFigure", "UserData");
+
+    // Widths of HTML columns
+    id = get("LayerFrame")
+    pos = id.position - 10;
+    col1Width = max([315 pos(3)*0.8]); // short description
+    col2Width = max([60 pos(3)*0.2]);  // autoload status
+
+    items_str = []
+    for i = 1:size(installed(:,1),"*")
+        MRVersionAvailable = atomsGetMRVersion(installed(i,1));
+        MRVersionInstalled = atomsVersionSort(atomsGetInstalledVers(installed(i,1)),"DESC");
+        MRVersionInstalled = MRVersionInstalled(1);
+        if atomsVersionCompare(MRVersionInstalled,MRVersionAvailable) == -1 then
+            // Not up-to-date
+            icon = "software-update-notinstalled.png";
+        else
+            // The Most Recent Version is already installed
+            icon = "software-update-installed.png";
+        end
+
+        if modulo(i,2) == 0 then
+            background = "#eeeeee";
+        else
+            background = "#ffffff";
+        end
+
+        // Building the content
+        if or(installed(i,1)==autoloaded) then
+            tmp = "<span style=""color:green"">"+_("Loaded<br>at startup")+"</span>"
+        else
+            tmp = ""
+        end
+
+        thisItem = [
+        "<html>"
+        "<table style=""background-color:"+background+";color:#000000;"">"
+        "<tr>"
+        "<td>"
+        "<img src=""file:///"+SCI+"/modules/atoms/images/icons/16x16/status/"+icon+""" />"
+        "</td>"
+        "<td><div style=""width:"+sprintf("%d",col1Width*0.72)+"px;text-align:left;"">"
+        "<span style=""font-weight:bold;"">"
+        allModules(installed(i,1))(installed(i,2)).Title+" "
+        installed(i,2)
+        "</span>"
+        "<br/>"
+        "<span>"+allModules(installed(i,1))(installed(i,2)).Summary+"</span>"
+        "<br/>"
+        "<span style=""font-style:italic;"">"+installed(i,4)+"</span>"
+        "</div>"
+        "</td>"
+        "<td style=""text-align:center;width:"+sprintf("%d",col2Width*0.7)+"px"">"
+        tmp
+        "</td>"
+        "</tr>"
+        "</table>"
+        "</html>"
+        ]
+
+        items_str = [ items_str ; strcat(thisItem) ];
+    end
+    if items_str==[] then
+        items_str = ""
+    end
+endfunction