d669b4fadf340684f39a8465554a30350cf612ea
[scilab.git] / scilab / modules / gui / src / java / org / scilab / modules / gui / bridge / tab / SwingScilabStaticPanel.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2014 - Scilab Enterprises - 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.1-en.txt
10  *
11  */
12
13 package org.scilab.modules.gui.bridge.tab;
14
15 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AUTORESIZE__;
16 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_AXES_SIZE__;
17 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_SIZE__;
18
19 import java.awt.Color;
20 import java.awt.Container;
21 import java.awt.event.ComponentEvent;
22 import java.awt.event.ComponentListener;
23
24 import javax.swing.JLayeredPane;
25 import javax.swing.SwingUtilities;
26
27 import org.scilab.modules.action_binding.InterpreterManagement;
28 import org.scilab.modules.graphic_objects.figure.Figure;
29 import org.scilab.modules.graphic_objects.graphicController.GraphicController;
30 import org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties;
31 import org.scilab.modules.gui.SwingViewObject;
32 import org.scilab.modules.gui.bridge.canvas.SwingScilabCanvas;
33 import org.scilab.modules.gui.bridge.window.SwingScilabWindow;
34 import org.scilab.modules.gui.events.callback.CommonCallBack;
35 import org.scilab.modules.gui.menubar.MenuBar;
36 import org.scilab.modules.gui.textbox.TextBox;
37 import org.scilab.modules.gui.toolbar.ToolBar;
38 import org.scilab.modules.gui.utils.Size;
39
40 public class SwingScilabStaticPanel extends SwingScilabScrollPane implements SwingScilabPanel {
41
42     private Integer id;
43     private TextBox infoBar;
44     private MenuBar menuBar;
45     private ToolBar toolBar;
46     private String eventHandler;
47     private boolean eventHandlerEnabled;
48     private String parentWindowId;
49     private String windowIcon;
50
51     private JLayeredPane uiContentPane;
52     private JLayeredPane layerdPane;
53
54     private SwingScilabCanvas contentCanvas;
55
56     public SwingScilabStaticPanel(String figureTitle, Integer figureId, Figure figure) {
57         super(new JLayeredPane(), new JLayeredPane(), figure);
58         uiContentPane = (JLayeredPane) getUIComponent();
59         layerdPane = (JLayeredPane) getGlobalComponent();
60         setVisible(true);
61         layerdPane.setLayout(null);
62         layerdPane.setOpaque(true);
63
64         uiContentPane.setOpaque(false);
65         uiContentPane.setLayout(null);
66         layerdPane.add(uiContentPane, JLayeredPane.DEFAULT_LAYER + 1, 0);
67
68         layerdPane.setVisible(true);
69         uiContentPane.setVisible(true);
70
71         /* Manage figure_size property */
72         addComponentListener(new ComponentListener() {
73
74             public void componentShown(ComponentEvent arg0) {
75             }
76
77             public void componentResized(ComponentEvent arg0) {
78
79                 /* Update the figure_size property */
80                 Size parentSize = SwingScilabWindow.allScilabWindows.get(parentWindowId).getDims();
81                 Integer[] newSize = new Integer[] { parentSize.getWidth(), parentSize.getHeight() };
82
83                 GraphicController.getController().setProperty(id, __GO_SIZE__, newSize);
84
85                 Boolean autoreSize = (Boolean) GraphicController.getController().getProperty(id, __GO_AUTORESIZE__);
86
87                 if (autoreSize != null && autoreSize) {
88                     /* Update the axes_size property */
89                     Integer[] newAxesSize = new Integer[] { getContentPane().getWidth(), getContentPane().getHeight() };
90                     GraphicController.getController().setProperty(id, __GO_AXES_SIZE__, newAxesSize);
91                 }
92
93                 String resizeFcn = (String) GraphicController.getController().getProperty(id, GraphicObjectProperties.__GO_RESIZEFCN__);
94                 if (resizeFcn != null && !resizeFcn.equals("")) {
95                     String resizeCommand = "if exists(\"gcbo\") then %oldgcbo = gcbo; end;"
96                                            + "gcbo = getcallbackobject(" + id + ");"
97                                            + resizeFcn
98                                            + ";if exists(\"%oldgcbo\") then gcbo = %oldgcbo; else clear gcbo; end;";
99                     InterpreterManagement.requestScilabExec(resizeCommand);
100                 }
101             }
102
103             public void componentMoved(ComponentEvent arg0) {
104             }
105
106             public void componentHidden(ComponentEvent arg0) {
107             }
108         });
109     }
110
111     public void setId(Integer id) {
112         this.id = id;
113     }
114
115     public Integer getId() {
116         return id;
117     }
118
119     public void update(int property, Object value) {
120         SwingScilabCommonPanel.update(this, property, value);
121     }
122
123     public void setFigureBackground(Color color) {
124         if (layerdPane != null) {
125             layerdPane.setBackground(color);
126         }
127     }
128     
129     public TextBox getInfoBar() {
130         return infoBar;
131     }
132
133     public void setInfoBar(TextBox infoBar) {
134         this.infoBar = infoBar;
135     }
136
137     public MenuBar getMenuBar() {
138         return menuBar;
139     }
140
141     public void setMenuBar(MenuBar menuBar) {
142         this.menuBar = menuBar;
143     }
144
145     public ToolBar getToolBar() {
146         return toolBar;
147     }
148
149     public void setToolBar(ToolBar toolBar) {
150         this.toolBar = toolBar;
151     }
152
153     public void setEventHandler(String eventHandler) {
154         this.eventHandler = eventHandler;
155     }
156
157     public void setEventHandlerEnabled(boolean enabled) {
158         this.eventHandlerEnabled = enabled;
159     }
160
161     public void setParentWindowId(String parentWindowId) {
162         this.parentWindowId = parentWindowId;
163     }
164
165     public void setWindowIcon(String windowIcon) {
166         this.windowIcon = windowIcon;
167     }
168
169     public void addMember(SwingViewObject member) {
170         if (member instanceof SwingScilabAxes) {
171             if (contentCanvas == null) {
172                 contentCanvas = new SwingScilabCanvas((Figure) GraphicController.getController().getObjectFromId(((SwingScilabAxes) member).getFigureId()));
173                 //contentCanvas.addEventHandlerKeyListener(editorEventHandler);
174                 //contentCanvas.addEventHandlerMouseListener(editorEventHandler);
175                 //contentCanvas.addEventHandlerMouseMotionListener(editorEventHandler);
176                 layerdPane.add(contentCanvas, JLayeredPane.FRAME_CONTENT_LAYER);
177
178                 setCanvas(contentCanvas);
179
180                 //contentCanvas.addKeyListener(this);
181             }
182             return;
183         }
184
185         SwingScilabCommonPanel.addMember(this, member);
186     }
187
188     public String getParentWindowId() {
189         return parentWindowId;
190     }
191
192     public SwingScilabWindow getParentWindow() {
193         return (SwingScilabWindow) SwingUtilities.getAncestorOfClass(SwingScilabWindow.class, this);
194     }
195
196     public JLayeredPane getWidgetPane() {
197         return uiContentPane;
198     }
199
200     public void setCallback(CommonCallBack callback) {
201         // TODO Auto-generated method stub
202
203     }
204
205     public Container getContentPane() {
206         return this.getAsContainer();
207     }
208
209     public void close() {
210         setMenuBar(null);
211         setToolBar(null);
212         setInfoBar(null);
213         removeAll();
214         // without this children canvas are not released.
215         SwingScilabWindow win = getParentWindow();
216         Container dummyContainer = new Container();
217         win.setContentPane(dummyContainer);
218         win.close();
219         setVisible(false);
220     }
221
222     /**
223      * Remove a SwingViewObject (from SwingView.java)
224      * @param member the member to remove
225      */
226     public void removeMember(SwingViewObject member) {
227         SwingScilabCommonPanel.removeMember(this, member);
228     }
229
230     public void setName(String name) {
231         super.setName(name);
232         getParentWindow().setName(name);
233     }
234 }