/*
* 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.widget;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.DialogPage;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
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.IWizardModel;
import com.motorola.studio.android.wizards.elements.ApplicationGroup;
import com.motorola.studio.android.wizards.elements.ProjectNameGroup;
import com.motorola.studio.android.wizards.elements.SdkTargetSelector;
import com.motorola.studio.android.wizards.elements.WidgetLocationGroup;
/**
* Class that represents the main page in the New Widget Project Wizard
*/
public class NewAndroidWidgetProjectMainPage extends WizardPage
{
private static final String PAGE_NAME = "Main Page";
private final AndroidProject project;
private final String NEW_WIDGET_PROJECT_HELP = AndroidPlugin.PLUGIN_ID + ".newwdgproj";
/**
* 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_NewAndroidWidgetProjectMainPage_SubtitleCreateProject;
setMessage(status.isOK() ? defaultMessage : status.getMessage(), msgType);
}
};
/**
* Constructor
*
* @param project The selected project
*/
public NewAndroidWidgetProjectMainPage(AndroidProject project)
{
super(PAGE_NAME);
this.project = project;
setTitle(AndroidNLS.UI_NewAndroidWidgetProjectMainPage_TitleCreateProject);
setDescription(AndroidNLS.UI_NewAndroidWidgetProjectMainPage_WizardProjectDescription);
setPageComplete(false);
}
/**
* Create the page SWT controls.
*
* @param parent The parent composite
*/
public void createControl(Composite parent)
{
Composite composite = new Composite(parent, SWT.NULL);
composite.setFont(parent.getFont());
initializeDialogUnits(parent);
composite.setLayout(new GridLayout());
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
//only put the project and location groups: no vertical resize, no vertical style
ProjectNameGroup projectNameGroup = new ProjectNameGroup(composite, project);
projectNameGroup.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
// Create Location Group
Group groupForLocation = new Group(composite, SWT.SHADOW_ETCHED_IN);
// Layout has 1 column
groupForLocation.setLayout(new GridLayout());
groupForLocation.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
groupForLocation.setFont(composite.getFont());
groupForLocation.setText(AndroidNLS.UI_NewAndroidWidgetProjectMainPage_LabelContents);
WidgetLocationGroup locationGroup =
new WidgetLocationGroup(groupForLocation, project, this);
// End of Location Group
// Create SDK Group
//create sdk group with vertical resize, grabbing excedding space
Group groupForTarget = new Group(composite, SWT.SHADOW_ETCHED_IN);
groupForTarget.setLayout(new GridLayout());
groupForTarget.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
groupForTarget.setFont(composite.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(composite, SWT.SHADOW_ETCHED_IN);
// Layout has 1 column
group.setLayout(new GridLayout());
group.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
group.setFont(composite.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();
}
};
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);
//create application group with no vertical resize
setPageComplete(false);
// Show description the first time
setErrorMessage(null);
setMessage(null);
projectNameGroup.forceFocus();
setControl(composite);
composite.layout(true);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, NEW_WIDGET_PROJECT_HELP);
}
/*
* (non-Javadoc)
* @see org.eclipse.jface.dialogs.DialogPage#setButtonLayoutData(org.eclipse.swt.widgets.Button)
*/
@Override
public GridData setButtonLayoutData(Button button)
{
return super.setButtonLayoutData(button);
}
}