Bug 12350 - Windows Explorer integration: open a xcos/zcos file did not try to find... 08/10908/5
Antoine ELIAS [Wed, 20 Mar 2013 14:07:19 +0000 (15:07 +0100)]
Change-Id: I1787e23ec7dccae45492f2d24ee8318a920c6143

scilab/CHANGES_5.4.X
scilab/modules/windows_tools/src/c/scilab_windows/FilesAssociations.c

index e8f46fb..5e93769 100644 (file)
@@ -181,6 +181,9 @@ Xcos
 * Bug #12351 fixed - "Save as" a diagram to a selected xcos file type, saved
                      it as zcos.
 
+* Bug #12350 fixed - Under Windows Explorer, opening a xcos/zcos file
+                     did not try to find an existing instance of Scilab.
+
 * Bug #12352 fixed - Critical error when closing a scope windows during
                      simulation fixed.
 
index d1b9c4f..ae7c730 100644 (file)
@@ -44,6 +44,7 @@ static BOOL IsASciNotesFileTST(char *chainefichier);
 /*--------------------------------------------------------------------------*/
 #define MSG_SCIMSG1 "%s -e load(getlongpathname('%s'));disp(getlongpathname('%s')+ascii(32)+'loaded');"
 #define MSG_SCIMSG2_XCOS "%s -e xcos(getlongpathname('%s'));"
+#define MSG_SCIMSG3_XCOS "execstr('xcos(getlongpathname(''%s''));','errcatch');"
 #define MSG_SCIMSG4 "%s -e exec(getlongpathname('%s'));"
 #define MSG_SCIMSG5_EDITOR "%s -e editor(getlongpathname('%s'));"
 /* we try to launch scilab editor */
@@ -54,8 +55,8 @@ static BOOL IsASciNotesFileTST(char *chainefichier);
 /* retourne TRUE si c'est le cas sinon FALSE */
 BOOL IsABinOrSavFile(char *chainefichier)
 {
-    if ( isGoodExtension(chainefichier, ".BIN") || isGoodExtension(chainefichier, ".SAV")
-            || isGoodExtension(chainefichier, ".SOD") )
+    if (isGoodExtension(chainefichier, ".BIN") || isGoodExtension(chainefichier, ".SAV")
+            || isGoodExtension(chainefichier, ".SOD"))
     {
         return TRUE;
     }
@@ -64,10 +65,10 @@ BOOL IsABinOrSavFile(char *chainefichier)
 /*--------------------------------------------------------------------------*/
 BOOL IsAScicosFile(char *chainefichier)
 {
-    if ( IsAScicosFileCOS(chainefichier) ||
+    if (IsAScicosFileCOS(chainefichier) ||
             IsAScicosFileCOSF(chainefichier) ||
             IsAScicosFileXCOS(chainefichier) ||
-            IsAScicosFileZCOS(chainefichier) )
+            IsAScicosFileZCOS(chainefichier))
     {
         return TRUE;
     }
@@ -96,9 +97,9 @@ BOOL IsAScicosFileZCOS(char *chainefichier)
 /*--------------------------------------------------------------------------*/
 BOOL IsASciNotesFile(char *chainefichier)
 {
-    if ( IsASciNotesFileSCE(chainefichier) ||
+    if (IsASciNotesFileSCE(chainefichier) ||
             IsASciNotesFileSCI(chainefichier) ||
-            IsASciNotesFileTST(chainefichier) )
+            IsASciNotesFileTST(chainefichier))
     {
         return TRUE;
     }
@@ -149,7 +150,7 @@ int CommandByFileExtension(char *fichier, int OpenCode, char *Cmd)
             case 0:
             default: /* -O Open file with editor */
             {
-                if ( (!HaveAnotherWindowScilab()) || (haveMutexClosingScilab()) )
+                if (!HaveAnotherWindowScilab() || haveMutexClosingScilab())
                 {
                     if (with_module("scinotes"))
                     {
@@ -200,24 +201,61 @@ int CommandByFileExtension(char *fichier, int OpenCode, char *Cmd)
 
             case 1: /* -X eXecute file */
             {
-                if ( IsABinOrSavFile(FinalFileName) == TRUE )
+                if (IsABinOrSavFile(FinalFileName) == TRUE)
                 {
                     /* C'est un fichier .BIN ou .SAV d'ou load */
                     wsprintf(Cmd, MSG_SCIMSG1, PathWScilex, FinalFileName, FinalFileName);
                 }
                 else
                 {
-                    if  ( IsAScicosFile(fichier) == TRUE )
+                    if (IsAScicosFile(fichier) == TRUE)
                     {
                         ExtensionFileIntoLowerCase(FinalFileName);
-                        if (with_module("xcos"))
+                        if (!HaveAnotherWindowScilab() || haveMutexClosingScilab())
                         {
-                            wsprintf(Cmd, MSG_SCIMSG2_XCOS, PathWScilex, FinalFileName);
+                            if (with_module("xcos"))
+                            {
+                                wsprintf(Cmd, MSG_SCIMSG2_XCOS, PathWScilex, FinalFileName);
+                            }
+                            else
+                            {
+                                MessageBox(NULL, "Please install xcos module.", "Error", MB_ICONSTOP);
+                                exit(0);
+                            }
                         }
                         else
                         {
-                            MessageBox(NULL, "Please install xcos module.", "Error", MB_ICONSTOP);
-                            exit(0);
+                            char *ScilabDestination = NULL;
+
+                            if (with_module("xcos"))
+                            {
+                                wsprintf(Cmd, MSG_SCIMSG3_XCOS, FinalFileName);
+                            }
+                            else
+                            {
+                                MessageBox(NULL, "Please install xcos module.", "Error", MB_ICONSTOP);
+                                exit(0);
+                            }
+
+                            ScilabDestination = getLastScilabFound();
+                            if (ScilabDestination)
+                            {
+                                SendCommandToAnotherScilab(MSG_SCIMSG7, ScilabDestination, Cmd);
+                                FREE(ScilabDestination);
+                                exit(0);
+                            }
+                            else
+                            {
+                                if (with_module("xcos"))
+                                {
+                                    wsprintf(Cmd, MSG_SCIMSG2_XCOS, PathWScilex, FinalFileName);
+                                }
+                                else
+                                {
+                                    MessageBox(NULL, "Please install xcos module.", "Error", MB_ICONSTOP);
+                                    exit(0);
+                                }
+                            }
                         }
                     }
                     else
@@ -249,7 +287,7 @@ static void ExtensionFileIntoLowerCase(char *fichier)
 
     tmpfile = strdup(fichier);
     buffer = strtok(tmpfile, ".");
-    while ( buffer = strtok(NULL, "."))
+    while (buffer = strtok(NULL, "."))
     {
         lastdot = buffer;
     }
@@ -264,9 +302,9 @@ static void ExtensionFileIntoLowerCase(char *fichier)
 static void ReplaceSlash(char *pathout, char *pathin)
 {
     int i = 0;
-    for ( i = 0; i < (int)strlen(pathin); i++)
+    for (i = 0; i < (int)strlen(pathin); i++)
     {
-        if ( pathin[i] == '\\' )
+        if (pathin[i] == '\\')
         {
             pathout[i] = '/';
         }
@@ -283,7 +321,7 @@ static BOOL isGoodExtension(char *chainefichier, char *ext)
     char *ExtensionFilename = PathFindExtension(chainefichier);
     if (ExtensionFilename)
     {
-        if ( _stricmp(ExtensionFilename, ext) == 0 )
+        if (_stricmp(ExtensionFilename, ext) == 0)
         {
             return TRUE;
         }