61eafc5e6ca240550ed4004fd16436922b00330f
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / events / callback / CommonCallBack.java
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12 package org.scilab.modules.gui.events.callback;
13
14 import java.awt.event.ActionEvent;
15
16 import javax.swing.AbstractAction;
17
18 import org.scilab.modules.graphic_objects.graphicObject.CallBack;
19 import org.scilab.modules.gui.events.GlobalEventFilter;
20 import org.scilab.modules.gui.events.GlobalEventWatcher;
21
22 /**
23  * Abstract class to manage all callbacks.
24  * Those that need Java code, and those that need Scilab execution.
25  *
26  * @author bruno
27  *
28  */
29 public abstract class CommonCallBack extends AbstractAction {
30
31     private static final long serialVersionUID = -919820581757579168L;
32
33     private CallBack callback;
34
35     /**
36      * @param command the callback command
37      * @param callbackType the callback command type
38      */
39     public CommonCallBack(String command) {
40         callback = new CallBack(command, CallBack.UNTYPED);
41     }
42     /**
43      * @param command the callback command
44      * @param callbackType the callback command type
45      */
46     public CommonCallBack(String command, int callbackType) {
47         callback = new CallBack(command, callbackType);
48     }
49
50     /**
51      * Callback function that will be call on some event.
52      */
53     public abstract void callBack();
54
55     /**
56      * Create a Callback from Scilab data
57      * @param command the instruction
58      * @param callbackType the type of the instruction
59      * @return the Callback
60      */
61     public static CommonCallBack createCallback(String command, int callbackType) {
62         CommonCallBack callback = null;
63         switch (callbackType) {
64         case CallBack.JAVA :
65             callback = JavaCallBack.create(command);
66             break;
67         case CallBack.JAVA_OUT_OF_XCLICK_AND_XGETMOUSE :
68             callback = JavaCallBack.createOutOfXclickAndXgetmouse(command);
69             break;
70         case CallBack.SCILAB_INSTRUCTION_WITHOUT_GCBO :
71             callback = ScilabCallBack.create(command);
72             break;
73         case CallBack.SCILAB_OUT_OF_XCLICK_AND_XGETMOUSE :
74             callback = ScilabCallBack.createOutOfXclickAndXgetmouse(command);
75             break;
76         default:
77             callback = ScilabCallBack.create(command);
78             break;
79         }
80         return callback;
81     }
82
83     /**
84      * Create a Callback from Scilab data
85      * @param command the instruction
86      * @param callbackType the type of the instruction
87      * @param objectUID the object UID
88      * @return the Callback
89      */
90     public static CommonCallBack createCallback(String command, int callbackType, String objectUID) {
91         CommonCallBack callback = null;
92         switch (callbackType) {
93         case CallBack.JAVA :
94             callback = JavaCallBack.create(command);
95             break;
96         case CallBack.JAVA_OUT_OF_XCLICK_AND_XGETMOUSE :
97             callback = JavaCallBack.createOutOfXclickAndXgetmouse(command);
98             break;
99         case CallBack.SCILAB_INSTRUCTION_WITHOUT_GCBO :
100             callback = ScilabCallBack.create(command);
101             break;
102         case CallBack.SCILAB_OUT_OF_XCLICK_AND_XGETMOUSE :
103             callback = ScilabCallBack.createOutOfXclickAndXgetmouse(command);
104             break;
105         default:
106             callback = ScilabCallBack.create("if exists(\"gcbo\") then %oldgcbo = gcbo; end;"
107                     + "gcbo = getcallbackobject(\"" + objectUID + "\");"
108                     + command
109                     + ";if exists(\"%oldgcbo\") then gcbo = %oldgcbo; else clear gcbo; end;");
110             break;
111         }
112         return callback;
113     }
114
115     /**
116      * To match the standard Java Action management.
117      * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
118      * @param e The event that launch the callback.
119      */
120     public void actionPerformed(ActionEvent e) {
121         if (!GlobalEventWatcher.isActivated()) {
122             callBack();
123         } else {
124             if (this.callback.getCommand() != null) {
125                 GlobalEventFilter.filterCallback(this.callback.getCommand());
126             }
127         }
128     }
129
130     /**
131      * @return the command of the callback
132      */
133     public String getCommand() {
134         return callback.getCommand();
135     }
136 }