868a5e0680f2bf1bd890d6d79a544069899025ce
[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  *
15  */
16
17 package org.scilab.modules.scinotes.actions;
18
19 import java.beans.PropertyChangeEvent;
20 import java.beans.PropertyChangeListener;
21 import java.util.StringTokenizer;
22 import javax.swing.JMenuItem;
23 import javax.swing.KeyStroke;
24
25 import org.scilab.modules.gui.console.ScilabConsole;
26 import org.scilab.modules.gui.menuitem.MenuItem;
27 import org.scilab.modules.scinotes.SciNotes;
28 import org.scilab.modules.scinotes.ScilabEditorPane;
29
30 import org.scilab.modules.history_manager.HistoryManagement;
31
32 /**
33  * EvaluateSelectionAction class
34  * @author Bruno JOFRET
35  * @author Calixte DENIZET
36  */
37 public final class EvaluateSelectionAction extends DefaultAction {
38
39     /**
40      * serialVersionUID
41      */
42     private static final long serialVersionUID = 320938663765236236L;
43
44     /**
45      * Constructor
46      * @param name the name of the action
47      * @param editor SciNotes
48      */
49     public EvaluateSelectionAction(String name, SciNotes editor) {
50         super(name, editor);
51     }
52
53     /**
54      * doAction
55      */
56     public void doAction() {
57         /* Will do the job as if it was copy / paste in scilab Console */
58         ScilabEditorPane sep = getEditor().getTextPane();
59         String selection = sep.getCodeToExecute();
60         if (selection.compareTo("") != 0) {
61             StringTokenizer tokens = new StringTokenizer(selection, "\n");
62             String[] lines = new String[tokens.countTokens()];
63             int i = 0;
64             while (tokens.hasMoreTokens()) {
65                 lines[i++] = tokens.nextToken();
66             }
67             HistoryManagement.appendLinesToScilabHistory(lines, lines.length);
68             ScilabConsole.getConsole().getAsSimpleConsole().sendCommandsToScilab(selection, true, false);
69         }
70     }
71
72     /**
73      * createMenu
74      * @param label label of the menu
75      * @param editor scinotes
76      * @param key KeyStroke
77      * @return MenuItem
78      */
79     public static MenuItem createMenu(String label, final SciNotes editor, KeyStroke key) {
80         StringTokenizer token = new StringTokenizer(label, ";\uff1b");
81         final String label1 = token.nextToken();
82         final String label2 = token.nextToken();
83         final MenuItem menuitem = createMenu(label1, null, new EvaluateSelectionAction(label1, editor), key);
84         if (!ScilabConsole.isExistingConsole()) { // Only available in STD mode
85             ((JMenuItem) menuitem.getAsSimpleMenuItem()).setEnabled(false);
86         }
87         ((JMenuItem) menuitem.getAsSimpleMenuItem()).addPropertyChangeListener(new PropertyChangeListener() {
88             public void propertyChange(PropertyChangeEvent e) {
89                 if (editor.getTextPane() != null) {
90                     String select = editor.getTextPane().getSelectedText();
91                     if (select == null) {
92                         menuitem.setText(label2);
93                     } else {
94                         menuitem.setText(label1);
95                     }
96                 }
97             }
98         });
99
100         return menuitem;
101     }
102 }