summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java
new file mode 100644
index 0000000..f6a49a9
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/handlers/AbstractZoomHandler.java
@@ -0,0 +1,146 @@
+/*
+* Copyright (C) 2012 The Android Open Source Project
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package com.motorola.studio.android.emulator.ui.handlers;
+
+import static com.motorola.studio.android.common.log.StudioLogger.error;
+import static com.motorola.studio.android.common.log.StudioLogger.info;
+
+import java.util.Map;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.commands.IElementUpdater;
+import org.eclipse.ui.menus.UIElement;
+
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
+import com.motorola.studio.android.emulator.i18n.EmulatorNLS;
+import com.motorola.studio.android.emulator.ui.view.AbstractAndroidView;
+import com.motorola.studio.android.emulator.ui.view.AndroidViewData;
+
+/**
+ * DESCRIPTION:
+ * This class is a handler for the zoom actions
+ *
+ * RESPONSIBILITY:
+ * Execute the zoom operations on demand
+ *
+ * COLABORATORS:
+ * None.
+ *
+ * USAGE:
+ * This class is intended to be used by Eclipse only
+ */
+public abstract class AbstractZoomHandler extends AbstractHandler implements IHandlerConstants,
+ IElementUpdater
+{
+ /**
+ * @see org.eclipse.core.commands.IHandler#execute(ExecutionEvent)
+ */
+ public Object execute(ExecutionEvent event) throws ExecutionException
+ {
+ String viewId = event.getParameter(ACTIVE_VIEW_PARAMETER);
+ double zoomFactor = getZoomFactor(event.getParameters());
+
+ info("Setting zoom factor for " + viewId + " = " + zoomFactor);
+
+ IAndroidEmulatorInstance instance = AbstractAndroidView.getActiveInstance();
+ if (instance != null)
+ {
+ IViewPart viewPart = EclipseUtils.getActiveView(viewId);
+ if (viewPart instanceof AbstractAndroidView)
+ {
+ AbstractAndroidView view = (AbstractAndroidView) viewPart;
+ if (view.getZoomFactor(instance) != zoomFactor)
+ {
+ view.setZoomFactor(instance, zoomFactor);
+ view.updateActiveViewer();
+ }
+ }
+ }
+ else
+ {
+ error("The host being presented at the viewer is not available");
+ EclipseUtils.showErrorDialog(EmulatorNLS.GEN_Error,
+ EmulatorNLS.EXC_AbstractZoomHandler_InstanceNotFound);
+ }
+ return null;
+ }
+
+ /**
+ * When a different emulator tab have focus, then each of the zoom factor menu items need
+ * to update itself so that the radio selection continues at the correct place
+ *
+ * @see org.eclipse.ui.commands.IElementUpdater#updateElement(UIElement, Map)
+ */
+ @SuppressWarnings("rawtypes")
+ public void updateElement(UIElement element, Map parameters)
+ {
+ boolean checked = false;
+ IAndroidEmulatorInstance instance = AbstractAndroidView.getActiveInstance();
+ String viewId = (String) parameters.get(ACTIVE_VIEW_PARAMETER);
+
+ if ((instance != null) && (viewId != null))
+ {
+ IViewPart viewPart = EclipseUtils.getActiveView(viewId);
+ if (viewPart instanceof AbstractAndroidView)
+ {
+ AbstractAndroidView view = (AbstractAndroidView) viewPart;
+ AndroidViewData viewData = view.getViewData(instance);
+
+ double actualZoomFactor = view.getZoomFactor(instance);
+ if (testZoomFactor(viewData, parameters, actualZoomFactor))
+ {
+ checked = true;
+ }
+ }
+ }
+
+ element.setChecked(checked);
+ }
+
+ /**
+ * The zoom actions are enabled when a phone skin is being presented only
+ *
+ * @see org.eclipse.core.commands.IHandler#isEnabled()
+ */
+ @Override
+ public boolean isEnabled()
+ {
+ return AbstractAndroidView.getActiveInstance() != null;
+ }
+
+ /**
+ * Retrieves the zoom factor associated to this zoom handler instance
+ *
+ * @return The zoom factor, as defined in IEmulatorActionConstants class
+ */
+ @SuppressWarnings("rawtypes")
+ protected abstract double getZoomFactor(Map paramters);
+
+ /**
+ * Tests if the current zoom factor is the one handled by this zoom handler
+ *
+ * @param zoomFactor The active instance current zoom factor
+ *
+ * @return True if this handler handles the current zoom factor; false otherwise
+ */
+ @SuppressWarnings("rawtypes")
+ protected abstract boolean testZoomFactor(AndroidViewData viewData, Map parameters,
+ double zoomFactor);
+} \ No newline at end of file