/* * 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.project; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.DialogPage; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.layout.FillLayout; 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.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Listener; import org.eclipse.ui.PlatformUI; 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; import com.motorola.studio.android.wizards.elements.ApplicationGroup; import com.motorola.studio.android.wizards.elements.LocationGroup; import com.motorola.studio.android.wizards.elements.ProjectNameGroup; import com.motorola.studio.android.wizards.elements.SdkTargetSelector; /** * Class that represents the main page in the New Project Wizard */ public class NewAndroidProjectMainPage extends WizardPage { private static final String PAGE_NAME = "Main Page"; private final AndroidProject project; private final String NEW_PROJECT_HELP = AndroidPlugin.PLUGIN_ID + ".newproj"; //private boolean isNativeChecked = false; private boolean hasNativePage = false; private Button nativeCkb; private Button obfuscateCkbox; /** * Listener for the wizard changes */ private final Listener modelListener = new Listener() { public void handleEvent(Event arg0) { IStatus status = project.getStatus(); int severity = status.getSeverity(); setPageComplete(severity != IStatus.ERROR); int msgType; switch (severity) { case IStatus.OK: msgType = DialogPage.NONE; break; case IStatus.ERROR: msgType = DialogPage.ERROR; break; case IStatus.WARNING: msgType = DialogPage.WARNING; break; default: msgType = DialogPage.NONE; break; } String defaultMessage = AndroidNLS.UI_NewAndroidProjectMainPage_SubtitleCreateProject; setMessage(status.isOK() ? defaultMessage : status.getMessage(), msgType); } }; /** * Constructor * * @param project The selected project */ public NewAndroidProjectMainPage(AndroidProject project, boolean hasNativePage) { super(PAGE_NAME); this.project = project; this.hasNativePage = hasNativePage; setTitle(AndroidNLS.UI_NewAndroidProjectMainPage_TitleCreateProject); setDescription(AndroidNLS.UI_NewAndroidProjectMainPage_WizardProjectDescription); setPageComplete(false); } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite mainComposite = new Composite(parent, SWT.NULL); mainComposite.setFont(parent.getFont()); mainComposite.setLayout(new FillLayout(SWT.VERTICAL)); initializeDialogUnits(mainComposite); final ScrolledComposite scroll = new ScrolledComposite(mainComposite, SWT.H_SCROLL | SWT.V_SCROLL); final Composite innerScrollComposite = new Composite(scroll, SWT.NONE); innerScrollComposite.setLayout(new GridLayout()); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); innerScrollComposite.setLayoutData(data); //only put the project and location groups: no vertical resize, no vertical style data = new GridData(SWT.FILL, SWT.NONE, true, false); ProjectNameGroup projectNameGroup = new ProjectNameGroup(innerScrollComposite, project); projectNameGroup.setLayoutData(data); // Create Location Group data = new GridData(SWT.FILL, SWT.NONE, true, false); Group groupForLocation = new Group(innerScrollComposite, SWT.SHADOW_ETCHED_IN); // Layout has 1 column groupForLocation.setLayout(new GridLayout()); groupForLocation.setLayoutData(data); groupForLocation.setFont(innerScrollComposite.getFont()); groupForLocation.setText(AndroidNLS.UI_NewAndroidProjectMainPage_LabelContents); LocationGroup locationGroup = new LocationGroup(groupForLocation, project, this); // End of Location Group // Create SDK Group //create sdk group with vertical resize, grabbing excedding space data = new GridData(SWT.FILL, SWT.FILL, true, true); data.heightHint = 150; Group groupForTarget = new Group(innerScrollComposite, SWT.SHADOW_ETCHED_IN); groupForTarget.setLayout(new GridLayout()); groupForTarget.setLayoutData(data); groupForTarget.setFont(innerScrollComposite.getFont()); groupForTarget.setText(AndroidNLS.UI_NewAndroidProjectMainPage_LabelTarget); final SdkTargetSelector mSdkTargetSelector = new SdkTargetSelector(groupForTarget, project); //End of Target Creation // Create Package Group Group group = new Group(innerScrollComposite, SWT.SHADOW_ETCHED_IN); data = new GridData(SWT.FILL, SWT.NONE, true, false); // Layout has 1 column group.setLayout(new GridLayout()); group.setLayoutData(data); group.setFont(innerScrollComposite.getFont()); group.setText(AndroidNLS.UI_NewAndroidProjectMainPage_LabelApplication); final ApplicationGroup applicationGroup = new ApplicationGroup(group, project); Listener listener = new Listener() { public void handleEvent(Event arg0) { applicationGroup.updateDefaultName(); applicationGroup.updateMinSdkVersion(); getContainer().updateButtons(); if (hasNativePage) { if (project.getSourceType() == SourceTypes.SAMPLE) { nativeCkb.setEnabled(false); nativeCkb.setSelection(false); project.setAddNativeSupport(false); } else { nativeCkb.setEnabled(true); project.setAddNativeSupport(nativeCkb.getSelection()); } } project.setNeedToObfuscate(obfuscateCkbox.getSelection()); } }; nativeCkb = new Button(innerScrollComposite, SWT.CHECK); nativeCkb.setText(AndroidNLS.UI_ProjectCreation_NativeSupport); if (!hasNativePage) { nativeCkb.setEnabled(false); } obfuscateCkbox = new Button(innerScrollComposite, SWT.CHECK); obfuscateCkbox.setText(AndroidNLS.UI_ProjectCreation_Obfuscate); obfuscateCkbox.setEnabled(true); projectNameGroup.addListener(IWizardModel.MODIFIED, modelListener); projectNameGroup.addListener(IWizardModel.MODIFIED, listener); locationGroup.addListener(IWizardModel.MODIFIED, listener); locationGroup.addListener(IWizardModel.MODIFIED, modelListener); applicationGroup.addListener(IWizardModel.MODIFIED, modelListener); mSdkTargetSelector.addListener(IWizardModel.MODIFIED, modelListener); mSdkTargetSelector.addListener(IWizardModel.MODIFIED, listener); nativeCkb.addListener(SWT.Selection, listener); nativeCkb.addListener(SWT.Selection, modelListener); obfuscateCkbox.addListener(SWT.Selection, listener); obfuscateCkbox.addListener(SWT.Selection, modelListener); //create application group with no vertical resize setPageComplete(false); // Show description the first time setErrorMessage(null); setMessage(null); projectNameGroup.forceFocus(); setControl(innerScrollComposite); innerScrollComposite.layout(true); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, NEW_PROJECT_HELP); // set up scroll scroll.setContent(innerScrollComposite); scroll.setExpandHorizontal(true); scroll.setExpandVertical(true); scroll.setMinSize(innerScrollComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT)); // // set control setControl(mainComposite); } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.DialogPage#setButtonLayoutData(org.eclipse.swt.widgets.Button) */ @Override public GridData setButtonLayoutData(Button button) { return super.setButtonLayoutData(button); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.WizardPage#getNextPage() */ @Override public IWizardPage getNextPage() { //returns null if there is no next page IWizardPage page = null; if (project.isAddingNativeSupport()) { //calls native page page = getWizard().getPage(NewAndroidProjectWizard.NATIVE_PAGE_NAME); } else { //calls source page when selected if (project.getSourceType() == SourceTypes.SAMPLE) { page = getWizard().getPage(NewAndroidProjectWizard.SAMPLE_PAGE_NAME); } } return page; } @Override public boolean isPageComplete() { boolean canFinish = true; if ((project.isAddingNativeSupport()) || (project.getSourceType() == SourceTypes.SAMPLE) || !super.isPageComplete()) { canFinish = false; } return canFinish; } @Override public boolean canFlipToNextPage() { boolean canFlip = false; if ((project.isAddingNativeSupport()) || (project.getSourceType() == SourceTypes.SAMPLE)) { if (super.isPageComplete()) { canFlip = true; } } return canFlip; } }