Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android-libraries / achartengine / src / org / achartengine / tools / FitZoom.java
diff --git a/android-libraries/achartengine/src/org/achartengine/tools/FitZoom.java b/android-libraries/achartengine/src/org/achartengine/tools/FitZoom.java
new file mode 100644 (file)
index 0000000..92f67b8
--- /dev/null
@@ -0,0 +1,78 @@
+/**\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