create changelog entry
[debian/openrocket] / android-libraries / achartengine / src / org / achartengine / tools / FitZoom.java
1 /**\r
2  * Copyright (C) 2009 - 2012 SC 4ViewSoft SRL\r
3  *  \r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *  \r
8  *      http://www.apache.org/licenses/LICENSE-2.0\r
9  *  \r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 package org.achartengine.tools;\r
17 \r
18 import org.achartengine.chart.AbstractChart;\r
19 import org.achartengine.chart.RoundChart;\r
20 import org.achartengine.chart.XYChart;\r
21 import org.achartengine.model.XYSeries;\r
22 import org.achartengine.renderer.DefaultRenderer;\r
23 import org.achartengine.util.MathHelper;\r
24 \r
25 public class FitZoom extends AbstractTool {\r
26   /**\r
27    * Builds an instance of the fit zoom tool.\r
28    * \r
29    * @param chart the XY chart\r
30    */\r
31   public FitZoom(AbstractChart chart) {\r
32     super(chart);\r
33   }\r
34 \r
35   /**\r
36    * Apply the tool.\r
37    */\r
38   public void apply() {\r
39     if (mChart instanceof XYChart) {\r
40       if (((XYChart) mChart).getDataset() == null) {\r
41         return;\r
42       }\r
43       int scales = mRenderer.getScalesCount();\r
44       if (mRenderer.isInitialRangeSet()) {\r
45         for (int i = 0; i < scales; i++) {\r
46           if (mRenderer.isInitialRangeSet(i)) {\r
47             mRenderer.setRange(mRenderer.getInitialRange(i), i);\r
48           }\r
49         }\r
50       } else {\r
51         XYSeries[] series = ((XYChart) mChart).getDataset().getSeries();\r
52         double[] range = null;\r
53         int length = series.length;\r
54         if (length > 0) {\r
55           for (int i = 0; i < scales; i++) {\r
56             range = new double[] { MathHelper.NULL_VALUE, -MathHelper.NULL_VALUE,\r
57                 MathHelper.NULL_VALUE, -MathHelper.NULL_VALUE };\r
58             for (int j = 0; j < length; j++) {\r
59               if (i == series[j].getScaleNumber()) {\r
60                 range[0] = Math.min(range[0], series[j].getMinX());\r
61                 range[1] = Math.max(range[1], series[j].getMaxX());\r
62                 range[2] = Math.min(range[2], series[j].getMinY());\r
63                 range[3] = Math.max(range[3], series[j].getMaxY());\r
64               }\r
65             }\r
66             double marginX = Math.abs(range[1] - range[0]) / 40;\r
67             double marginY = Math.abs(range[3] - range[2]) / 40;\r
68             mRenderer.setRange(new double[] { range[0] - marginX, range[1] + marginX,\r
69                 range[2] - marginY, range[3] + marginY }, i);\r
70           }\r
71         }\r
72       }\r
73     } else {\r
74       DefaultRenderer renderer = ((RoundChart) mChart).getRenderer();\r
75       renderer.setScale(renderer.getOriginalScale());\r
76     }\r
77   }\r
78 }\r