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