http://bugzilla.scilab.org/9519 07/19407/4
Samuel GOUGEON [Sat, 26 Aug 2017 12:34:42 +0000 (14:34 +0200)]
  * ".xcos .zcos" filter added: Xcos files are now opened with xcos
    from the console. .zcos files no longer block Scinotes
  * "lib" filter added. Scilab libraries can now be opened.
  * ".scg" filter added. They were filtered with .sce and .sci and opened
    in Scinotes. Graphics files out of the CWD can now be
    browsed and properly loaded from the console.
  * ".tst .dia.ref" filter added.
  * Other types of files are routed to the prefered OS application
    instead of being sent to Scinotes.

Change-Id: Ic5429f5f0086b9162a758fe88c6c867f3451151e

scilab/CHANGES.md
scilab/modules/gui/etc/main_menubar.xml
scilab/modules/gui/etc/main_toolbar.xml
scilab/modules/gui/macros/main_menubar_cb.sci

index b8e1caa..b0c67f4 100644 (file)
@@ -210,6 +210,9 @@ bounds selected out of the axes areas is now restored, after the Scilab 5.4 regr
 * `lqi` function added to compute "linear quadratic integral compensator".
 * A new console `File => Go to Favorite directory` menu allows to go to a favorite directory selected
   in a dynamical list set from Scinotes favorite and most recent directories.
+* The console `File => Open a file` menu allows now to open *.xcos *.zcos *.scg or lib files with
+   the proper Scilab component, and other files with the proper OS application.
+   All files were formerly opened in Scinotes.
 * `size` can now be overloadable for tlist lists, as it already could for mlist lists.
 * `gcd` now accepts `int64` and `uint64` integers. The input can now be any array instead of a row.
 * `cat` has been rewritten. It is now fast and can process heavy arrays at high dimensions.
@@ -353,6 +356,7 @@ the [development mailing list](dev@lists.scilab.org) for a particular toolbox.
 * [#4276](http://bugzilla.scilab.org/show_bug.cgi?id=4276): `strsubst` replaced the first occurence in regex mode.
 * [#5278](http://bugzilla.scilab.org/show_bug.cgi?id=5278): obsolete `xset()` was still used in scripts, macros, tests and help pages.
 * [#8297](http://bugzilla.scilab.org/show_bug.cgi?id=8297): `cat` slowness was exponential, crippling, and made it useless.
+* [#9519](http://bugzilla.scilab.org/show_bug.cgi?id=9519): The console menu `File -> Open a file` opened any file in Scinotes. Binary files like .zcos blocked Scinotes.
 * [#11756](http://bugzilla.scilab.org/show_bug.cgi?id=11756): In the categories of the ATOMS GUI, actually available modules might be not listed.
 * [#12195](http://bugzilla.scilab.org/show_bug.cgi?id=12195): `generateBlockImage` sometimes changed the current graphic driver.
 * [#12771](http://bugzilla.scilab.org/show_bug.cgi?id=12771): xcosPalGenerateAllIcons help example was broken.
index 315fe5f..922e333 100644 (file)
@@ -10,7 +10,7 @@
         </submenu>
         <separator/>
         <submenu label="&amp;Open a file..." accelerator="OSSCKEY O" icon="document-open-sci">
-            <callback instruction="%fileToOpen = uigetfile(&quot;*.sc*&quot;, &quot;&quot;, gettext(&quot;Select a file to open with SciNotes&quot;)); if ~(%fileToOpen == &quot;&quot;) then editor(%fileToOpen); end; clear(&quot;%fileToOpen&quot;);" type="0"/>
+            <callback instruction="main_menubar_cb(&quot;openFile&quot;);" type="0"/>
         </submenu>
         <submenu label="&amp;Load environment..." accelerator="OSSCKEY L" icon="document-open">
             <callback instruction="%fileToLoad = uigetfile([&quot;*.sav&quot;;&quot;*.sod&quot;], &quot;&quot;, gettext(&quot;Select a file to load&quot;)); if ~(%fileToLoad == &quot;&quot;) then load(%fileToLoad); updatebrowsevar(); disp(msprintf(gettext(&quot;Environment loaded.\n&quot;))); end; clear(&quot;%fileToLoad&quot;);" type="0"/>
index e616ae2..11dba9d 100644 (file)
@@ -6,7 +6,7 @@
     </button>
     <!-- Open File -->
     <button icon="document-open" tooltiptext="Open a file">
-        <callback instruction="           %fileToOpen = uigetfile(&quot;*.sc*&quot;, pwd(), gettext(&quot;Select a file to open with SciNotes&quot;),%t);           if %fileToOpen ~= &quot;&quot; then             editor(%fileToOpen);           end;           clear(&quot;%fileToOpen&quot;);" type="0"/>
+        <callback instruction="main_menubar_cb(&quot;openFile&quot;);" type="0"/>
     </button>
     <separator/>
     <!-- Copy -->
index 59dc6b8..c007c1b 100644 (file)
 function main_menubar_cb(key)
     // Private internal function
     // * initially called by scilab.start
-    // * afterwards called by the menu(File).callback
+    // * afterwards called by the menu(File).callback set according to
+    //   SCI/modules/gui/etc/main_menubar.xml
 
-    if  key=="setFavoriteDirs"
+    if key=="openFile"
+        msg = gettext("Select a file to open");
+        ext = [ "*.sce|*.sci"       _("Scilab scripts")
+                "*.xcos|*.zcos"     _("Xcos diagrams")
+                "*.tst|*.dia.ref"   _("Scilab Tests")
+                "*.scg"             _("Scilab Graphics")
+                "lib"               _("Scilab Library")
+                "*.sc*|*.*cos|*.tst|*.dia.ref|lib" _("All Scilab files")
+                ];
+        %fileToOpen = uigetfile(ext, pwd(), msg);
+        if %fileToOpen ~= "" then
+            ext = convstr(fileparts(%fileToOpen, "extension"));
+            if or(ext==[".xcos" ".zcos"])
+                xcos(%fileToOpen);
+            elseif or(ext==[".sce" ".sci" ".tst" ".ref"])
+                editor(%fileToOpen);
+            elseif ext==".scg"
+                load(%fileToOpen);
+            elseif basename(%fileToOpen)=="lib"
+                libname = getPreferencesValue("/scilablib","name",%fileToOpen);
+                load(%fileToOpen);
+                mprintf(libname+" loaded.\n");
+                execstr(libname+"=return("+libname+")");
+            else
+                if getos()=="Windows"
+                    winopen(%fileToOpen)
+                elseif getos()=="Linux"
+                    host("xdg-open "+%fileToOpen+" &")
+                else
+                    host("open "+%fileToOpen+" &")
+                end
+            end
+        end
+
+    elseif  key=="setFavoriteDirs"
         // Setting the list of directories of interest
         // = major directories + Scinotes favorites
         //