ec64ab397603391bd7c5956e8d6eb6db54fb617d
[scilab.git] / scilab / modules / graphic_objects / src / java / org / scilab / modules / graphic_objects / axes / Box.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2010 - DIGITEO - Manuel JULIACHS
4  * Copyright (C) 2013 - Scilab Enterprises - Calixte DENIZET
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
11  *
12  */
13
14 package org.scilab.modules.graphic_objects.axes;
15
16 import org.scilab.modules.graphic_objects.graphicObject.GraphicObject.UpdateStatus;
17
18 /**
19  * Box class
20  * @author Manuel JULIACHS
21  */
22 public class Box {
23     /** Box properties names */
24     public enum BoxProperty { BOX, HIDDENAXISCOLOR, TIGHTLIMITS, DATABOUNDS, REALDATABOUNDS, ZOOMENABLED, ZOOMBOX, AUTOSCALE, FIRSTPLOT };
25
26     /** Box type */
27     public static enum BoxType { OFF, ON, HIDDEN_AXES, BACK_HALF;
28
29                                  /**
30                                   * Converts an integer to the corresponding enum
31                                   * @param intValue the integer value
32                                   * @return the box type enum
33                                   */
34     public static BoxType intToEnum(Integer intValue) {
35         switch (intValue) {
36             case 0:
37                 return BoxType.OFF;
38             case 1:
39                 return BoxType.ON;
40             case 2:
41                 return BoxType.HIDDEN_AXES;
42             case 3:
43                 return BoxType.BACK_HALF;
44             default:
45                 return null;
46         }
47     }
48                                }
49
50     /** Box type */
51     private BoxType box;
52
53     /** Hidden axis color */
54     private int hiddenAxisColor;
55
56     /** Specifies whether tight limits are enforced or not */
57     private boolean tightLimits;
58
59     /** Data bounding box (6-element array) */
60     private double[] dataBounds;
61
62     /** Data bounding box, as modified by automatic ticks computation (6-element array) */
63     private double[] realDataBounds;
64
65     /** Speficies whether zooming is enabled or not */
66     private boolean zoomEnabled;
67
68     /** Magnified 3D sub-region (6-element array) */
69     private double[] zoomBox;
70
71     /** Indicates whether data bounds are updated when a new plot command is executed */
72     private boolean autoScale;
73
74     /**
75      * Indicates whether no high-level drawing function has yet been called (true) or
76      * has been called at least once (false)
77      */
78     private boolean firstPlot;
79
80     /** Constructor */
81     public Box() {
82         box = BoxType.OFF;
83         hiddenAxisColor = 0;
84         tightLimits = false;
85         dataBounds = new double[] {0, 1, 0, 1, -1, 1};
86         realDataBounds = new double[6];
87         zoomEnabled = false;
88         zoomBox = new double[6];
89         autoScale = false;
90         firstPlot = true;
91     }
92
93     /**
94      * Copy constructor
95      * @param box the Box to copy
96      */
97     public Box(Box box) {
98         this.box = box.box;
99         hiddenAxisColor = box.hiddenAxisColor;
100         tightLimits = box.tightLimits;
101
102         dataBounds = new double[6];
103
104         for (int i = 0; i < dataBounds.length; i++) {
105             dataBounds[i] = box.dataBounds[i];
106         }
107
108         realDataBounds = new double[6];
109
110         for (int i = 0; i < realDataBounds.length; i++) {
111             realDataBounds[i] = box.realDataBounds[i];
112         }
113
114         zoomEnabled = box.zoomEnabled;
115
116         zoomBox = new double[6];
117
118         for (int i = 0; i < zoomBox.length; i++) {
119             zoomBox[i] = box.zoomBox[i];
120         }
121
122         autoScale = box.autoScale;
123         firstPlot = box.firstPlot;
124     }
125
126     /**
127      * @return the autoScale
128      */
129     public Boolean getAutoScale() {
130         return autoScale;
131     }
132
133     /**
134      * @param autoScale the autoScale to set
135      */
136     public UpdateStatus setAutoScale(Boolean autoScale) {
137         if (this.autoScale != autoScale) {
138             this.autoScale = autoScale;
139             return UpdateStatus.Success;
140         }
141
142         return UpdateStatus.NoChange;
143     }
144
145     /**
146      * @return the box
147      */
148     public BoxType getBox() {
149         return box;
150     }
151
152     /**
153      * @param box the box to set
154      */
155     public UpdateStatus setBox(BoxType box) {
156         if (this.box != box) {
157             this.box = box;
158             return UpdateStatus.Success;
159         }
160
161         return UpdateStatus.NoChange;
162     }
163
164     /**
165      * Return the data bounds.
166      * The array contain : {xMin, xMax, yMin, yMax, zMin, zMax}
167      * @return the dataBounds
168      */
169     public Double[] getDataBounds() {
170         Double[] retDataBounds = new Double[6];
171
172         for (int i = 0; i < retDataBounds.length; i++) {
173             retDataBounds[i] = dataBounds[i];
174         }
175
176         return retDataBounds;
177     }
178
179     /**
180      * @param dataBounds the dataBounds to set
181      */
182     public UpdateStatus setDataBounds(Double[] dataBounds) {
183         UpdateStatus status = UpdateStatus.NoChange;
184         final int len = Math.min(this.dataBounds.length, dataBounds.length);
185         for (int i = 0; i < len; i++) {
186             if (this.dataBounds[i] != dataBounds[i]) {
187                 this.dataBounds[i] = dataBounds[i];
188                 status = UpdateStatus.Success;
189             }
190         }
191
192         return status;
193     }
194
195     /**
196      * @return the hiddenAxisColor
197      */
198     public Integer getHiddenAxisColor() {
199         return hiddenAxisColor;
200     }
201
202     /**
203      * @param hiddenAxisColor the hiddenAxisColor to set
204      */
205     public UpdateStatus setHiddenAxisColor(Integer hiddenAxisColor) {
206         if (this.hiddenAxisColor != hiddenAxisColor) {
207             this.hiddenAxisColor = hiddenAxisColor;
208             return UpdateStatus.Success;
209         }
210
211         return UpdateStatus.NoChange;
212     }
213
214     /**
215      * @return the realDataBounds
216      */
217     public Double[] getRealDataBounds() {
218         Double[] retRealDataBounds = new Double[6];
219
220         for (int i = 0; i < retRealDataBounds.length; i++) {
221             retRealDataBounds[i] = realDataBounds[i];
222         }
223
224         return retRealDataBounds;
225     }
226
227     /**
228      * @param realDataBounds the realDataBounds to set
229      */
230     public UpdateStatus setRealDataBounds(Double[] realDataBounds) {
231         UpdateStatus status = UpdateStatus.NoChange;
232         final int len = Math.min(this.realDataBounds.length, realDataBounds.length);
233         for (int i = 0; i < len; i++) {
234             if (this.realDataBounds[i] != realDataBounds[i]) {
235                 this.realDataBounds[i] = realDataBounds[i];
236                 status = UpdateStatus.Success;
237             }
238         }
239
240         return status;
241     }
242
243     /**
244      * @return the tightLimits
245      */
246     public Boolean getTightLimits() {
247         return tightLimits;
248     }
249
250     /**
251      * @param tightLimits the tightLimits to set
252      */
253     public UpdateStatus setTightLimits(Boolean tightLimits) {
254         if (this.tightLimits != tightLimits) {
255             this.tightLimits = tightLimits;
256             return UpdateStatus.Success;
257         }
258
259         return UpdateStatus.NoChange;
260     }
261
262     /**
263      * @return the zoomEnabled
264      */
265     public Boolean getZoomEnabled() {
266         return zoomEnabled;
267     }
268
269     /**
270      * @param zoomEnabled the zoomEnabled to set
271      */
272     public UpdateStatus setZoomEnabled(Boolean zoomEnabled) {
273         if (this.zoomEnabled != zoomEnabled) {
274             this.zoomEnabled = zoomEnabled;
275             return UpdateStatus.Success;
276         }
277
278         return UpdateStatus.NoChange;
279     }
280
281     /**
282      * @return the zoomBox
283      */
284     public Double[] getZoomBox() {
285         Double[] retZoomBox = new Double[6];
286
287         for (int i = 0; i < retZoomBox.length; i++) {
288             retZoomBox[i] = zoomBox[i];
289         }
290
291         return retZoomBox;
292     }
293
294     /**
295      * @param zoomBox the zoomBox to set
296      */
297     public UpdateStatus setZoomBox(Double[] zoomBox) {
298         UpdateStatus status = UpdateStatus.NoChange;
299         final int len = Math.min(this.zoomBox.length, zoomBox.length);
300         for (int i = 0; i < len; i++) {
301             if (this.zoomBox[i] != zoomBox[i]) {
302                 this.zoomBox[i] = zoomBox[i];
303                 status = UpdateStatus.Success;
304             }
305         }
306
307         return status;
308     }
309
310     /**
311      * @return the firstPlot
312      */
313     public Boolean getFirstPlot() {
314         return firstPlot;
315     }
316
317     /**
318      * @param firstPlot the firstPlot to set
319      */
320     public UpdateStatus setFirstPlot(Boolean firstPlot) {
321         if (this.firstPlot != firstPlot) {
322             this.firstPlot = firstPlot;
323             return UpdateStatus.Success;
324         }
325
326         return UpdateStatus.NoChange;
327     }
328 }