| /* |
| * 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); |
| } |
| } |