New Java Help Browser for Scilab.
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / tab / SwingScilabTab.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 20072008 - INRIA - Vincent Couvert
4  * Copyright (C) 2007 - INRIA - Bruno JOFRET
5  * Copyright (C) 2007 - INRIA - Marouane BEN JELLOUL
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.gui.bridge.tab;
16
17 import javax.swing.Action;
18
19 import org.flexdock.docking.DockingConstants;
20 import org.flexdock.view.View;
21 import org.scilab.modules.gui.bridge.canvas.ScrolledSwingScilabCanvas;
22 import org.scilab.modules.gui.bridge.checkbox.SwingScilabCheckBox;
23 import org.scilab.modules.gui.bridge.console.SwingScilabConsole;
24 import org.scilab.modules.gui.bridge.editbox.SwingScilabEditBox;
25 import org.scilab.modules.gui.bridge.frame.SwingScilabFrame;
26 import org.scilab.modules.gui.bridge.helpbrowser.SwingScilabHelpBrowser;
27 import org.scilab.modules.gui.bridge.label.SwingScilabLabel;
28 import org.scilab.modules.gui.bridge.listbox.SwingScilabListBox;
29 import org.scilab.modules.gui.bridge.popupmenu.SwingScilabPopupMenu;
30 import org.scilab.modules.gui.bridge.pushbutton.SwingScilabPushButton;
31 import org.scilab.modules.gui.bridge.radiobutton.SwingScilabRadioButton;
32 import org.scilab.modules.gui.bridge.slider.SwingScilabSlider;
33 import org.scilab.modules.gui.canvas.Canvas;
34 import org.scilab.modules.gui.checkbox.CheckBox;
35 import org.scilab.modules.gui.console.Console;
36 import org.scilab.modules.gui.dockable.Dockable;
37 import org.scilab.modules.gui.editbox.EditBox;
38 import org.scilab.modules.gui.events.callback.CallBack;
39 import org.scilab.modules.gui.frame.Frame;
40 import org.scilab.modules.gui.helpbrowser.HelpBrowser;
41 import org.scilab.modules.gui.label.Label;
42 import org.scilab.modules.gui.listbox.ListBox;
43 import org.scilab.modules.gui.menubar.MenuBar;
44 import org.scilab.modules.gui.popupmenu.PopupMenu;
45 import org.scilab.modules.gui.pushbutton.PushButton;
46 import org.scilab.modules.gui.radiobutton.RadioButton;
47 import org.scilab.modules.gui.slider.Slider;
48 import org.scilab.modules.gui.tab.SimpleTab;
49 import org.scilab.modules.gui.textbox.TextBox;
50 import org.scilab.modules.gui.toolbar.ToolBar;
51 import org.scilab.modules.gui.utils.BarUpdater;
52 import org.scilab.modules.gui.utils.Position;
53 import org.scilab.modules.gui.utils.Size;
54
55 /**
56  * Swing implementation for Scilab tabs in GUIs
57  * This implementation uses FlexDock package
58  * @author Bruno JOFRET
59  * @author Vincent COUVERT
60  * @author Marouane BEN JELLOUL
61  */
62 public class SwingScilabTab extends View implements SimpleTab {
63         
64         private static final long serialVersionUID = 1L;
65         
66         private static final int TOP_LAYER = 0;
67         
68         private static final int BOTTOM_LAYER = 1;
69
70         private int parentWindowId;
71         
72         private MenuBar menuBar;
73         
74         private ToolBar toolBar;
75         
76         private TextBox infoBar;
77
78         /**
79          * Constructor
80          * @param name the name of the tab (used to identify it)
81          */
82         public SwingScilabTab(String name) {
83                 super(name, name, name);
84                 // This button is "overloaded" when we add a callback
85                 //this.addAction(DockingConstants.CLOSE_ACTION);
86                 // Removed because make JOGL crash when "Unpin"
87                 //this.addAction(DockingConstants.PIN_ACTION);
88                 this.addAction(DockingConstants.ACTIVE_WINDOW);
89                 this.setLayout(null);
90         }
91
92         /**
93      * Repaint it
94      */
95         public void repaint() {
96                 super.repaint();
97                 if (isActive()) {
98                         BarUpdater.updateBars(getParentWindowId(), getMenuBar(), getToolBar(), getInfoBar(), getName());
99                 }
100         }
101         
102         /**
103          * Sets the Name of a swing Scilab tab
104          * @param newTabName the Name of the tab
105          * @see org.scilab.modules.gui.tab.Tab#setName()
106          */
107         public void setName(String newTabName) {
108                 setTitle(newTabName, true);
109         }
110
111         /**
112          * Gets the title of a swing Scilab tab
113          * @return the title of the tab
114          * @see org.scilab.modules.gui.tab.Tab#getTitle()
115          */
116         public String getName() {
117                 return this.getTitle();
118         }
119
120         /**
121          * Draws a swing Scilab tab
122          * @see org.scilab.modules.gui.uielement.UIElement#draw()
123          */
124         public void draw() {
125                 this.setVisible(true);
126                 this.doLayout();
127         }
128         
129         /**
130          * Gets the dimensions (width and height) of a swing Scilab tab
131          * @return the dimensions of the tab
132          * @see org.scilab.modules.gui.uielement.UIElement#getDims()
133          */
134         public Size getDims() {
135                 return new Size(this.getSize().width, this.getSize().height);
136         }
137
138         /**
139          * Gets the position (X-coordinate and Y-coordinate) of a swing Scilab tab
140          * @return the position of the tab
141          * @see org.scilab.modules.gui.uielement.UIElement#getPosition()
142          */
143         public Position getPosition() {
144                 return new Position(this.getX(), this.getY());
145         }
146
147         /**
148          * Sets the dimensions (width and height) of a swing Scilab tab
149          * @param newSize the dimensions we want to set to the tab
150          * @see org.scilab.modules.gui.uielement.UIElement#setDims(org.scilab.modules.gui.utils.Size)
151          */
152         public void setDims(Size newSize) {
153                 this.setSize(newSize.getWidth(), newSize.getHeight());
154         }
155
156         /**
157          * Sets the position (X-coordinate and Y-coordinate) of a swing Scilab tab
158          * @param newPosition the position we want to set to the tab
159          * @see org.scilab.modules.gui.uielement.UIElement#setPosition(org.scilab.modules.gui.utils.Position)
160          */
161         public void setPosition(Position newPosition) {
162                 this.setLocation(newPosition.getX(), newPosition.getY());
163         }
164
165         /**
166          * Add a member (dockable element) to container and returns its index
167          * @param member the member to add
168          * @return index of member in ArrayList
169          */
170         public int addMember(Canvas member) {
171                 // TODO : Check wether we want a Canvas in a Tab or not.
172                 return this.addMember((ScrolledSwingScilabCanvas) member.getAsSimpleCanvas());
173         }
174         
175         /**
176          * Add a member (dockable element) to container and returns its index
177          * @param member the member to add
178          * @return index of member in ArrayList
179          */
180         private int addMember(ScrolledSwingScilabCanvas member) {
181                 // TODO : Check wether we want a Canvas in a Tab or not.
182                 this.setContentPane(member);
183                 return this.getComponentZOrder(member);
184         }
185         
186         /**
187          * Add a member (dockable element) to container and returns its index
188          * @param member the member to add
189          * @return index of member in ArrayList
190          */
191         public int addMember(Console member) {
192                 return this.addMember((SwingScilabConsole) member.getAsSimpleConsole());
193         }
194
195         /**
196          * Add a member (dockable element) to container and returns its index
197          * @param member the member to add
198          * @return index of member in ArrayList
199          */
200         private int addMember(SwingScilabConsole member) {
201                 this.setContentPane(member);
202                 return this.getComponentZOrder(member);
203         }
204         
205         /**
206          * Add a member (dockable element) to container and returns its index
207          * @param member the member to add
208          * @return index of member in ArrayList
209          */
210         public int addMember(HelpBrowser member) {
211                 return this.addMember((SwingScilabHelpBrowser) member.getAsSimpleHelpBrowser());
212         }
213
214         /**
215          * Add a member (dockable element) to container and returns its index
216          * @param member the member to add
217          * @return index of member in ArrayList
218          */
219         private int addMember(SwingScilabHelpBrowser member) {
220                 this.setContentPane(member);
221                 return this.getComponentZOrder(member);
222         }
223         
224         /**
225          * Add a member (dockable element) to container and returns its index
226          * @param member the member to add
227          * @return index of member in ArrayList
228          */
229         public int addMember(Frame member) {
230                 return this.addMember((SwingScilabFrame) member.getAsSimpleFrame());
231         }
232
233         /**
234          * Add a member (dockable element) to container and returns its index
235          * @param member the member to add
236          * @return index of member in ArrayList
237          */
238         private int addMember(SwingScilabFrame member) {
239                 this.add(member);
240                 setComponentZOrder(member, BOTTOM_LAYER);
241                 return this.getComponentZOrder(member);
242         }
243
244         /**
245          * Add a member (dockable element) to container and returns its index
246          * @param member the member to add
247          * @return index of member in ArrayList
248          */
249         public int addMember(PushButton member) {
250                 return this.addMember((SwingScilabPushButton) member.getAsSimplePushButton());
251         }
252         
253         /**
254          * Add a member (dockable element) to container and returns its index
255          * @param member the member to add
256          * @return index of member in ArrayList
257          */
258         private int addMember(SwingScilabPushButton member) {
259                 this.add(member);
260                 this.revalidate(); // If do not revalidate then the component do not appear
261                 setComponentZOrder(member, TOP_LAYER);
262                 return this.getComponentZOrder(member);
263         }
264
265         /**
266          * Add a member (dockable element) to container and returns its index
267          * @param member the member to add
268          * @return index of member in ArrayList
269          */
270         public int addMember(EditBox member) {
271                 return this.addMember((SwingScilabEditBox) member.getAsSimpleEditBox());
272         }
273         
274         /**
275          * Add a member (dockable element) to container and returns its index
276          * @param member the member to add
277          * @return index of member in ArrayList
278          */
279         private int addMember(SwingScilabEditBox member) {
280                 this.add(member);
281                 this.revalidate(); // If do not revalidate then the component do not appear
282                 setComponentZOrder(member, TOP_LAYER);
283                 return this.getComponentZOrder(member);
284         }
285
286         /**
287          * Add a member (dockable element) to container and returns its index
288          * @param member the member to add
289          * @return index of member in ArrayList
290          */
291         public int addMember(Label member) {
292                 return this.addMember((SwingScilabLabel) member.getAsSimpleLabel());
293         }
294         
295         /**
296          * Add a member (dockable element) to container and returns its index
297          * @param member the member to add
298          * @return index of member in ArrayList
299          */
300         private int addMember(SwingScilabLabel member) {
301                 this.add(member);
302                 this.revalidate(); // If do not revalidate then the component do not appear
303                 setComponentZOrder(member, TOP_LAYER);
304                 return this.getComponentZOrder(member);
305         }
306
307         /**
308          * Add a member (dockable element) to container and returns its index
309          * @param member the member to add
310          * @return index of member in ArrayList
311          */
312         public int addMember(CheckBox member) {
313                 return this.addMember((SwingScilabCheckBox) member.getAsSimpleCheckBox());
314         }
315         
316         /**
317          * Add a member (dockable element) to container and returns its index
318          * @param member the member to add
319          * @return index of member in ArrayList
320          */
321         private int addMember(SwingScilabCheckBox member) {
322                 this.add(member);
323                 this.revalidate(); // If do not revalidate then the component do not appear
324                 setComponentZOrder(member, TOP_LAYER);
325                 return this.getComponentZOrder(member);
326         }
327
328         /**
329          * Add a member (dockable element) to container and returns its index
330          * @param member the member to add
331          * @return index of member in ArrayList
332          */
333         public int addMember(RadioButton member) {
334                 return this.addMember((SwingScilabRadioButton) member.getAsSimpleRadioButton());
335         }
336         
337         /**
338          * Add a member (dockable element) to container and returns its index
339          * @param member the member to add
340          * @return index of member in ArrayList
341          */
342         private int addMember(SwingScilabRadioButton member) {
343                 this.add(member);
344                 this.revalidate(); // If do not revalidate then the component do not appear
345                 setComponentZOrder(member, TOP_LAYER);
346                 return this.getComponentZOrder(member);
347         }
348
349         /**
350          * Add a member (dockable element) to container and returns its index
351          * @param member the member to add
352          * @return index of member in ArrayList
353          */
354         public int addMember(Slider member) {
355                 return this.addMember((SwingScilabSlider) member.getAsSimpleSlider());
356         }
357         
358         /**
359          * Add a member (dockable element) to container and returns its index
360          * @param member the member to add
361          * @return index of member in ArrayList
362          */
363         private int addMember(SwingScilabSlider member) {
364                 this.add(member);
365                 this.revalidate(); // If do not revalidate then the component do not appear
366                 setComponentZOrder(member, TOP_LAYER);
367                 return this.getComponentZOrder(member);
368         }
369
370         /**
371          * Add a member (dockable element) to container and returns its index
372          * @param member the member to add
373          * @return index of member in ArrayList
374          */
375         public int addMember(ListBox member) {
376                 return this.addMember((SwingScilabListBox) member.getAsSimpleListBox());
377         }
378         
379         /**
380          * Add a member (dockable element) to container and returns its index
381          * @param member the member to add
382          * @return index of member in ArrayList
383          */
384         private int addMember(SwingScilabListBox member) {
385                 //this.add(member.getScrollPane());
386                 this.add(member);
387                 this.revalidate(); // If do not revalidate then the component do not appear
388                 //return this.getComponentZOrder(member.getScrollPane());
389                 setComponentZOrder(member, TOP_LAYER);
390                 return this.getComponentZOrder(member);
391         }
392
393         /**
394          * Add a member (dockable element) to container and returns its index
395          * @param member the member to add
396          * @return index of member in ArrayList
397          */
398         public int addMember(PopupMenu member) {
399                 return this.addMember((SwingScilabPopupMenu) member.getAsSimplePopupMenu());
400         }
401         
402         /**
403          * Add a member (dockable element) to container and returns its index
404          * @param member the member to add
405          * @return index of member in ArrayList
406          */
407         private int addMember(SwingScilabPopupMenu member) {
408                 this.add(member);
409                 this.revalidate(); // If do not revalidate then the component do not appear
410                 setComponentZOrder(member, TOP_LAYER);
411                 return this.getComponentZOrder(member);
412         }
413
414         /**
415          * Add a member (dockable element) to container and returns its index
416          * @param member the member to add
417          * @return index of member in ArrayList
418          */
419         public int addMember(Dockable member) {
420                 // TODO Auto-generated method stub
421                 return 0;
422         }
423         
424         /**
425          * We want to be able to remove directly a Canvas from a Tab.
426          * @param member canvas to remove 
427          */
428         public void removeMember(Canvas member) {
429                 this.removeMember((ScrolledSwingScilabCanvas) member.getAsSimpleCanvas());
430         }
431         
432         /**
433          * We want to be able to remove directly a Canvas from a Tab.
434          * @param member canvas to remove 
435          */
436         public void removeMember(ScrolledSwingScilabCanvas member) {
437                 this.remove(member);
438                 this.revalidate();
439         }
440
441         /**
442          * Get the current status of the Tab in its parent
443          * @return true is the tab is the tab currently "on top" in its parent
444          */
445         public boolean isCurrentTab() {
446         // TODO should not always return TRUE
447                 return true;
448         }
449
450         /**
451          * Get the parent window id for this tab
452          * @return the id of the parent window
453          */
454         public int getParentWindowId() {
455                 return this.parentWindowId;
456         }
457
458         /**
459          * Set the parent window id for this tab
460          * @param id the id of the parent window
461          */
462         public void setParentWindowId(int id) {
463                 this.parentWindowId = id;
464         }
465
466         /**
467          * Setter for MenuBar
468          * @param newMenuBar : the MenuBar to set.
469          * @see org.scilab.modules.gui.tab.SimpleTab#setMenuBar(org.scilab.modules.gui.menubar.MenuBar)
470          */
471         public void setMenuBar(MenuBar newMenuBar) {
472                 this.menuBar = newMenuBar;
473         }
474
475         
476         /**
477          * Getter for MenuBar
478          * @return MenuBar : the MenuBar associated to the Tab.
479          * @see org.scilab.modules.gui.tab.SimpleTab#getMenuBar()
480          */
481         public MenuBar getMenuBar() {
482                 return this.menuBar;
483         }
484         
485         /**
486          * Setter for ToolBar
487          * @param newToolBar : the ToolBar to set.
488          * @see org.scilab.modules.gui.tab.SimpleTab#setToolBar(org.scilab.modules.gui.toolbar.ToolBar)
489          */
490         public void setToolBar(ToolBar newToolBar) {
491                 this.toolBar = newToolBar;
492         }
493
494         /**
495          * Getter for ToolBar
496          * @return ToolBar : the ToolBar associated to the Tab.
497          * @see org.scilab.modules.gui.tab.SimpleTab#getToolBar()
498          */
499         public ToolBar getToolBar() {
500                 return this.toolBar;
501         }
502         
503         /**
504          * Setter for InfoBar
505          * @param newInfoBar the InfoBar to set.
506          */
507         public void setInfoBar(TextBox newInfoBar) {
508                 this.infoBar = newInfoBar;
509         }
510
511         /**
512          * Getter for InfoBar
513          * @return the InfoBar associated to the Tab.
514          */
515         public TextBox getInfoBar() {
516                 return this.infoBar;
517         }
518         
519         /**
520          * Set the callback of the tab
521          * @param callback the callback to set.
522          */
523         public void setCallback(CallBack callback) {
524                 callback.putValue(Action.NAME, DockingConstants.CLOSE_ACTION);
525                 this.addAction(callback);
526         }
527
528 }