--- /dev/null
+/**\r
+ * Copyright (C) 2009 - 2012 SC 4ViewSoft SRL\r
+ * \r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ * \r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.achartengine.tools;\r
+\r
+import org.achartengine.chart.AbstractChart;\r
+import org.achartengine.chart.RoundChart;\r
+import org.achartengine.chart.XYChart;\r
+import org.achartengine.model.XYSeries;\r
+import org.achartengine.renderer.DefaultRenderer;\r
+import org.achartengine.util.MathHelper;\r
+\r
+public class FitZoom extends AbstractTool {\r
+ /**\r
+ * Builds an instance of the fit zoom tool.\r
+ * \r
+ * @param chart the XY chart\r
+ */\r
+ public FitZoom(AbstractChart chart) {\r
+ super(chart);\r
+ }\r
+\r
+ /**\r
+ * Apply the tool.\r
+ */\r
+ public void apply() {\r
+ if (mChart instanceof XYChart) {\r
+ if (((XYChart) mChart).getDataset() == null) {\r
+ return;\r
+ }\r
+ int scales = mRenderer.getScalesCount();\r
+ if (mRenderer.isInitialRangeSet()) {\r
+ for (int i = 0; i < scales; i++) {\r
+ if (mRenderer.isInitialRangeSet(i)) {\r
+ mRenderer.setRange(mRenderer.getInitialRange(i), i);\r
+ }\r
+ }\r
+ } else {\r
+ XYSeries[] series = ((XYChart) mChart).getDataset().getSeries();\r
+ double[] range = null;\r
+ int length = series.length;\r
+ if (length > 0) {\r
+ for (int i = 0; i < scales; i++) {\r
+ range = new double[] { MathHelper.NULL_VALUE, -MathHelper.NULL_VALUE,\r
+ MathHelper.NULL_VALUE, -MathHelper.NULL_VALUE };\r
+ for (int j = 0; j < length; j++) {\r
+ if (i == series[j].getScaleNumber()) {\r
+ range[0] = Math.min(range[0], series[j].getMinX());\r
+ range[1] = Math.max(range[1], series[j].getMaxX());\r
+ range[2] = Math.min(range[2], series[j].getMinY());\r
+ range[3] = Math.max(range[3], series[j].getMaxY());\r
+ }\r
+ }\r
+ double marginX = Math.abs(range[1] - range[0]) / 40;\r
+ double marginY = Math.abs(range[3] - range[2]) / 40;\r
+ mRenderer.setRange(new double[] { range[0] - marginX, range[1] + marginX,\r
+ range[2] - marginY, range[3] + marginY }, i);\r
+ }\r
+ }\r
+ }\r
+ } else {\r
+ DefaultRenderer renderer = ((RoundChart) mChart).getRenderer();\r
+ renderer.setScale(renderer.getOriginalScale());\r
+ }\r
+ }\r
+}\r