Refactorization of the management of the actions in menus, button, shortcuts
[scilab.git] / scilab / modules / scinotes / src / java / org / scilab / modules / scinotes / actions / ExecuteFileIntoScilabAction.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009 - DIGITEO - Bruno JOFRET
4  * Copyright (C) 2009 - DIGITEO - Allan CORNET
5  * Copyright (C) 2010 - Calixte DENIZET
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  */
14
15 package org.scilab.modules.scinotes.actions;
16
17 import javax.swing.KeyStroke;
18
19 import org.scilab.modules.gui.console.ScilabConsole;
20 import org.scilab.modules.gui.menuitem.MenuItem;
21 import org.scilab.modules.gui.pushbutton.PushButton;
22 import org.scilab.modules.gui.messagebox.ScilabModalDialog;
23 import org.scilab.modules.gui.messagebox.ScilabModalDialog.AnswerOption;
24 import org.scilab.modules.gui.messagebox.ScilabModalDialog.ButtonType;
25 import org.scilab.modules.gui.messagebox.ScilabModalDialog.IconType;
26 import org.scilab.modules.scinotes.SciNotes;
27 import org.scilab.modules.scinotes.ScilabDocument;
28 import org.scilab.modules.scinotes.utils.SciNotesMessages;
29
30 /**
31  * ExecuteFileIntoScilabAction Class
32  * @author Bruno JOFRET
33  * @author Allan CORNET
34  * @author Calixte DENIZET
35  *
36  */
37 public final class ExecuteFileIntoScilabAction extends DefaultAction {
38
39     /**
40      * serialVersionUID
41      */
42     private static final long serialVersionUID = -8625083632641564277L;
43
44     /**
45      * Constructor
46      * @param name the name of the action
47      * @param editor SciNotes
48      */
49     public ExecuteFileIntoScilabAction(String name, SciNotes editor) {
50         super(name, editor);
51     }
52
53     /**
54      * Execute the file into Scilab
55      * @param editor the Scilab editor
56      */
57     private void executeFile(SciNotes editor) {
58         String filePath = editor.getTextPane().getName();
59         if (filePath == null) {
60             return;
61         }
62
63         filePath = filePath.replaceAll("\"", "\"\"");
64         filePath = filePath.replaceAll("'", "''");
65         if (filePath.compareTo("") != 0) {
66             String cmdToExec = "exec('" + filePath + "', -1)";
67             try {
68                 ScilabConsole.getConsole().getAsSimpleConsole().sendCommandsToScilab(cmdToExec, true, false);
69             } catch (NoClassDefFoundError e) {
70                 /* This happens when SciNotes is launch as standalone (ie without
71                  * Scilab) */
72                 ScilabModalDialog.show(editor, SciNotesMessages.COULD_NOT_FIND_CONSOLE);
73             }
74         }
75     }
76
77     /**
78      * doAction
79      */
80     public void doAction() {
81         SciNotes editor = getEditor();
82
83         if (((ScilabDocument) getEditor().getTextPane().getDocument()).isContentModified()) {
84             if (ScilabModalDialog.show(getEditor(), SciNotesMessages.EXECUTE_WARNING, SciNotesMessages.EXECUTE_FILE_INTO_SCILAB,
85                                        IconType.WARNING_ICON, ButtonType.CANCEL_OR_SAVE_AND_EXECUTE) == AnswerOption.SAVE_EXECUTE_OPTION) {
86                 if (editor.save(getEditor().getTabPane().getSelectedIndex(), false)) {
87                     this.executeFile(editor);
88                 }
89             }
90         } else {
91             this.executeFile(editor);
92         }
93     }
94
95     /**
96      * createButton
97      * @param tooltip the tooltip
98      * @param icon an icon name searched in SCI/modules/gui/images/icons/
99      * @param editor SciNotes
100      * @return PushButton
101      */
102     public static PushButton createButton(String tooltip, String icon, SciNotes editor) {
103         return createButton(tooltip, icon, new ExecuteFileIntoScilabAction(tooltip, editor));
104     }
105
106     /**
107      * createMenu
108      * @param label label of the menu
109      * @param editor SciNotes
110      * @param key KeyStroke
111      * @return MenuItem
112      */
113     public static MenuItem createMenu(String label, SciNotes editor, KeyStroke key) {
114         return createMenu(label, null, new ExecuteFileIntoScilabAction(label, editor), key);
115     }
116 }