summaryrefslogtreecommitdiff
path: root/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java')
-rw-r--r--src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java210
1 files changed, 210 insertions, 0 deletions
diff --git a/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java
new file mode 100644
index 0000000..278de88
--- /dev/null
+++ b/src/plugins/emulator/src/com/motorola/studio/android/emulator/device/ui/InfoComposite.java
@@ -0,0 +1,210 @@
+/*
+* 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.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+
+import com.motorola.studio.android.adt.SdkUtils;
+import com.motorola.studio.android.emulator.device.IDevicePropertiesConstants;
+import com.motorola.studio.android.emulator.i18n.EmulatorNLS;
+
+/**
+ * DESCRIPTION:
+ * <br>
+ * This class is a composite which shows all Android Emulator Device Instance information.
+ * All displayed information can be edited and kept on a Properties object, which can be
+ * later used to be set to an actual Android Emulator Device Instance object as its new values.
+ * <br>
+ * It extends the AbstractPropertiesComposite so as to use its common functionalities.
+ * <br>
+ * RESPONSIBILITY:
+ * <br>
+ * - Show all available UI information of a Android Emulator Device Instance
+ * <br>
+ * COLABORATORS:
+ * <br>
+ * AbstractPropertiesComposite: extends this class
+ * <br>
+ * IDevicePropertiesConstants: implements this interface in order to have direct use of its
+ * constants for populating the device instance's Properties object
+ * <br>
+ * USAGE:
+ * <br>
+ * This composite can be used for any UI that shows all Android Emulator Device Instance
+ * UI information. It can either allow of stop the editing of the name of the instance,
+ * while other information is always editable.
+ * It should be instantiated as a regular composite.
+ */
+public class InfoComposite extends AbstractPropertiesComposite implements
+ IDevicePropertiesConstants
+{
+
+ private boolean showEmulatorDefNotFoundMsg = false;
+
+ private Properties emuPropertiesWorkingCopy;
+
+ private String emuName;
+
+ private PropertiesMainComposite mainComposite;
+
+ // the listener to changes on all AbstractPropertiesComposite objects used on this composite
+ private PropertyCompositeChangeListener listener = new PropertyCompositeChangeListener()
+ {
+ public void compositeChanged(PropertyCompositeChangeEvent e)
+ {
+ if (e.getSource() instanceof PropertiesMainComposite)
+ {
+ emuPropertiesWorkingCopy.setProperty(timeout, mainComposite.getTimeout());
+ emuPropertiesWorkingCopy.setProperty(skinId, mainComposite.getSkinId());
+ emuPropertiesWorkingCopy.setProperty(useVnc, mainComposite.getUseVnc());
+ emuPropertiesWorkingCopy.setProperty(useProxy, mainComposite.getUseProxy());
+ emuPropertiesWorkingCopy.setProperty(startFromSnapshot,
+ mainComposite.getstartFromSnapshot());
+ emuPropertiesWorkingCopy.setProperty(saveSnapshot, mainComposite.getSaveSnapshot());
+ emuPropertiesWorkingCopy.setProperty(abiType, mainComposite.getAbiType());
+
+ notifyCompositeChangeListeners();
+ }
+ }
+ };
+
+ /**
+ * Creates a InfoComposite object.
+ *
+ * @param parent the parent composite
+ * @param emuProperties the instance properties to be shown on the UI
+ * @param emuName the name of the instance
+ * @param isNameEditable whether the instance name should be made editable or not
+ * @param areOtherFieldsEditable True if the user will be able to edit other data in the composite; false otherwise
+ */
+ public InfoComposite(Composite parent, Properties emuProperties, String emuName,
+ boolean areOtherFieldsEditable)
+ {
+ super(parent);
+
+ this.emuPropertiesWorkingCopy = (Properties) emuProperties.clone();
+ this.emuName = emuName;
+
+ createUI(areOtherFieldsEditable);
+
+ parent.addDisposeListener(new DisposeListener()
+ {
+ public void widgetDisposed(DisposeEvent e)
+ {
+ AbstractPropertiesComposite.removeCompositeChangeListener(listener);
+ InfoComposite.this.dispose();
+ }
+ });
+ }
+
+ /**
+ * Creates all the UI for this composite. The listener declared as attribute to this class
+ * is added to all composites extending AbstractPropertiesComposite.
+ * Information is organized on 3 tabs:<br>
+ * - "Main" tab: uses the PropertiesMainComposite;<br>
+ * - "Advanced" tab: uses the PropertiesAdvancedComposite;<br>
+ *
+ * @param editable True if the user will be able to edit data in the composite; false otherwise
+ */
+ private void createUI(boolean editable)
+ {
+ GridLayout mainLayout = new GridLayout(1, false);
+ mainLayout.marginWidth = 0;
+ mainLayout.marginHeight = 0;
+ this.setLayout(mainLayout);
+
+ mainComposite =
+ new PropertiesMainComposite(this, emuName, getProperty(emulatorDefId),
+ getProperty(timeout), Boolean.parseBoolean(getProperty(useVnc)),
+ Boolean.parseBoolean(getProperty(useProxy)),
+ Boolean.parseBoolean(getProperty(useSnapshots)),
+ Boolean.parseBoolean(getProperty(saveSnapshot)),
+ Boolean.parseBoolean(getProperty(startFromSnapshot)),
+ SdkUtils.getTargetByName(getProperty(vmTarget)), getProperty(vmSkin),
+ getProperty(vmPath), getProperty(abiType), true, false, editable);
+ mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+
+ AbstractPropertiesComposite.addCompositeChangeListener(listener);
+ }
+
+ /**
+ * Retrieves the given property from the instance.
+ *
+ * @param propertyName the name of the property (key)
+ *
+ * @return the property value
+ */
+ private String getProperty(String propertyName)
+ {
+ String emuProperty = emuPropertiesWorkingCopy.getProperty(propertyName);
+ if (emuProperty == null)
+ {
+ emuProperty = "";
+ }
+ return emuProperty;
+ }
+
+ /**
+ * Retrieves the (potentially) edited properties.
+ *
+ * @return the edited properties
+ */
+ public Properties getPropertiesWorkingCopy()
+ {
+ return emuPropertiesWorkingCopy;
+ }
+
+ /**
+ * Retrieves the error message associated to this composites current state.
+ * "Main" tab's error message is returned if any; if none, "Skin" tab's error
+ * message is returned if any; if none, "VM" tab's error message is returned if
+ * any; if none, <code>null</code> is returned to state there is no error with
+ * the current state.
+ *
+ * @return the error message, or <code>null</code> if there are no errors
+ */
+ @Override
+ public String getErrorMessage()
+ {
+ String errorMessage = mainComposite.getErrorMessage();
+
+ return errorMessage;
+ }
+
+ /**
+ * Retrieves the information message associated to this composites current state.
+ *
+ * @return the information message, or <code>null</code> if there are no information messages
+ */
+ public String getInfoMessage()
+ {
+ String infoMessage = null;
+
+ if (showEmulatorDefNotFoundMsg)
+ {
+ infoMessage = EmulatorNLS.INFO_InfoComposite_EmulatorDefinitionNotFound;
+ }
+
+ return infoMessage;
+ }
+}