GPL + CeCILL Header change
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / EvaluateSelectionAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Bruno JOFRET
4  * Copyright (C) 2010 - Calixte DENIZET
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  * === LICENSE_END ===
15  *
16  */
17
18 package org.scilab.modules.scinotes.actions;
19
20 import java.beans.PropertyChangeEvent;
21 import java.beans.PropertyChangeListener;
22 import java.util.StringTokenizer;
23 import javax.swing.JMenuItem;
24 import javax.swing.KeyStroke;
25
26 import org.scilab.modules.gui.console.ScilabConsole;
27 import org.scilab.modules.gui.menuitem.MenuItem;
28 import org.scilab.modules.scinotes.SciNotes;
29 import org.scilab.modules.scinotes.ScilabEditorPane;
30
31 import org.scilab.modules.history_manager.HistoryManagement;
32
33 /**
34  * EvaluateSelectionAction class
35  * @author Bruno JOFRET
36  * @author Calixte DENIZET
37  */
38 public final class EvaluateSelectionAction extends DefaultAction {
39
40     /**
41      * serialVersionUID
42      */
43     private static final long serialVersionUID = 320938663765236236L;
44
45     /**
46      * Constructor
47      * @param name the name of the action
48      * @param editor SciNotes
49      */
50     public EvaluateSelectionAction(String name, SciNotes editor) {
51         super(name, editor);
52     }
53
54     /**
55      * doAction
56      */
57     public void doAction() {
58         /* Will do the job as if it was copy / paste in scilab Console */
59         ScilabEditorPane sep = getEditor().getTextPane();
60         String selection = sep.getCodeToExecute();
61         if (selection.compareTo("") != 0) {
62             StringTokenizer tokens = new StringTokenizer(selection, "\n");
63             String[] lines = new String[tokens.countTokens()];
64             int i = 0;
65             while (tokens.hasMoreTokens()) {
66                 lines[i++] = tokens.nextToken();
67             }
68             HistoryManagement.appendLinesToScilabHistory(lines, lines.length);
69             ScilabConsole.getConsole().getAsSimpleConsole().sendCommandsToScilab(selection, true, false);
70         }
71     }
72
73     /**
74      * createMenu
75      * @param label label of the menu
76      * @param editor scinotes
77      * @param key KeyStroke
78      * @return MenuItem
79      */
80     public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
81         StringTokenizer token = new StringTokenizer(label, ";\uff1b");
82         final String label1 = token.nextToken();
83         final String label2 = token.nextToken();
84         final MenuItem menuitem = createMenu(label1, null, new EvaluateSelectionAction(label1, editor), key);
85         if (!ScilabConsole.isExistingConsole()) { // Only available in STD mode
86             ((JMenuItem) menuitem.getAsSimpleMenuItem()).setEnabled(false);
87         }
88         ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
89             public void propertyChange(PropertyChangeEvent e) {
90                 if (editor.getTextPane() != null) {
91                     String select = editor.getTextPane().getSelectedText();
92                     if (select == null) {
93                         menuitem.setText(label2);
94                     } else {
95                         menuitem.setText(label1);
96                     }
97                 }
98             }
99         });
100
101         return menuitem;
102     }
103 }