d8e9dde9c7cf078d353e65bb311b520815e1f226
[scilab.git] / scilab / modules / renderer / src / java / org / scilab / modules / renderer / JoGLView / axes / ruler / UserDefineGraduation.java
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2009-2012 - DIGITEO - Pierre Lando
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 package org.scilab.modules.renderer.JoGLView.axes.ruler;
13
14 import org.scilab.forge.scirenderer.ruler.graduations.Graduations;
15 import org.scilab.modules.graphic_objects.axes.AxisProperty;
16
17 import java.text.DecimalFormat;
18 import java.util.Arrays;
19 import java.util.Collections;
20 import java.util.LinkedList;
21 import java.util.List;
22
23 /**
24  * @author Pierre Lando
25  */
26 class UserDefineGraduation implements Graduations {
27     private final AxisProperty axisProperty;
28     private final double lowerBound;
29     private final double upperBound;
30
31     private List<Double> allValues;
32     private List<Double> subValues;
33
34     public UserDefineGraduation(AxisProperty axisProperty, double lowerBound, double upperBound) {
35         this.axisProperty = axisProperty;
36         this.lowerBound = lowerBound;
37         this.upperBound = upperBound;
38     }
39
40     @Override
41     public double getLowerBound() {
42         return lowerBound;
43     }
44
45     @Override
46     public boolean isLowerBoundIncluded() {
47         return true;
48     }
49
50     @Override
51     public double getUpperBound() {
52         return upperBound;
53     }
54
55     @Override
56     public boolean isUpperBoundIncluded() {
57         return true;
58     }
59
60     @Override
61     public boolean contain(double value) {
62         return (getLowerBound() <= value) && (value <= getUpperBound());
63     }
64
65     @Override
66     public DecimalFormat getFormat() {
67         /**
68          * Will never be used. The label was defined by the user too.
69          */
70         return new DecimalFormat();
71     }
72
73     @Override
74     public List<Double> getAllValues() {
75         if (allValues == null) {
76             allValues = new LinkedList<Double>(Arrays.asList(axisProperty.getTicksLocations()));
77         }
78         return allValues;
79     }
80
81     @Override
82     public List<Double> getNewValues() {
83         return getAllValues();
84     }
85
86     @Override
87     public Graduations getParentGraduations() {
88         return null;
89     }
90
91     @Override
92     public Graduations getMore() {
93         return null;
94     }
95
96     @Override
97     public Graduations getAlternative() {
98         return null;
99     }
100
101     @Override
102     public Graduations getSubGraduations() {
103         // TODO
104         return null;
105     }
106
107     @Override
108     public List<Double> getSubGraduations(final int N) {
109         if (subValues == null) {
110             if (N == 0) {
111                 subValues = new LinkedList<Double>();
112             } else {
113                 List<Double> ticksValue = getAllValues();
114                 Collections.sort(ticksValue);
115                 subValues = new LinkedList<Double>();
116
117                 for (int i = 0; i < ticksValue.size() - 1; i++) {
118                     final double first = ticksValue.get(i);
119                     final double second = ticksValue.get(i + 1);
120                     final double step = (second - first) / (N + 1);
121                     double v = first + step;
122                     for (int j = 0; j < N; j++) {
123                         subValues.add(v);
124                         v += step;
125                     }
126                 }
127             }
128         }
129
130         return subValues;
131     }
132
133     @Override
134     public int getSubDensity() {
135         return axisProperty.getSubticks() + 1;
136     }
137 }