summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java143
1 files changed, 143 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java
new file mode 100644
index 0000000..640ee37
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/LayoutContributionItem.java
@@ -0,0 +1,143 @@
+/*
+* 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.view;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.CompoundContributionItem;
+import org.eclipse.ui.menus.CommandContributionItem;
+import org.eclipse.ui.menus.CommandContributionItemParameter;
+
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.emulator.EmulatorPlugin;
+import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
+import com.motorola.studio.android.emulator.core.skin.IAndroidSkin;
+import com.motorola.studio.android.emulator.i18n.EmulatorNLS;
+import com.motorola.studio.android.emulator.ui.handlers.IHandlerConstants;
+
+/**
+ * This class builds dynamically the Emulator Layouts submenu from the Android Emulator and
+ * Main Display views
+ **/
+public class LayoutContributionItem extends CompoundContributionItem
+{
+ // Layout dynamic constants
+ public static final String ANDROID_VIEW_LAYOUT_DYNAMIC_ID = "androidView.layout.dynamic";
+
+ public static final String MAIN_DISPLAY_VIEW_LAYOUT_DYNAMIC_ID =
+ "mainDisplayView.layout.dynamic";
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
+ */
+ @Override
+ protected IContributionItem[] getContributionItems()
+ {
+ IContributionItem[] itemsArray;
+
+ AbstractAndroidView view = null;
+ String viewId = null;
+ if (getId().equals(ANDROID_VIEW_LAYOUT_DYNAMIC_ID))
+ {
+ viewId = AndroidView.ANDROID_VIEW_ID;
+ view = (AbstractAndroidView) EclipseUtils.getActiveView(viewId);
+ }
+ else if (getId().equals(MAIN_DISPLAY_VIEW_LAYOUT_DYNAMIC_ID))
+ {
+ viewId = MainDisplayView.EMULATOR_MAIN_DISPLAY_VIEW_ID;
+ view = (AbstractAndroidView) EclipseUtils.getActiveView(viewId);
+ }
+
+ if (view != null)
+ {
+ IAndroidEmulatorInstance instance = AbstractAndroidView.getActiveInstance();
+ IAndroidSkin skin = view.getSkin(instance);
+ if (skin != null)
+ {
+ Collection<String> layoutNames = skin.getAvailableLayouts();
+ itemsArray = new IContributionItem[layoutNames.size()];
+ populateContributionList(itemsArray, layoutNames, viewId);
+ }
+ else
+ {
+ itemsArray = new IContributionItem[1];
+ populateWithEmpty(itemsArray);
+ }
+ }
+ else
+ {
+ itemsArray = new IContributionItem[1];
+ populateWithEmpty(itemsArray);
+ }
+
+ return itemsArray;
+ }
+
+ /**
+ * Populates the array with a command item per layout name
+ *
+ * @param itemsArray The array to be populated
+ * @param layoutNames The items to be included at the array
+ * @param viewId The view that is active at the moment
+ */
+ @SuppressWarnings({
+ "rawtypes", "unchecked"
+ })
+ private void populateContributionList(IContributionItem[] itemsArray,
+ Collection<String> layoutNames, String viewId)
+ {
+ int i = 0;
+ for (String layoutName : layoutNames)
+ {
+ Map params = new HashMap();
+ params.put(IHandlerConstants.ACTIVE_VIEW_PARAMETER, viewId);
+
+ String id = EmulatorPlugin.PLUGIN_ID + ".layoutcmd." + layoutName;
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ CommandContributionItemParameter itemParam =
+ new CommandContributionItemParameter(window, id,
+ IHandlerConstants.CHANGE_EMULATOR_ORIENTATION_COMMAND, params, null,
+ null, null, layoutName, null, null,
+ CommandContributionItem.STYLE_RADIO, null, true);
+ itemsArray[i++] = new CommandContributionItem(itemParam);
+ }
+ }
+
+ /**
+ * Populates the array with a single disabled command, indicating that there
+ * are no layouts to choose
+ *
+ * @param itemsArray The array to be populated
+ */
+ @SuppressWarnings("rawtypes")
+ private void populateWithEmpty(IContributionItem[] itemsArray)
+ {
+ String id = EmulatorPlugin.PLUGIN_ID + ".emptylayout";
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ CommandContributionItemParameter itemParam =
+ new CommandContributionItemParameter(window, id,
+ IHandlerConstants.CHANGE_EMULATOR_ORIENTATION_COMMAND, new HashMap(), null,
+ null, null, EmulatorNLS.UI_LayoutContributionItem_NoLayoutsAvailable, null,
+ null, CommandContributionItem.STYLE_RADIO, null, false);
+ itemsArray[0] = new CommandContributionItem(itemParam);
+ }
+}