e80e41d992a07e65aa9106a7c4916f82748b066e
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / textObject / TextObject.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010-2011 - DIGITEO - Manuel JULIACHS
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-en.txt
10  *
11  */
12
13 package org.scilab.modules.graphic_objects.textObject;
14
15 import org.scilab.modules.graphic_objects.contouredObject.ContouredObject;
16
17 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_COLOR__;
18 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_FRACTIONAL__;
19 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_SIZE__;
20 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FONT_STYLE__;
21 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_FORMATTED_TEXT__;
22 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TEXT_ARRAY_DIMENSIONS__;
23 import static org.scilab.modules.graphic_objects.graphicObject.GraphicObjectProperties.__GO_TEXT_STRINGS__;
24
25
26 /**
27  * TextObject class
28  * @author Manuel JULIACHS
29  */
30 public abstract class TextObject extends ContouredObject {
31         /** TextObject properties names */
32         protected enum TextObjectProperty { TEXT, TEXT_ARRAY_DIMENSIONS };
33
34         /**
35          * Formatted text objects array, row-major order.
36          * For now, elements are supposed to have identical font properties values,
37          * hence the current associated get/set methods implementation.
38          */
39         protected FormattedText[] text;
40
41         /** Text array dimensions (number of rows, number of columns) */
42         private int[] dimensions;
43
44         /** Constructor */
45         public TextObject() {
46                 super();
47
48                 dimensions = new int[2];
49                 dimensions[0] = 1;
50                 dimensions[1] = 1;
51
52                 text = new FormattedText[1];
53                 text[0] = new FormattedText();
54         }
55
56         /**
57          * Clone method
58          */
59         public TextObject clone() {
60                 TextObject copy = (TextObject) super.clone();
61
62                 copy.dimensions = new int[2];
63                 copy.dimensions[0] = dimensions[0];
64                 copy.dimensions[1] = dimensions[1];
65                 copy.text = new FormattedText[dimensions[0]*dimensions[1]];
66
67                 /* Actually copies the FormattedText objects */
68                 copy.setText(text);
69
70                 return copy;
71         }
72
73         /**
74          * Returns the enum associated to a property name
75          * @param propertyName the property name
76          * @return the property enum
77          */
78         public Object getPropertyFromName(int propertyName) {
79                 switch (propertyName) {
80                 case __GO_FORMATTED_TEXT__ :
81                         return TextObjectProperty.TEXT;
82                 case __GO_TEXT_ARRAY_DIMENSIONS__ :
83                         return TextObjectProperty.TEXT_ARRAY_DIMENSIONS;
84                 case __GO_TEXT_STRINGS__ :
85                         return FormattedText.FormattedTextProperty.TEXT;
86                 case __GO_FONT_STYLE__ :
87                         return Font.FontProperty.STYLE;
88                 case __GO_FONT_SIZE__ :
89                         return Font.FontProperty.SIZE;
90                 case __GO_FONT_COLOR__ :
91                         return Font.FontProperty.COLOR;
92                 case __GO_FONT_FRACTIONAL__ :
93                         return Font.FontProperty.FRACTIONAL;
94                 default :
95                         return super.getPropertyFromName(propertyName);
96                 }
97         }
98
99         /**
100          * Fast property get method
101          * @param property the property to get
102          * @return the property value
103          */
104         public Object getProperty(Object property) {
105                 if (property == TextObjectProperty.TEXT) {
106                         return getText();
107                 } else if (property == TextObjectProperty.TEXT_ARRAY_DIMENSIONS) {
108                         return getTextArrayDimensions();
109                 } else if (property == FormattedText.FormattedTextProperty.TEXT) {
110                         return getTextStrings();
111                 } else if (property == Font.FontProperty.STYLE) {
112                         return getFontStyle();
113                 } else if (property == Font.FontProperty.SIZE) {
114                         return getFontSize();
115                 } else if (property == Font.FontProperty.COLOR) {
116                         return getFontColor();
117                 } else if (property == Font.FontProperty.FRACTIONAL) {
118                         return getFontFractional();
119                 } else {
120                         return super.getProperty(property);     
121                 }
122         }
123         
124         /**
125          * Fast property set method
126          * @param property the property to set
127          * @param value the property value
128          * @return true if the property has been set, false otherwise
129          */
130         public UpdateStatus setProperty(Object property, Object value) {
131                 if (property == TextObjectProperty.TEXT) {
132                         setText((FormattedText[]) value);
133                 } else if (property == TextObjectProperty.TEXT_ARRAY_DIMENSIONS) {
134                         setTextArrayDimensions((Integer[]) value);
135                 } else if (property == FormattedText.FormattedTextProperty.TEXT) {
136                         setTextStrings((String[]) value);
137                 } else if (property == Font.FontProperty.STYLE) {
138                         setFontStyle((Integer) value);
139                 } else if (property == Font.FontProperty.SIZE) {
140                         setFontSize((Double) value);
141                 } else if (property == Font.FontProperty.COLOR) {
142                         setFontColor((Integer) value);
143                 } else if (property == Font.FontProperty.FRACTIONAL) {
144                         setFontFractional((Boolean) value);
145                 } else {
146                         return super.setProperty(property, value);
147                 }
148
149                 return UpdateStatus.Success;
150         }
151
152         /**
153          * @return the text array dimensions
154          */
155         public Integer[] getTextArrayDimensions() {
156                 Integer retDimensions[] = new Integer[2];
157                 retDimensions[0] = dimensions[0];
158                 retDimensions[1] = dimensions[1];
159
160                 return retDimensions;
161         }
162
163         /**
164          * Sets the text array dimensions
165          * Recreates an array of formatted text objects.
166          * If there was an existing array, the new array's objects' font properties
167          * are set to those of the existing array's first element, as all the array's objects
168          * are supposed to have the same font properties for now.
169          *
170          * @param dimensions the text array dimensions to set
171          */
172         public void setTextArrayDimensions(Integer[] dimensions) {
173                 int currentSize = this.dimensions[0]*this.dimensions[1];
174
175                 if (dimensions[0]*dimensions[1] != currentSize) {
176                         FormattedText[] newText = new FormattedText[dimensions[0]*dimensions[1]];
177
178                         for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
179                                 newText[i] = new FormattedText();
180
181                                 if(currentSize >= 1) {
182                                         newText[i].setFont(new Font(text[0].getFont()));
183                                 }
184                         }
185
186                         text = newText;
187                 }
188
189                 this.dimensions[0] = dimensions[0];
190                 this.dimensions[1] = dimensions[1];
191         }
192
193         /**
194          * @return the text
195          */
196         public FormattedText[] getText() {
197                 FormattedText[] retText = new FormattedText[dimensions[0]*dimensions[1]];
198
199                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
200                         retText[i] = new FormattedText(text[i]);
201                 }
202
203                 return retText;
204         }
205
206         /**
207          * @param textArray the textArray to set
208          */
209         public void setText(FormattedText[] textArray) {
210                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
211                         text[i] = new FormattedText(textArray[i]);
212                 }
213         }
214
215         /**
216          * @return the text strings
217          */
218         public String[] getTextStrings() {
219                 String[] textStrings = new String[dimensions[0]*dimensions[1]];
220
221                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
222                         textStrings[i] = new String(text[i].getText());
223                 }
224
225                 return textStrings;
226         }
227
228         /**
229          * @param textStrings the text strings array to set
230          */
231         public void setTextStrings(String[] textStrings) {
232                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
233                         text[i].setText(textStrings[i]);
234                 }
235         }
236
237         /**
238          * @return the font
239          */
240         public Font getFont() {
241                 return text[0].getFont();
242         }
243
244         /**
245          * @param font the font to set
246          */
247         public void setFont(Font font) {
248                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
249                         text[i].setFont(font);
250                 }
251         }
252
253         /**
254          * @return the font style
255          */
256         public Integer getFontStyle() {
257                 return text[0].getFont().getStyle();
258         }
259
260         /**
261          * @param style the font style to set
262          */
263         public void setFontStyle(Integer style) {
264                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
265                         text[i].getFont().setStyle(style);
266                 }
267         }
268
269         /**
270          * @return the font color
271          */
272         public Integer getFontColor() {
273                 return text[0].getFont().getColor();
274         }
275
276         /**
277          * @param color the font color to set 
278          */
279         public void setFontColor(Integer color) {
280                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
281                         text[i].getFont().setColor(color);
282                 }
283         }
284
285         /**
286          * @return the font size
287          */
288         public Double getFontSize() {
289                 return text[0].getFont().getSize();
290         }
291
292         /**
293          * @param size the font size to set
294          */
295         public void setFontSize(Double size) {
296                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
297                         text[i].getFont().setSize(size);
298                 }
299         }
300
301         /**
302          * @return the font fractional
303          */
304         public Boolean getFontFractional() {
305                 return text[0].getFont().getFractional();
306         }
307
308         /**
309          * @param fractional the font fractional to set
310          */
311         public void setFontFractional(Boolean fractional) {
312                 for (int i = 0; i < dimensions[0]*dimensions[1]; i++) {
313                         text[i].getFont().setFractional(fractional);
314                 }
315         }
316
317 }