* Bug 10964 fixed: now Scinotes can execute the current file in NW mode
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / EvaluateSelectionAction.java
index 9c44b1a..4c67216 100644 (file)
@@ -1,12 +1,16 @@
 /*
  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  * Copyright (C) 2009 - DIGITEO - Bruno JOFRET
+ * Copyright (C) 2010 - Calixte DENIZET
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ * Copyright (C) 2021 - St├ęphane MOTTELET
  *
- * 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
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
  *
  */
 
@@ -23,10 +27,15 @@ import org.scilab.modules.gui.menuitem.MenuItem;
 import org.scilab.modules.scinotes.SciNotes;
 import org.scilab.modules.scinotes.ScilabEditorPane;
 
+import org.scilab.modules.history_manager.HistoryManagement;
+import org.scilab.modules.action_binding.highlevel.ScilabInterpreterManagement;
+import org.scilab.modules.console.SciPromptView;
+import org.scilab.modules.console.AdvCLIManagement;
+
 /**
  * EvaluateSelectionAction class
  * @author Bruno JOFRET
- *
+ * @author Calixte DENIZET
  */
 public final class EvaluateSelectionAction extends DefaultAction {
 
@@ -49,10 +58,34 @@ public final class EvaluateSelectionAction extends DefaultAction {
      */
     public void doAction() {
         /* Will do the job as if it was copy / paste in scilab Console */
-        ScilabEditorPane sep = (ScilabEditorPane) getEditor().getTextPane();
+        ScilabEditorPane sep = getEditor().getTextPane();
         String selection = sep.getCodeToExecute();
         if (selection.compareTo("") != 0) {
-            ScilabConsole.getConsole().getAsSimpleConsole().sendCommandsToScilab(selection, true, false);
+            StringTokenizer tokens = new StringTokenizer(selection, "\n");
+            String[] lines = new String[tokens.countTokens()];
+            int i = 0;
+            while (tokens.hasMoreTokens()) {
+                lines[i++] = tokens.nextToken();
+            }
+            if (ScilabConsole.isExistingConsole())
+            {
+                HistoryManagement.appendLinesToScilabHistory(lines, lines.length);
+                ScilabConsole.getConsole().getAsSimpleConsole().sendCommandsToScilab(selection, true, false);
+            } else {
+                /* This happens when SciNotes is launched as standalone (ie without
+                 * Scilab) or Scilab launched in -nw mode */
+                new Thread(() -> {
+                    try {
+                        System.out.println(selection);
+                        ScilabInterpreterManagement.synchronousScilabExec(selection);
+                        System.out.println();
+                        System.out.print(AdvCLIManagement.GetCurrentPrompt());
+                    }
+                    catch (ScilabInterpreterManagement.InterpreterException e) {
+                        System.out.println(e.getMessage());
+                    }
+                }).start();
+            }
         }
     }
 
@@ -64,7 +97,7 @@ public final class EvaluateSelectionAction extends DefaultAction {
      * @return MenuItem
      */
     public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
-        StringTokenizer token = new StringTokenizer(label, ";");
+        StringTokenizer token = new StringTokenizer(label, ";\uff1b");
         final String label1 = token.nextToken();
         final String label2 = token.nextToken();
         final MenuItem menuitem = createMenu(label1, null, new EvaluateSelectionAction(label1, editor), key);
@@ -72,15 +105,17 @@ public final class EvaluateSelectionAction extends DefaultAction {
             ((JMenuItem) menuitem.getAsSimpleMenuItem()).setEnabled(false);
         }
         ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
-                public void propertyChange(PropertyChangeEvent e) {
+            public void propertyChange(PropertyChangeEvent e) {
+                if (editor.getTextPane() != null) {
                     String select = editor.getTextPane().getSelectedText();
                     if (select == null) {
-                        menuitem.setText(label1);
-                    } else {
                         menuitem.setText(label2);
+                    } else {
+                        menuitem.setText(label1);
                     }
                 }
-            });
+            }
+        });
 
         return menuitem;
     }