/* * 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 org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import com.motorola.studio.android.AndroidPlugin; 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; /** * Element for NewAndroidProject Wizard Page */ public class ApplicationGroup extends Composite { private final AndroidProject project; private Text packageName = null; private Text activityName = null; private Text applicationName = null; private Text minSdkVersionText; private String userChosenPackageName = null; private String userChosenActivityName = null; private String userChosenMinSdkVersion = null; private String userChosenApplicationName = null; private final String DEFAULT_ACTIVITY_NAME = "MainActivity"; private final String DEFAULT_APP_NAME = "User Application"; /** * Constructor * @param parent * @param project */ public ApplicationGroup(Composite parent, AndroidProject project) { super(parent, SWT.NONE); this.project = project; createContents(this); } /** * Create Controls * @param mainComposite */ protected void createContents(Composite mainComposite) { setLayout(new GridLayout()); setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // package group Composite packageComposite = new Composite(mainComposite, SWT.NONE); packageComposite.setLayout(new GridLayout(2, false)); GridData data = new GridData(SWT.FILL, SWT.NONE, true, false); packageComposite.setLayoutData(data); // application name final Label applicationNameLabel = new Label(packageComposite, SWT.NONE); applicationNameLabel.setText(AndroidNLS.UI_ApplicationGroup_ApplicationNameLabel); applicationNameLabel.setFont(mainComposite.getParent().getFont()); applicationName = new Text(packageComposite, SWT.BORDER); data = new GridData(SWT.FILL, SWT.NONE, true, false); applicationName.setLayoutData(data); applicationName.setFont(mainComposite.getParent().getFont()); applicationName.setText(DEFAULT_APP_NAME); project.setApplicationName(DEFAULT_APP_NAME); // new package label final Label packageLabel = new Label(packageComposite, SWT.NONE); packageLabel.setText(AndroidNLS.UI_ApplicationGroup_PackageNameLabel); packageLabel.setFont(mainComposite.getParent().getFont()); // new package name entry field packageName = new Text(packageComposite, SWT.BORDER); data = new GridData(SWT.FILL, SWT.NONE, true, false); packageName.setLayoutData(data); packageName.setFont(mainComposite.getParent().getFont()); packageName.setText(project.getPackageName()); final Label activityLabel = new Label(packageComposite, SWT.NONE); activityLabel.setText(AndroidNLS.UI_ApplicationGroup_ActivityNameLabel); activityLabel.setFont(mainComposite.getParent().getFont()); activityName = new Text(packageComposite, SWT.BORDER); data = new GridData(SWT.FILL, SWT.NONE, true, false); activityName.setLayoutData(data); activityName.setFont(mainComposite.getParent().getFont()); activityName.setText(DEFAULT_ACTIVITY_NAME); project.setActivityName(DEFAULT_ACTIVITY_NAME); Label minSDKVersionLabel = new Label(packageComposite, SWT.NONE); minSDKVersionLabel.setText(AndroidNLS.UI_ApplicationGroup_MinSDKVersionLabel); minSdkVersionText = new Text(packageComposite, SWT.BORDER); data = new GridData(SWT.FILL, SWT.NONE, true, false); minSdkVersionText.setLayoutData(data); minSdkVersionText.setFont(mainComposite.getParent().getFont()); String minSdkVersion = project.getMinSdkVersion(); if (minSdkVersion != null) { minSdkVersionText.setText(minSdkVersion); } else { minSdkVersionText.setEnabled(false); final Runnable listener = new Runnable() { public void run() { AndroidPlugin.getDefault().removeSDKLoaderListener(this); minSdkVersionText.getDisplay().asyncExec(new Runnable() { public void run() { minSdkVersionText.setEnabled(true); minSdkVersionText.setText(project.getMinSdkVersion()); } }); } }; AndroidPlugin.getDefault().addSDKLoaderListener(listener); minSdkVersionText.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { AndroidPlugin.getDefault().removeSDKLoaderListener(listener); } }); } minSdkVersionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { project.setMinSdkVersion(minSdkVersionText.getText().trim()); if (minSdkVersionText.isFocusControl()) { userChosenMinSdkVersion = minSdkVersionText.getText(); } notifyListeners(IWizardModel.MODIFIED, new Event()); } }); applicationName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { // application name only will be used if the project is a new project. If it is using existing source this field will be ignored project.setApplicationName(applicationName.getText()); if (applicationName.isFocusControl()) { userChosenApplicationName = applicationName.getText(); } notifyListeners(IWizardModel.MODIFIED, new Event()); } }); activityName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { // activity name only will be used if the project is a new project. If it is using existing source this field will be ignored project.setActivityName(activityName.getText()); if (activityName.isFocusControl()) { userChosenActivityName = activityName.getText(); } notifyListeners(IWizardModel.MODIFIED, new Event()); } }); packageName.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent event) { // only change package name if the project isn't using default package name (it is some source based project) if (packageName.isFocusControl()) { userChosenPackageName = packageName.getText(); project.setUsingDefaultPackage(false); } if (!project.isUsingDefaultPackage()) { project.setPackageName(packageName.getText()); } notifyListeners(IWizardModel.MODIFIED, new Event()); } }); } /** * Set the enable state for all fields within this widget * @param enabled */ private void setElementsEnabled(boolean enabled) { packageName.setEnabled(enabled); activityName.setEnabled(enabled); applicationName.setEnabled(enabled); } /** * Update Default Package name. */ public void updateDefaultName() { if ((project.getSourceType() != SourceTypes.NEW) && (project.getSourceType() != SourceTypes.WIDGET) && (packageName != null)) { project.setUsingDefaultPackage(true); project.setActivityName(""); packageName.setText(""); //$NON-NLS-1$ activityName.setText(""); applicationName.setText(""); setElementsEnabled(false); } else { project.setUsingDefaultPackage(userChosenPackageName == null); packageName.setText(userChosenPackageName == null ? project.getPackageName() : userChosenPackageName); activityName.setText(userChosenActivityName == null ? DEFAULT_ACTIVITY_NAME : userChosenActivityName); applicationName.setText(userChosenApplicationName == null ? DEFAULT_APP_NAME : userChosenApplicationName); setElementsEnabled(true); } } /** * Updates the Min Sdk Version field */ public void updateMinSdkVersion() { minSdkVersionText.setEnabled((project.getSourceType() == SourceTypes.NEW) || (project.getSourceType() == SourceTypes.WIDGET)); if (project.getSdkTarget() != null) { if (userChosenMinSdkVersion == null) { minSdkVersionText.setText(project.getSdkTarget().getVersion().getApiString()); } } else { minSdkVersionText.setText(""); } } /** * Retrieves the Activity SWT Text control * @return activityName */ public Text getActivityText() { return activityName; } public boolean isElementsEnabled() { return packageName.isEnabled() & activityName.isEnabled() & applicationName.isEnabled(); } }