summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java265
1 files changed, 265 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java
new file mode 100644
index 0000000..2a05611
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/ui/view/AndroidView.java
@@ -0,0 +1,265 @@
+/*
+* 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 static com.motorola.studio.android.common.log.StudioLogger.error;
+
+import org.eclipse.sequoyah.vnc.protocol.lib.ProtocolHandle;
+import org.eclipse.sequoyah.vnc.vncviewer.config.IPropertiesFileHandler;
+import org.eclipse.sequoyah.vnc.vncviewer.config.VNCConfiguration;
+import org.eclipse.sequoyah.vnc.vncviewer.graphics.swt.ISWTPainter;
+import org.eclipse.sequoyah.vnc.vncviewer.graphics.swt.SWTRemoteDisplay;
+import org.eclipse.sequoyah.vnc.vncviewer.graphics.swt.img.SWTRemoteDisplayImg;
+import org.eclipse.sequoyah.vnc.vncviewer.network.VNCProtocolData;
+import org.eclipse.sequoyah.vnc.vncviewer.registry.VNCProtocolRegistry;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.ui.IViewSite;
+import org.eclipse.ui.commands.ICommandService;
+
+import com.motorola.studio.android.common.utilities.EclipseUtils;
+import com.motorola.studio.android.emulator.EmulatorPlugin;
+import com.motorola.studio.android.emulator.core.exception.InstanceStopException;
+import com.motorola.studio.android.emulator.core.exception.SkinException;
+import com.motorola.studio.android.emulator.core.model.IAndroidEmulatorInstance;
+import com.motorola.studio.android.emulator.core.skin.IAndroidSkin;
+import com.motorola.studio.android.emulator.core.skin.ISkinKeyXmlTags;
+import com.motorola.studio.android.emulator.i18n.EmulatorNLS;
+import com.motorola.studio.android.emulator.ui.controls.IAndroidComposite;
+import com.motorola.studio.android.emulator.ui.controls.maindisplay.MainDisplayComposite;
+import com.motorola.studio.android.emulator.ui.controls.nativewindow.NativeWindowComposite;
+import com.motorola.studio.android.emulator.ui.controls.skin.SkinComposite;
+import com.motorola.studio.android.emulator.ui.handlers.IHandlerConstants;
+import com.motorola.studio.android.nativeos.IDevicePropertiesOSConstants;
+import com.motorola.studio.android.nativeos.NativeUIUtils;
+
+/**
+ * DESCRIPTION: This class represents the Android Emulator view
+ *
+ * RESPONSIBILITY: - Show the skin to the end user
+ *
+ * COLABORATORS: None.
+ *
+ * USAGE: All the public interface is extended from
+ * <code>AbstractAndroidView</code>.
+ */
+public class AndroidView extends AbstractAndroidView
+{
+ /**
+ * The Android Emulator view ID
+ */
+ public static final String ANDROID_VIEW_ID = EmulatorPlugin.PLUGIN_ID + ".androidView";
+
+ /**
+ * @see com.motorola.studio.android.emulator.ui.view.AbstractAndroidView#getViewId()
+ */
+ @Override
+ protected String getViewId()
+ {
+ return ANDROID_VIEW_ID;
+ }
+
+ /**
+ * Creates the skin composite, main display and CLI display related to
+ * emulator.
+ *
+ * @param tab
+ * the tab item that will hold the graphical elements that
+ * represents the emulator
+ * @param instance
+ * the emulator instance
+ * @param emulatorData
+ * the object to be defined with the elements created.
+ */
+ @Override
+ protected void createWidgets(TabItem tab, final IAndroidEmulatorInstance instance,
+ final AndroidViewData tabData) throws SkinException
+ {
+ tabData.loadSkin(instance);
+ IAndroidSkin skin = tabData.getSkin();
+
+ ProtocolHandle handle = instance.getProtocolHandle();
+ VNCProtocolData data = VNCProtocolRegistry.getInstance().get(handle);
+
+ final SWTRemoteDisplay mainDisplay;
+ Composite parentComposite;
+ if (instance.getProperties().getProperty(IDevicePropertiesOSConstants.useVnc,
+ NativeUIUtils.getDefaultUseVnc()).toString().equals("true"))
+ {
+ if (data != null)
+ {
+ if (instance.getProperties().getProperty("Command_Line").contains("-no-skin"))
+ {
+ int baseWidth =
+ skin.getSkinBean(instance.getCurrentLayout()).getSkinPropertyValue(
+ ISkinKeyXmlTags.SKIN_INTERNAL_VIEW_WIDTH);
+ int baseHeight =
+ skin.getSkinBean(instance.getCurrentLayout()).getSkinPropertyValue(
+ ISkinKeyXmlTags.SKIN_INTERNAL_VIEW_HEIGHT);
+
+ ScrolledComposite scrolledComposite =
+ new ScrolledComposite(tab.getParent(), SWT.H_SCROLL | SWT.V_SCROLL
+ | SWT.BACKGROUND);
+
+ final MainDisplayComposite composite =
+ new MainDisplayComposite(scrolledComposite, SWT.BACKGROUND, baseWidth,
+ baseHeight, instance);
+ composite.setLayout(new FillLayout());
+
+ mainDisplay =
+ createMainDisplay(composite, skin, instance, (ISWTPainter) data
+ .getVncPainter());
+ composite.setSize(baseWidth, baseHeight);
+
+ scrolledComposite.setContent(composite);
+ tab.setControl(scrolledComposite);
+
+ scrolledComposite.addDisposeListener(new DisposeListener()
+ {
+ public void widgetDisposed(DisposeEvent e)
+ {
+ composite.dispose();
+ }
+ });
+
+ tabData.setCliDisplay(null);
+ tabData.setComposite(composite);
+ tabData.setMainDisplay(mainDisplay);
+ }
+ else
+ {
+ parentComposite = createSkinComposite(tab.getParent(), skin, instance);
+ mainDisplay =
+ createMainDisplay(parentComposite, skin, instance, (ISWTPainter) data
+ .getVncPainter());
+
+ tabData.setComposite((IAndroidComposite) parentComposite);
+ tabData.setMainDisplay(mainDisplay);
+ tab.setControl(parentComposite);
+ }
+ }
+ else
+ {
+ error("The protocol object set in the device instance is not supported. Stopping the emulator instance...");
+ EclipseUtils.showErrorDialog(EmulatorNLS.GEN_Error,
+ EmulatorNLS.ERR_AndroidView_ProtocolImplementerNotSupported);
+
+ try
+ {
+ instance.stop(true);
+ }
+ catch (InstanceStopException e)
+ {
+ error("Error while running service for stopping virtual machine");
+ EclipseUtils.showErrorDialog(EmulatorNLS.GEN_Error,
+ EmulatorNLS.EXC_General_CannotRunStopService);
+ }
+ }
+
+ }
+ else
+ {
+ parentComposite = createNativeWindowComposite(tab.getParent(), skin, instance);
+ tabData.setComposite((IAndroidComposite) parentComposite);
+ tab.setControl(parentComposite);
+ }
+ }
+
+ /**
+ * Creates the skin composite used by this instance
+ *
+ * @param parent
+ * The parent composite where to place the widgets
+ * @param skin
+ * The object containing skin information used to draw the
+ * widgets
+ */
+ private SkinComposite createSkinComposite(Composite parent, IAndroidSkin skin,
+ IAndroidEmulatorInstance instance)
+ {
+
+ SkinComposite skinComposite = new SkinComposite(parent, skin, instance);
+ skinComposite.setBackground(new Color(skinComposite.getDisplay(), 255, 255, 255));
+
+ return skinComposite;
+ }
+
+ private NativeWindowComposite createNativeWindowComposite(Composite parent, IAndroidSkin skin,
+ IAndroidEmulatorInstance instance)
+ {
+ NativeWindowComposite nativeWindowComposite =
+ new NativeWindowComposite(parent, skin, instance);
+ // nativeWindowComposite.setBackground(new Color(nativeWindowComposite.getDisplay(), 255, 255,
+ // 255));
+
+ return nativeWindowComposite;
+ }
+
+ /**
+ * Creates the main display object used by this instance.
+ *
+ * @param parent
+ * The parent composite where to place the widgets
+ * @param skin
+ * The object containing skin information used to draw the
+ * widgets
+ * @param instance
+ * The emulator instance
+ * @param painter
+ * the painter used to draw the images
+ */
+ private SWTRemoteDisplay createMainDisplay(Composite parent, IAndroidSkin skin,
+ IAndroidEmulatorInstance instance, ISWTPainter painter)
+
+ {
+ // gets and reads the configuration files of the VNC session
+ IPropertiesFileHandler handler = IAndroidSkin.DEFAULT_PROPS_HANDLER;
+ String configFile = IAndroidSkin.DEFAULT_VNC_CONFIG_FILE;
+
+ VNCConfiguration config = new VNCConfiguration(configFile, handler);
+ final SWTRemoteDisplay mainDisplay;
+ mainDisplay =
+ new SWTRemoteDisplayImg(parent, config.getConfigurationProperties(), handler,
+ painter);
+
+ mainDisplay.setBackground(new Color(mainDisplay.getDisplay(), 0, 0, 0));
+ mainDisplay.setLayout(new FillLayout());
+
+ return mainDisplay;
+ }
+
+ /**
+ * Forces the refreshing of the menu elements.
+ */
+ @Override
+ protected void refreshMenuElements()
+ {
+ IViewSite viewSite = getViewSite();
+
+ // Update the radio button selection in the zoom menu
+ ICommandService service = (ICommandService) viewSite.getService(ICommandService.class);
+ service.refreshElements(IHandlerConstants.CHANGE_EMULATOR_ORIENTATION_COMMAND, null);
+ service.refreshElements(IHandlerConstants.CHANGE_EMULATOR_ZOOM_COMMAND, null);
+
+ }
+
+} \ No newline at end of file