diff options
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.java | 146 |
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 |