add frame_borders as hidden children to allow recursive deletion
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / graphicModel / GraphicModel.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - 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.graphic_objects.graphicModel;
14
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import org.scilab.modules.graphic_objects.arc.Arc;
19 import org.scilab.modules.graphic_objects.axes.Axes;
20 import org.scilab.modules.graphic_objects.axis.Axis;
21 import org.scilab.modules.graphic_objects.compound.Compound;
22 import org.scilab.modules.graphic_objects.console.Console;
23 import org.scilab.modules.graphic_objects.datatip.Datatip;
24 import org.scilab.modules.graphic_objects.fec.Fec;
25 import org.scilab.modules.graphic_objects.figure.Figure;
26 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject;
27 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject.Type;
28 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject.UpdateStatus;
29 import org.scilab.modules.graphic_objects.imageplot.Grayplot;
30 import org.scilab.modules.graphic_objects.imageplot.Matplot;
31 import org.scilab.modules.graphic_objects.label.Label;
32 import org.scilab.modules.graphic_objects.legend.Legend;
33 import org.scilab.modules.graphic_objects.lighting.Light;
34 import org.scilab.modules.graphic_objects.polyline.Polyline;
35 import org.scilab.modules.graphic_objects.rectangle.Rectangle;
36 import org.scilab.modules.graphic_objects.surface.Fac3d;
37 import org.scilab.modules.graphic_objects.surface.Plot3d;
38 import org.scilab.modules.graphic_objects.textObject.Text;
39 import org.scilab.modules.graphic_objects.uibar.progressionbar.Progressionbar;
40 import org.scilab.modules.graphic_objects.uibar.waitbar.Waitbar;
41 import org.scilab.modules.graphic_objects.uicontextmenu.Uicontextmenu;
42 import org.scilab.modules.graphic_objects.uicontrol.checkbox.CheckBox;
43 import org.scilab.modules.graphic_objects.uicontrol.edit.Edit;
44 import org.scilab.modules.graphic_objects.uicontrol.edit.Spinner;
45 import org.scilab.modules.graphic_objects.uicontrol.frame.Frame;
46 import org.scilab.modules.graphic_objects.uicontrol.frame.border.FrameBorder;
47 import org.scilab.modules.graphic_objects.uicontrol.layer.Layer;
48 import org.scilab.modules.graphic_objects.uicontrol.listbox.ListBox;
49 import org.scilab.modules.graphic_objects.uicontrol.popupmenu.PopupMenu;
50 import org.scilab.modules.graphic_objects.uicontrol.pushbutton.PushButton;
51 import org.scilab.modules.graphic_objects.uicontrol.radiobutton.RadioButton;
52 import org.scilab.modules.graphic_objects.uicontrol.slider.Slider;
53 import org.scilab.modules.graphic_objects.uicontrol.tab.Tab;
54 import org.scilab.modules.graphic_objects.uicontrol.table.Table;
55 import org.scilab.modules.graphic_objects.uicontrol.uiimage.UiImage;
56 import org.scilab.modules.graphic_objects.uicontrol.uitext.UiText;
57 import org.scilab.modules.graphic_objects.uimenu.Uimenu;
58 import org.scilab.modules.graphic_objects.vectfield.Champ;
59 import org.scilab.modules.graphic_objects.vectfield.Segs;
60
61 /**
62  * GraphicModel class
63  * @author Bruno JOFRET
64  */
65 public final class GraphicModel {
66
67     private static GraphicModel me;
68     private static GraphicObject figureModel;
69     private static GraphicObject axesModel;
70
71     private Map<Integer, GraphicObject> allObjects = new HashMap<Integer, GraphicObject>();
72
73     /**
74      * Default constructor
75      */
76     private GraphicModel() { }
77
78     /**
79      * Returns the model
80      * @return the model
81      */
82     public static GraphicModel getModel() {
83         if (me == null) {
84             me = new GraphicModel();
85         }
86
87         return me;
88     }
89
90     public static Figure getFigureModel() {
91         return (Figure) figureModel;
92     }
93
94     public static Axes getAxesModel() {
95         return (Axes) axesModel;
96     }
97
98     /**
99      * @param id the id of the object to get
100      * @return the object
101      */
102     public GraphicObject getObjectFromId(Integer id) {
103         return allObjects.get(id);
104     }
105
106     /**
107      * Returns a null property
108      * @param id the id of the object
109      * @param property the property name
110      * @return the property
111      */
112     public Object getNullProperty(Integer id, String property) {
113         GraphicObject object = allObjects.get(id);
114         return object.getNullProperty(property);
115     }
116
117     /**
118      * Fast property get
119      * @param id object id
120      * @param property property name
121      * @return property value
122      */
123     public Object getProperty(Integer id, int property) {
124         GraphicObject object = allObjects.get(id);
125
126         if (object != null) {
127             Object propertyType = object.getPropertyFromName(property);
128             return object.getProperty(propertyType);
129         }
130         return null;
131     }
132
133     /**
134      * Fast property set
135      * @param id object id
136      * @param property name
137      * @param value property value
138      * @return true if the property has been set, false otherwise
139      */
140     public UpdateStatus setProperty(Integer id, int property, Object value) {
141         GraphicObject object = allObjects.get(id);
142         if (object != null) {
143             synchronized (object) {
144                 Object propertyType = object.getPropertyFromName(property);
145                 return object.setProperty(propertyType, value);
146             }
147         }
148         return UpdateStatus.Fail;
149     }
150
151     /**
152      * Creates an object
153      * @param id object id
154      * @param type object type
155      * @return the created object's id
156      */
157     public Integer createObject(Integer id, GraphicObject.Type type) {
158         GraphicObject object = createTypedObject(type);
159
160         if (object != null) {
161             allObjects.put(id, object);
162             object.setIdentifier(id);
163
164             return id;
165         } else {
166             return 0;
167         }
168     }
169
170     /**
171      * Clone object
172      * @param id : id of the object to clone
173      * @param newId : id of the clone
174      * @return newId
175      */
176     public Integer cloneObject(Integer id, Integer newId) {
177         GraphicObject object = allObjects.get(id);
178         GraphicObject objectClone = object.clone();
179         objectClone.setIdentifier(newId);
180
181         allObjects.put(newId, objectClone);
182
183         return newId;
184     }
185
186     /**
187      * Creates a typed object
188      * @param type the object type
189      * @return the created typed object
190      */
191     private GraphicObject createTypedObject(Type type) {
192         GraphicObject createdObject = null;
193         switch (type) {
194             case ARC:
195                 createdObject = new Arc();
196                 break;
197             case AXES:
198                 createdObject = new Axes();
199                 break;
200             case AXESMODEL:
201                 createdObject = new Axes();
202                 createdObject.setValid(false);
203                 axesModel = createdObject;
204                 break;
205             case AXIS:
206                 createdObject = new Axis();
207                 break;
208             case CHAMP:
209                 createdObject = new Champ();
210                 break;
211             case COMPOUND:
212                 createdObject = new Compound();
213                 break;
214             case FAC3D:
215                 createdObject = new Fac3d();
216                 break;
217             case FEC:
218                 createdObject = new Fec();
219                 break;
220             case FIGURE:
221                 createdObject = new Figure();
222                 break;
223             case FIGUREMODEL:
224                 createdObject = new Figure();
225                 createdObject.setValid(false);
226                 figureModel = createdObject;
227                 break;
228             case GRAYPLOT:
229                 createdObject = new Grayplot();
230                 break;
231             case LABEL:
232                 createdObject = new Label();
233                 break;
234             case LEGEND:
235                 createdObject = new Legend();
236                 break;
237             case MATPLOT:
238                 createdObject = new Matplot();
239                 break;
240             case PLOT3D:
241                 createdObject = new Plot3d();
242                 break;
243             case POLYLINE:
244                 createdObject = new Polyline();
245                 break;
246             case RECTANGLE:
247                 createdObject = new Rectangle();
248                 break;
249             case SEGS:
250                 createdObject = new Segs();
251                 break;
252             case TEXT:
253                 createdObject = new Text();
254                 break;
255                 /* UICONTROLS */
256             case CHECKBOX:
257                 createdObject = new CheckBox();
258                 break;
259             case EDIT:
260                 createdObject = new Edit();
261                 break;
262             case SPINNER:
263                 createdObject = new Spinner();
264                 break;
265             case FRAME:
266                 createdObject = new Frame();
267                 break;
268             case IMAGE:
269                 createdObject = new UiImage();
270                 break;
271             case LISTBOX:
272                 createdObject = new ListBox();
273                 break;
274             case POPUPMENU:
275                 createdObject = new PopupMenu();
276                 break;
277             case PUSHBUTTON:
278                 createdObject = new PushButton();
279                 break;
280             case RADIOBUTTON:
281                 createdObject = new RadioButton();
282                 break;
283             case SLIDER:
284                 createdObject = new Slider();
285                 break;
286             case TABLE:
287                 createdObject = new Table();
288                 break;
289             case UITEXT:
290                 createdObject = new UiText();
291                 break;
292                 /* UIMENU */
293             case UIMENU:
294                 createdObject = new Uimenu();
295                 break;
296             case UIMENUMODEL:
297                 createdObject = new Uimenu();
298                 createdObject.setValid(false);
299                 break;
300                 /* UICONTEXTMENU */
301             case UICONTEXTMENU:
302                 createdObject = new Uicontextmenu();
303                 break;
304                 /* Create Scilab console object */
305             case CONSOLE:
306                 createdObject = Console.getConsole();
307                 ((Console) createdObject).setScilabMode(Console.ScilabMode.NW);
308                 break;
309             case JAVACONSOLE:
310                 createdObject = Console.getConsole();
311                 ((Console) createdObject).setScilabMode(Console.ScilabMode.STD);
312                 break;
313                 /* Uibar */
314             case PROGRESSIONBAR:
315                 createdObject = new Progressionbar();
316                 break;
317             case WAITBAR:
318                 createdObject = new Waitbar();
319                 break;
320             case LIGHT:
321                 createdObject = new Light();
322                 break;
323             case DATATIP:
324                 createdObject = new Datatip();
325                 break;
326             case TAB:
327                 createdObject = new Tab();
328                 break;
329             case LAYER:
330                 createdObject = new Layer();
331                 break;
332             case BORDER:
333                 createdObject = new FrameBorder();
334                 break;
335             case FRAME_SCROLLABLE:
336                 createdObject = new Frame();
337                 ((Frame)createdObject).setScrollable(true);
338                 break;
339             default:
340                 createdObject = null;
341         }
342         return createdObject;
343     }
344
345     /**
346      * Deletes an object
347      * @param id object id
348      */
349     public void deleteObject(Integer id) {
350         GraphicObject object = allObjects.get(id);
351         synchronized (object) {
352             allObjects.remove(id);
353         }
354     }
355
356 }