1659327e55470b477ce30710f25782dd04458061
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / tab / ScilabTab.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent Couvert
4  * Copyright (C) 2007 - INRIA - Bruno JOFRET
5  * 
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at    
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 package org.scilab.modules.gui.tab;
15
16 import org.scilab.modules.gui.bridge.ScilabBridge;
17 import org.scilab.modules.gui.canvas.Canvas;
18 import org.scilab.modules.gui.checkbox.CheckBox;
19 import org.scilab.modules.gui.console.Console;
20 import org.scilab.modules.gui.container.ScilabContainer;
21 import org.scilab.modules.gui.dockable.Dockable;
22 import org.scilab.modules.gui.editbox.EditBox;
23 import org.scilab.modules.gui.events.callback.CallBack;
24 import org.scilab.modules.gui.frame.Frame;
25 import org.scilab.modules.gui.label.Label;
26 import org.scilab.modules.gui.listbox.ListBox;
27 import org.scilab.modules.gui.menubar.MenuBar;
28 import org.scilab.modules.gui.popupmenu.PopupMenu;
29 import org.scilab.modules.gui.pushbutton.PushButton;
30 import org.scilab.modules.gui.radiobutton.RadioButton;
31 import org.scilab.modules.gui.slider.Slider;
32 import org.scilab.modules.gui.textbox.TextBox;
33 import org.scilab.modules.gui.toolbar.ToolBar;
34 import org.scilab.modules.gui.uielement.UIElement;
35 import org.scilab.modules.gui.utils.Position;
36 import org.scilab.modules.gui.utils.Size;
37 import org.scilab.modules.gui.utils.UIElementMapper;
38 import org.scilab.modules.gui.window.Window;
39
40 /**
41  * Class for tabs in Scilab GUIs
42  * @author Vincent COUVERT
43  * @author Bruno JOFRET
44  */
45 public class ScilabTab extends ScilabContainer implements Tab {
46
47         /**
48         **      Just let the Bridge do his job translating Scilab thinking to Java
49         */
50         private SimpleTab component;
51         
52         /**
53          * Constructor
54          * @param name - name of the Tab
55          */
56         protected ScilabTab(String name) {
57                 component = ScilabBridge.createTab(name);
58    }
59
60         /**
61          * Creates a Scilab Tab
62          * @param name the name of the tab (used to identify it)
63          * @return the created Scilab Tab
64          */
65         public static Tab createTab(String name) {
66                 return new ScilabTab(name);
67         }
68
69         /**
70          * Gets the GUI Tab.
71          * @return The GUI dummy Tab.
72          */
73         public SimpleTab getAsSimpleTab() {
74                 return component;
75         }
76
77         /**
78          * Gets the title of a Scilab tab
79          * @return the title of the frame
80          * @see org.scilab.modules.gui.tab.Tab#getTitle()
81          */
82         public String getName() {
83                 return ScilabBridge.getName(this);
84         }
85
86         /**
87          * Sets the name of a Scilab tab
88          * @param newTabName the name to set to the tab
89          * @see org.scilab.modules.gui.tab.Tab#setName(java.lang.String)
90          */
91         public void setName(String newTabName) {
92                 ScilabBridge.setName(this, newTabName);
93         }
94
95         /**
96          * Draws a Scilab tab
97          * @see org.scilab.modules.gui.UIElement#draw()
98          */
99         public void draw() {
100                 ScilabBridge.draw(this);
101         }
102
103         /**
104          * Gets the dimensions (width and height) of a Scilab tab
105          * @return the dimension of the tab
106          * @see org.scilab.modules.gui.UIElement#getDims()
107          */
108         public Size getDims() {
109                 return ScilabBridge.getDims(this);
110         }
111
112         /**
113          * Gets the position (X-coordinate and Y-coordinate) of a Scilab tab
114          * @return the position of the tab
115          * @see org.scilab.modules.gui.UIElement#getPosition()
116          */
117         public Position getPosition() {
118                 return ScilabBridge.getPosition(this);
119         }
120
121         /**
122          * Gets the visibility status of a Scilab frame
123          * @return the visibility status of the frame (true if the frame is visible, false if not)
124          * @see org.scilab.modules.gui.UIElement#isVisible()
125          */
126         public boolean isVisible() {
127                 return ScilabBridge.isVisible(this);
128         }
129
130         /**
131          * Sets the dimensions (width and height) of a Scilab frame
132          * @param newSize the dimensiosn we want to set to the tab
133          * @see org.scilab.modules.gui.UIElement#setDims(org.scilab.modules.gui.utils.Size)
134          */
135         public void setDims(Size newSize) {
136                 ScilabBridge.setDims(this, newSize);
137         }
138
139         /**
140          * Sets the position (X-coordinate and Y-coordinate) of a Scilab frame
141          * @param newPosition the position we want to set to the tab
142          * @see org.scilab.modules.gui.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
143          */
144         public void setPosition(Position newPosition) {
145                 ScilabBridge.setPosition(this, newPosition);
146         }
147
148         /**
149          * Sets the visibility status of a Scilab frame
150          * @param newVisibleState the visibility status we want to set to the frame (true to set the frame visible, false else)
151          * @see org.scilab.modules.gui.UIElement#setVisible(boolean)
152          */
153         public void setVisible(boolean newVisibleState) {
154                 ScilabBridge.setVisible(this, newVisibleState);
155         }
156
157         /**
158          * Add a member (dockable element) to container and returns its index
159          * @param member the member to add
160          * @return index of member in ArrayList
161          */
162         public int addMember(Canvas member) {
163                 updateMenuBar(member);
164                 updateToolBar(member);
165                 updateInfoBar(member);
166                 return ScilabBridge.addMember(this, member);
167         }
168
169         /**
170          * Add a member (dockable element) to container and returns its index
171          * @param member the member to add
172          * @return index of member in ArrayList
173          */
174         public int addMember(Console member) {
175                 updateMenuBar(member);
176                 updateToolBar(member);
177                 updateInfoBar(member);
178                 return ScilabBridge.addMember(this, member);
179         }
180         
181         /**
182          * Add a member (dockable element) to container and returns its index
183          * @param member the member to add
184          * @return index of member in ArrayList
185          * @see org.scilab.modules.gui.container.Container#addMember(org.scilab.modules.gui.dockable.Dockable)
186          */
187         @Override
188         public int addMember(Dockable member) {
189                 // FIXME must be coded
190                 //return addMember(member);
191                 throw new UnsupportedOperationException();
192         }
193         
194         /**
195          * Add a member (dockable element) to container and returns its index
196          * @param member the member to add
197          * @return index of member in ArrayList
198          */
199         public int addMember(Frame member) {
200                 return ScilabBridge.addMember(this, member);
201         }
202
203         /**
204          * We want to be able to add directly a pushbutton in a Tab.
205          * @param member the pushbutton to add
206          * @return the position of the pushbutton in the member list.
207          */
208         public int addMember(PushButton member) {
209                 return ScilabBridge.addMember(this, member);
210         }
211
212         /**
213          * We want to be able to add directly a editbox in a Tab.
214          * @param member the editbox to add
215          * @return the position of the editbox in the member list.
216          */
217         public int addMember(EditBox member) {
218                 return ScilabBridge.addMember(this, member);
219         }
220
221         /**
222          * We want to be able to add directly a label in a Tab.
223          * @param member the label to add
224          * @return the position of the label in the member list.
225          */
226         public int addMember(Label member) {
227                 return ScilabBridge.addMember(this, member);
228         }
229
230         /**
231          * We want to be able to add directly a checkbox in a Tab.
232          * @param member the checkbox to add
233          * @return the position of the checkbox in the member list.
234          */
235         public int addMember(CheckBox member) {
236                 return ScilabBridge.addMember(this, member);
237         }
238
239         /**
240          * We want to be able to add directly a RadioButton in a Tab.
241          * @param member the RadioButton to add
242          * @return the position of the RadioButton in the member list.
243          */
244         public int addMember(RadioButton member) {
245                 return ScilabBridge.addMember(this, member);
246         }
247
248         /**
249          * We want to be able to add directly a Slider in a Tab.
250          * @param member the Slider to add
251          * @return the position of the Slider in the member list.
252          */
253         public int addMember(Slider member) {
254                 return ScilabBridge.addMember(this, member);
255         }
256
257         /**
258          * We want to be able to add directly a ListBox in a Tab.
259          * @param member the ListBox to add
260          * @return the position of the ListBox in the member list.
261          */
262         public int addMember(ListBox member) {
263                 return ScilabBridge.addMember(this, member);
264         }
265
266         /**
267          * We want to be able to add directly a PopupMenu in a Tab.
268          * @param member the PopupMenu to add
269          * @return the position of the PopupMenu in the member list.
270          */
271         public int addMember(PopupMenu member) {
272                 return ScilabBridge.addMember(this, member);
273         }
274         
275         /**
276          * We want to be able to remove directly a Canvas from a Tab.
277          * @param member canvas to remove 
278          */
279         public void removeMember(Canvas member) {
280                 ScilabBridge.removeMember(this, member);
281         }
282         
283         /**
284          * Destroy the tab.
285          */
286         public void close() {
287                 // remove the tab from the parent
288                 getParentWindow().removeTab(this);
289                 this.setParentWindowId(-1);
290                 
291         }
292
293         /**
294          * Get the current status of the Tab in its parent
295          * @return true is the tab is the tab currently "on top" in its parent
296          * @see org.scilab.modules.gui.tab.Tab#isCurrentTab()
297          */
298         public boolean isCurrentTab() {
299                 return ScilabBridge.isCurrentTab(this);
300         }
301
302         /**
303          * Set the parent window id for this tab
304          * @param id the id of the parent window
305          * @see org.scilab.modules.gui.tab.Tab#setParentWindowId(int)
306          */
307         public void setParentWindowId(int id) {
308                 ScilabBridge.setParentWindowId(this, id);
309         }
310         
311         /**
312          * Get the parent window id for this tab
313          * @return the id of the parent window
314          * @see org.scilab.modules.gui.tab.Tab#getParentWindowId()
315          */
316         public int getParentWindowId() {
317                 return ScilabBridge.getParentWindowId(this);
318         }
319         
320         /**
321          * Update the Tab MenuBar.
322          * If the element added has its own, the Tab will take this
323          * one as its.
324          * @param element : the element added.
325          */
326         private void updateMenuBar(UIElement element) {
327                 if (element.getMenuBar() != null) {
328                         this.addMenuBar(element.getMenuBar());
329                 }
330         }
331         
332         /**
333          * Add a MenuBar to this Tab
334          * @Override the UIElement behavior
335          * Explicitly set the MenuBar in the Tab implementation.
336          * @param menuBar : The MenuBar to set.
337          * @see org.scilab.modules.gui.uielement.ScilabUIElement#addMenuBar(org.scilab.modules.gui.menubar.MenuBar)
338          */
339         @Override
340         public void addMenuBar(MenuBar menuBar) {
341                 super.addMenuBar(menuBar);
342                 this.getAsSimpleTab().setMenuBar(menuBar);
343         }
344         
345         /**
346          * Update the Tab ToolBar.
347          * If the element added has its own, the Tab will take this
348          * one as its.
349          * @param element : the element added.
350          */
351         private void updateToolBar(UIElement element) {
352                 if (element.getToolBar() != null) {
353                         this.addToolBar(element.getToolBar());
354                 }
355         }
356         
357         /**
358          * Add a InfoBar to this Tab
359          * @Override the UIElement behavior
360          * Explicitly set the InfoBar in the Tab implementation.
361          * @param infoBar the InfoBar to set.
362          * @see org.scilab.modules.gui.uielement.ScilabUIElement#addInfoBar(org.scilab.modules.gui.textbox.TextBox)
363          */
364         @Override
365         public void addInfoBar(TextBox infoBar) {
366                 super.addInfoBar(infoBar);
367                 this.getAsSimpleTab().setInfoBar(infoBar);
368         }
369         
370         /**
371          * Update the Tab InfoBar.
372          * If the element added has its own, the Tab will take this
373          * one as its.
374          * @param element : the element added.
375          */
376         private void updateInfoBar(UIElement element) {
377                 if (element.getInfoBar() != null) {
378                         this.addInfoBar(element.getInfoBar());
379                 }
380         }
381
382         /**
383          * Add a ToolBar to this Tab
384          * @Override the UIElement behavior
385          * Explicitly set the ToolBar in the Tab implementation.
386          * @param toolBar : The ToolBar to set.
387          * @see org.scilab.modules.gui.uielement.ScilabUIElement#addToolBar(org.scilab.modules.gui.toolbar.ToolBar)
388          */
389         @Override
390         public void addToolBar(ToolBar toolBar) {
391                 super.addToolBar(toolBar);
392                 this.getAsSimpleTab().setToolBar(toolBar);
393         }
394
395         /**
396          * Set the callback of the tab
397          * @param callback the CallBack to set
398          */
399         public void setCallback(CallBack callback) {
400                 ScilabBridge.setCallback(this, callback);
401         }
402         
403         /**
404          * @return parent window of the tab object
405          */
406         public Window getParentWindow() {
407                 return (Window) UIElementMapper.getCorrespondingUIElement(getParentWindowId());
408         }
409 }
410