summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java228
1 files changed, 228 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java
new file mode 100644
index 0000000..5888ab9
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/AndroidPropertiesStartupOptionsPage.java
@@ -0,0 +1,228 @@
+/*
+* 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.device.ui;
+
+import java.util.Properties;
+
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.sequoyah.device.framework.events.InstanceEvent;
+import org.eclipse.sequoyah.device.framework.events.InstanceEvent.InstanceEventType;
+import org.eclipse.sequoyah.device.framework.events.InstanceEventManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbenchPropertyPage;
+import org.eclipse.ui.dialogs.PropertyPage;
+
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.emulator.core.exception.SkinException;
+import com.motorola.studio.android.emulator.core.skin.IAndroidSkin;
+import com.motorola.studio.android.emulator.core.skin.SkinFramework;
+import com.motorola.studio.android.emulator.device.IDevicePropertiesConstants;
+import com.motorola.studio.android.emulator.device.instance.AndroidDeviceInstance;
+import com.motorola.studio.android.emulator.device.instance.options.StartupOptionsMgt;
+import com.motorola.studio.android.emulator.device.ui.AbstractPropertiesComposite.PropertyCompositeChangeEvent;
+import com.motorola.studio.android.emulator.device.ui.AbstractPropertiesComposite.PropertyCompositeChangeListener;
+import com.motorola.studio.android.nativeos.NativeUIUtils;
+
+/**
+ * DESCRIPTION:
+ * <br>
+ * This class implements the Startup Options Property Page for Android Emulator Device Instances.
+ * <br>
+ * It shows the Startup Options for the Android Emulator Device Instance on the UI so that the user
+ * is able to edit it.
+ * <br>
+ * RESPONSIBILITY:
+ * <br>
+ * - Allow viewing and editing Startup Options of an Android Emulator Device Instance
+ * <br>
+ * COLABORATORS:
+ * <br>
+ * PropertyPage: extends this class
+ * <br>
+ * StartupOptionsComposite: uses this composite for exhibiting startup options on the UI
+ * <br>
+ * USAGE:
+ * <br>
+ * This class should be defined by the plugin.xml file as a regular Eclipse Property Page.
+ * It should be enabled for AndroidEmulatorInstance objects.
+ *
+ */
+public class AndroidPropertiesStartupOptionsPage extends PropertyPage implements
+ IWorkbenchPropertyPage, IDevicePropertiesConstants
+{
+
+ // the Android Emulator Device Instance to which this Property Page applies
+ private AndroidDeviceInstance emuInstance;
+
+ private StartupOptionsComposite startupOptionsComposite;
+
+ // whether this property page will need its default message to be reset
+ // this happens in case the initial state of the property page when it is
+ // opened is an erroneous state (any of the properties contain invalid value)
+ private boolean defaultMessageNeedsReset = false;
+
+ // the default message defined by Eclipse implementation for reset purposes
+ private final String defaultMessage = getMessage();
+
+ // handle changes
+ private final PropertyCompositeChangeListener compositeChangeListener =
+ new PropertyCompositeChangeListener()
+ {
+ public void compositeChanged(PropertyCompositeChangeEvent e)
+ {
+ String errorMessage = startupOptionsComposite.getErrorMessage();
+ setErrorMessage(errorMessage);
+ setValid((errorMessage == null) && (getMessage() == null));
+
+ if (defaultMessageNeedsReset)
+ {
+ defaultMessageNeedsReset = false;
+ setMessage(defaultMessage);
+ }
+ }
+ };
+
+ /**
+ * Creates the UI contents of this Property Page.
+ * It shows the Android Emulator Device Instance properties
+ * organized into tabs.
+ */
+ @Override
+ protected Control createContents(Composite parent)
+ {
+ // Create Startup Options area
+
+ SkinFramework sm = new SkinFramework();
+ IAndroidSkin skin = null;
+ boolean canCalculateScale = true;
+ try
+ {
+ skin = sm.getSkinById(emuInstance.getSkinId(), emuInstance.getSkinPath());
+ }
+ catch (SkinException e)
+ {
+ StudioLogger.error(this.getClass(),
+ "Error reading instance skin during startup options page creation", e);
+ canCalculateScale = false;
+ }
+
+ startupOptionsComposite =
+ new StartupOptionsComposite(parent, emuInstance.getCommandLineArguments(), skin,
+ canCalculateScale);
+ startupOptionsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ AbstractPropertiesComposite.addCompositeChangeListener(compositeChangeListener);
+
+ // If anything is not correct with instance property values,
+ // show the error message, but as an information to follow
+ // UI guidelines
+ String errorMessage = startupOptionsComposite.getErrorMessage();
+ setValid((errorMessage == null));
+ if (errorMessage != null)
+ {
+ defaultMessageNeedsReset = true;
+ setMessage(errorMessage, INFORMATION);
+ }
+
+ return startupOptionsComposite;
+
+ }
+
+ /**
+ * Sets the element that owns the properties
+ */
+ @Override
+ public void setElement(IAdaptable element)
+ {
+ // save the instance for direct use
+ if (element instanceof AndroidDeviceInstance)
+ {
+ emuInstance = (AndroidDeviceInstance) element;
+ }
+
+ super.setElement(element);
+ }
+
+ /**
+ * Performs the OK operation by setting the edited startup options as the
+ * startup options for the Android Emulator Device Instance to which this
+ * Property Page applies (the object for which it was created).
+ *
+ * @see org.eclipse.jface.preference.PreferencePage#performOk()
+ */
+ @Override
+ public boolean performOk()
+ {
+ save();
+ return super.performOk();
+ }
+
+ /**
+ * Performs the Apply operation (which is the same as OK)
+ *
+ * @see org.eclipse.jface.preference.PreferencePage#performApply()
+ */
+ @Override
+ protected void performApply()
+ {
+ save();
+ super.performApply();
+ }
+
+ /**
+ * Save the edited startup options in the Android Emulator Device Instance
+ */
+ private void save()
+ {
+ if (emuInstance != null)
+ {
+ Properties emuProperties = emuInstance.getProperties();
+ emuProperties.setProperty(IDevicePropertiesConstants.commandline,
+ StartupOptionsMgt.getParamList());
+ emuInstance.setProperties(emuProperties);
+ InstanceEventManager.getInstance().notifyListeners(
+ new InstanceEvent(InstanceEventType.INSTANCE_UPDATED, emuInstance));
+ }
+ }
+
+ /**
+ * Set the default initial properties
+ *
+ * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
+ */
+ @Override
+ protected void performDefaults()
+ {
+ startupOptionsComposite.reloadValues(NativeUIUtils.getDefaultCommandLine());
+ super.performDefaults();
+ }
+
+ /**
+ * Remove listeners and dispose widgets
+ */
+ @Override
+ public void dispose()
+ {
+ AbstractPropertiesComposite.removeCompositeChangeListener(compositeChangeListener);
+ startupOptionsComposite.dispose();
+ startupOptionsComposite = null;
+ super.dispose();
+ }
+
+}