summaryrefslogtreecommitdiff
path: root/src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java')
-rw-r--r--src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java239
1 files changed, 239 insertions, 0 deletions
diff --git a/src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java b/src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java
new file mode 100644
index 0000000..b0f8d4e
--- /dev/null
+++ b/src/plugins/android/src/com/motorola/studio/android/wizards/elements/LocationGroup.java
@@ -0,0 +1,239 @@
+/*
+ * 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.wizards.elements;
+
+import java.io.File;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Text;
+
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.i18n.AndroidNLS;
+import com.motorola.studio.android.model.AndroidProject;
+import com.motorola.studio.android.model.AndroidProject.SourceTypes;
+import com.motorola.studio.android.model.IWizardModel;
+import com.motorola.studio.android.wizards.project.NewAndroidProjectMainPage;
+
+/**
+ * Class that implements the Location group to be used on the New Project Wizard
+ */
+public class LocationGroup extends Composite
+{
+ final private AndroidProject project;
+
+ final private NewAndroidProjectMainPage page;
+
+ private String lastSourcePathValue = null;
+
+ /**
+ * Constructor
+ *
+ * @param parent
+ * @param project
+ * @param page
+ */
+ public LocationGroup(Composite parent, AndroidProject project, NewAndroidProjectMainPage page)
+ {
+ super(parent, SWT.SHADOW_ETCHED_IN);
+ this.project = project;
+ this.page = page;
+ setLayout(new GridLayout());
+ setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ createControl(this);
+ }
+
+ /**
+ * Create Controls
+ *
+ * @param parent
+ */
+ private void createControl(Composite parent)
+ {
+ final Button createNewProjectRadio = new Button(this, SWT.RADIO);
+ createNewProjectRadio.setText(AndroidNLS.UI_LocationGroup_NewProjectRadioLabel);
+ createNewProjectRadio.setSelection(true);
+
+ final Button createSampleRadio = new Button(this, SWT.RADIO);
+ createSampleRadio.setText(AndroidNLS.UI_LocationGroup_NewFromSampleRadioLabel);
+ createSampleRadio.setSelection(false);
+
+ final Button existing_project_radio = new Button(this, SWT.RADIO);
+ existing_project_radio
+ .setText(AndroidNLS.UI_LocationGroup_NewFromExistentProjectRadioLabel);
+ existing_project_radio.setSelection(false);
+
+ final Button useDefaultLocation = new Button(this, SWT.CHECK);
+ useDefaultLocation.setText(AndroidNLS.UI_LocationGroup_UseDefaultLocationCheckLabel);
+ useDefaultLocation.setSelection(true);
+
+ Composite location_group = new Composite(this, SWT.NONE);
+ location_group.setLayout(new GridLayout(4, false));
+ location_group.setLayoutData(new GridData(GridData.FILL_BOTH));
+ location_group.setFont(parent.getFont());
+
+ Label locationLabel = new Label(location_group, SWT.NONE);
+ locationLabel.setText(AndroidNLS.UI_LocationGroup_LocationLabel);
+
+ final Text projectPath = new Text(location_group, SWT.BORDER);
+ GridData data = new GridData(GridData.FILL, GridData.BEGINNING, true, false, 2, 1);
+ projectPath.setLayoutData(data);
+ projectPath.setFont(parent.getFont());
+ projectPath.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toOSString());
+ projectPath.setEnabled(false);
+ projectPath.addListener(SWT.Modify, new Listener()
+ {
+ public void handleEvent(Event event)
+ {
+ if (projectPath.isEnabled())
+ {
+ project.setLocation(projectPath.getText());
+ notifyListeners(IWizardModel.MODIFIED, new Event());
+ }
+ }
+ });
+
+ final Button browseButton = new Button(location_group, SWT.PUSH);
+ browseButton.setText(AndroidNLS.UI_General_BrowseButtonLabel);
+ browseButton.setEnabled(false);
+ page.setButtonLayoutData(browseButton);
+ browseButton.addSelectionListener(new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent e)
+ {
+
+ String existing_dir = project.getLocation();
+
+ // Disable the path if it doesn't exist
+ if (existing_dir != null
+ && (existing_dir.length() == 0 || !new File(existing_dir).exists()))
+ {
+ existing_dir = null;
+ }
+
+ DirectoryDialog dd = new DirectoryDialog(projectPath.getShell());
+ dd.setMessage(AndroidNLS.UI_LocationGroup_BrowseDialogMessage);
+ dd.setFilterPath(existing_dir);
+ String customLocation = dd.open();
+ if (customLocation != null)
+ {
+ projectPath.setText(customLocation);
+ if (existing_project_radio.getSelection() && customLocation.length() > 0)
+ {
+ setLastSourcePath(customLocation);
+ }
+ }
+ }
+ });
+
+ SelectionListener location_listener = new SelectionAdapter()
+ {
+ @Override
+ public void widgetSelected(SelectionEvent e)
+ {
+ boolean isNewProject = createNewProjectRadio.getSelection();
+ boolean existentProject = existing_project_radio.getSelection();
+ boolean fromSample = createSampleRadio.getSelection();
+
+ if (isNewProject ^ existentProject ^ fromSample)
+ {
+ // After this point We know that only one option is true
+ boolean useDefault = useDefaultLocation.getSelection();
+ useDefaultLocation.setEnabled(!existentProject);
+
+ String path;
+ if (existentProject)
+ {
+ path = getLastSourcePath();
+ useDefaultLocation.setSelection(false);
+ useDefault = false;
+ }
+ else if (useDefault)
+ {
+ path = project.getDefaultLocation();
+ }
+ else
+ {
+ path = project.getLocation();
+ }
+ boolean enablePath = !((isNewProject || fromSample) && useDefault);
+ projectPath.setEnabled(enablePath);
+ browseButton.setEnabled(enablePath);
+
+ project.setSourceType(isNewProject ? SourceTypes.NEW : existentProject
+ ? SourceTypes.EXISTING : SourceTypes.SAMPLE);
+
+ project.setUseDefaultLocation(useDefault);
+ if (enablePath && (path == null || path.length() == 0))
+ {
+ projectPath.setText(""); //$NON-NLS-1$
+ projectPath.setFocus();
+ }
+ else
+ {
+ projectPath.setText(path);
+ }
+
+ notifyListeners(IWizardModel.MODIFIED, new Event());
+ }
+ else
+ {
+ StudioLogger.error(LocationGroup.class,
+ "Ilegal State with New Project radio buttons."); //$NON-NLS-1$
+ }
+ }
+ };
+
+ createNewProjectRadio.addSelectionListener(location_listener);
+ existing_project_radio.addSelectionListener(location_listener);
+ useDefaultLocation.addSelectionListener(location_listener);
+ }
+
+ /**
+ * Get last path value defined by the user for the
+ * "Create from existing source" case
+ *
+ * @return The last path value defined by the user.
+ */
+ public String getLastSourcePath()
+ {
+ return this.lastSourcePathValue;
+ }
+
+ /**
+ * Set the last path value defined by the user for the
+ * "Create from existing source" case
+ *
+ * @param path
+ * - The last path defined by the user
+ */
+ public void setLastSourcePath(String path)
+ {
+ this.lastSourcePathValue = path;
+ }
+}