+/**\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;\r
+\r
+import org.achartengine.chart.AbstractChart;\r
+import org.achartengine.chart.RoundChart;\r
+import org.achartengine.chart.XYChart;\r
+import org.achartengine.renderer.DefaultRenderer;\r
+import org.achartengine.tools.Pan;\r
+import org.achartengine.tools.PanListener;\r
+import org.achartengine.tools.ZoomListener;\r
+\r
+import android.graphics.RectF;\r
+import android.view.MotionEvent;\r
+\r
+/**\r
+ * A handler implementation for touch events for older platforms.\r
+ */\r
+public class TouchHandlerOld implements ITouchHandler {\r
+ /** The chart renderer. */\r
+ private DefaultRenderer mRenderer;\r
+ /** The old x coordinate. */\r
+ private float oldX;\r
+ /** The old y coordinate. */\r
+ private float oldY;\r
+ /** The zoom buttons rectangle. */\r
+ private RectF zoomR = new RectF();\r
+ /** The pan tool. */\r
+ private Pan mPan;\r
+ /** The graphical view. */\r
+ private GraphicalView graphicalView;\r
+\r
+ /**\r
+ * Creates an implementation of the old version of the touch handler.\r
+ * \r
+ * @param view the graphical view\r
+ * @param chart the chart to be drawn\r
+ */\r
+ public TouchHandlerOld(GraphicalView view, AbstractChart chart) {\r
+ graphicalView = view;\r
+ zoomR = graphicalView.getZoomRectangle();\r
+ if (chart instanceof XYChart) {\r
+ mRenderer = ((XYChart) chart).getRenderer();\r
+ } else {\r
+ mRenderer = ((RoundChart) chart).getRenderer();\r
+ }\r
+ if (mRenderer.isPanEnabled()) {\r
+ mPan = new Pan(chart);\r
+ }\r
+ }\r
+\r
+ public boolean handleTouch(MotionEvent event) {\r
+ int action = event.getAction();\r
+ if (mRenderer != null && action == MotionEvent.ACTION_MOVE) {\r
+ if (oldX >= 0 || oldY >= 0) {\r
+ float newX = event.getX();\r
+ float newY = event.getY();\r
+ if (mRenderer.isPanEnabled()) {\r
+ mPan.apply(oldX, oldY, newX, newY);\r
+ }\r
+ oldX = newX;\r
+ oldY = newY;\r
+ graphicalView.repaint();\r
+ return true;\r
+ }\r
+ } else if (action == MotionEvent.ACTION_DOWN) {\r
+ oldX = event.getX();\r
+ oldY = event.getY();\r
+ if (mRenderer != null && mRenderer.isZoomEnabled() && zoomR.contains(oldX, oldY)) {\r
+ if (oldX < zoomR.left + zoomR.width() / 3) {\r
+ graphicalView.zoomIn();\r
+ } else if (oldX < zoomR.left + zoomR.width() * 2 / 3) {\r
+ graphicalView.zoomOut();\r
+ } else {\r
+ graphicalView.zoomReset();\r
+ }\r
+ return true;\r
+ }\r
+ } else if (action == MotionEvent.ACTION_UP) {\r
+ oldX = 0;\r
+ oldY = 0;\r
+ }\r
+ return !mRenderer.isClickEnabled();\r
+ }\r
+\r
+ /**\r
+ * Adds a new zoom listener.\r
+ * \r
+ * @param listener zoom listener\r
+ */\r
+ public void addZoomListener(ZoomListener listener) {\r
+ }\r
+\r
+ /**\r
+ * Removes a zoom listener.\r
+ * \r
+ * @param listener zoom listener\r
+ */\r
+ public void removeZoomListener(ZoomListener listener) {\r
+ }\r
+\r
+ /**\r
+ * Adds a new pan listener.\r
+ * \r
+ * @param listener pan listener\r
+ */\r
+ public void addPanListener(PanListener listener) {\r
+ if (mPan != null) {\r
+ mPan.addPanListener(listener);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Removes a pan listener.\r
+ * \r
+ * @param listener pan listener\r
+ */\r
+ public void removePanListener(PanListener listener) {\r
+ if (mPan != null) {\r
+ mPan.removePanListener(listener);\r
+ }\r
+ }\r
+\r
+}
\ No newline at end of file