# HG changeset patch # User Eugene Ostroukhov # Date 1279044660 25200 # Node ID 85f06000ab135c5547f888de99a3d1aa519c406d # Parent 533ef48d3b1529ad1efe6f5a38eeec51b2f3aa87 Bug 3184 - Reorganize new project wizard diff -r 533ef48d3b15 -r 85f06000ab13 org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WRTProjectDetailsWizardPage.java --- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WRTProjectDetailsWizardPage.java Tue Jul 13 08:58:31 2010 -0700 +++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WRTProjectDetailsWizardPage.java Tue Jul 13 11:11:00 2010 -0700 @@ -58,18 +58,14 @@ IWorkspace workspace = IDEWorkbenchPlugin.getPluginWorkspace(); String projectFieldContents = (String) value; - IStatus nameStatus = workspace.validateName(projectFieldContents, - IResource.PROJECT); + IStatus nameStatus = workspace.validateName(projectFieldContents, IResource.PROJECT); if (!nameStatus.isOK()) { return nameStatus; } - IProject handle = ResourcesPlugin.getWorkspace().getRoot() - .getProject(projectFieldContents); + IProject handle = ResourcesPlugin.getWorkspace().getRoot().getProject(projectFieldContents); if (handle.exists()) { - return new Status( - IStatus.ERROR, - Activator.PLUGIN_ID, + return new Status(IStatus.ERROR, Activator.PLUGIN_ID, IDEWorkbenchMessages.WizardNewProjectCreationPage_projectExistsMessage); } return Status.OK_STATUS; @@ -81,8 +77,7 @@ private final DataBindingContext bindingContext; private final WizardContext context; - public WRTProjectDetailsWizardPage(WizardContext context, - DataBindingContext bindingContext) { + public WRTProjectDetailsWizardPage(WizardContext context, DataBindingContext bindingContext) { super("WRTApp"); setImageDescriptor(null); setTitle("Application Details"); @@ -96,48 +91,40 @@ initializeDialogUnits(parent); - PlatformUI.getWorkbench().getHelpSystem() - .setHelp(root, IIDEHelpContextIds.NEW_PROJECT_WIZARD_PAGE); + PlatformUI.getWorkbench().getHelpSystem().setHelp(root, IIDEHelpContextIds.NEW_PROJECT_WIZARD_PAGE); WizardPageSupport.create(this, bindingContext); root.setLayout(new GridLayout(2, false)); - context.createLabel(root, "Application name:"); + createProjectNameGroup(root); - context.createText(root, WizardContext.WIDGET_NAME, "application name", - bindingContext, null, new RegexpValidator("[^\\w\\. ]", - "Application name cannot contain {0} character", false)); - - context.createLabel(root, ""); - context.createLabel(root, - "This will be the application display name on the device"); context.createLabel(root, ""); context.createLabel(root, ""); - context.createLabel(root, "Widget identifier:"); + context.createLabel(root, "Application identifier:"); - context.createText(root, WizardContext.WIDGET_ID, - "applicatoin identifier", bindingContext, null, - new RegexpValidator("[\\w]*(\\.\\w[\\w]*)*", - "{0} is not a valid applicatoin ID", true)); + context.createText(root, WizardContext.WIDGET_ID, "applicatoin identifier", bindingContext, null, + new RegexpValidator("[\\w]*(\\.\\w[\\w]*)*", "{0} is not a valid applicatoin ID", true)); context.createLabel(root, ""); - context.createLabel( - root, - "This id should be unique for succesful installation of application on the device"); + context.createLabel(root, "This id should be unique for succesful installation of application on the device"); + context.createLabel(root, ""); context.createLabel(root, ""); - createProjectNameGroup(root); + context.createLabel(root, "Application name:"); + + context.createText(root, WizardContext.WIDGET_NAME, "application name", bindingContext, null, + new RegexpValidator("[^\\w\\. ]", "Application name cannot contain {0} character", false)); + + context.createLabel(root, ""); + context.createLabel(root, "This will be the application display name on the device"); Composite composite = new Composite(root, SWT.NONE); GridLayout gridLayout = new GridLayout(1, false); gridLayout.marginWidth = 0; composite.setLayout(gridLayout); - composite.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, - true, true, 2, 1)); + composite.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, true, 2, 1)); - locationArea = new ProjectContentsLocationArea(getErrorReporter(), - composite); - if (context.getProjectName() != null - && context.getProjectName().trim().length() > 0) { + locationArea = new ProjectContentsLocationArea(getErrorReporter(), composite); + if (context.getProjectName() != null && context.getProjectName().trim().length() > 0) { locationArea.updateProjectName(context.getProjectName()); } @@ -161,12 +148,10 @@ private final void createProjectNameGroup(Composite parent) { // new project label Label projectLabel = new Label(parent, SWT.NONE); - projectLabel - .setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_nameLabel); + projectLabel.setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_nameLabel); projectLabel.setFont(parent.getFont()); - Text projectNameField = context.createText(parent, - WizardContext.PROJECT_NAME, "project name", bindingContext, + Text projectNameField = context.createText(parent, WizardContext.PROJECT_NAME, "project name", bindingContext, null, new ProjectNameValidator()); projectNameField.setFont(parent.getFont()); @@ -255,8 +240,7 @@ return false; } String projectName = context.getProjectName(); - IProject project = ResourcesPlugin.getWorkspace().getRoot() - .getProject(projectName); + IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); locationArea.setExistingProject(project); String validLocationMessage = locationArea.checkValidLocation(); diff -r 533ef48d3b15 -r 85f06000ab13 org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WizardContext.java --- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WizardContext.java Tue Jul 13 08:58:31 2010 -0700 +++ b/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WizardContext.java Tue Jul 13 11:11:00 2010 -0700 @@ -59,7 +59,7 @@ public static final String PROJECT_NAME = "projectName"; private String cssFile; - private String projectName; + private String projectName = ""; private String htmlFile; private String jsFile; private final PropertyChangeSupport propertySupport = new PropertyChangeSupport( @@ -97,21 +97,21 @@ } public String getProjectName() { - return (projectName == null ? getDefaultProjectName() : projectName); - } - - private String getDefaultProjectName() { - return Util.toProjectName(getWidgetName()); + return projectName; } public void setProjectName(String projectName) { String prev = getProjectName(); - if (projectName.equals(getDefaultProjectName())) { - this.projectName = null; - } else { - this.projectName = projectName; + String prevId = getWidgetId(); + String prevName = getWidgetName(); + this.projectName = projectName; + propertySupport.firePropertyChange(PROJECT_NAME, getProjectName(), prev); + if (widgetName == null) { + propertySupport.firePropertyChange(WIDGET_NAME, getWidgetName(), prevName); + if (widgetId == null) { + propertySupport.firePropertyChange(WIDGET_ID, getWidgetId(), prevId); + } } - propertySupport.firePropertyChange(PROJECT_NAME, projectName, prev); } public String getCssFile() { @@ -159,7 +159,7 @@ } public String getWidgetName() { - return widgetName; + return widgetName == null ? getProjectName() : widgetName; } public void removePropertyChangeListener(PropertyChangeListener arg0) { @@ -230,19 +230,18 @@ } public void setWidgetName(String widgetName) { - String prevPn = getProjectName(); String prevId = getWidgetId(); String prev = getWidgetName(); - this.widgetName = widgetName; - propertySupport.firePropertyChange(WIDGET_NAME, widgetName, prev); + if (widgetName == getProjectName()) { + this.widgetName = null; + } else { + this.widgetName = widgetName; + } + propertySupport.firePropertyChange(WIDGET_NAME, getWidgetName(), prev); if (widgetId == null) { propertySupport .firePropertyChange(WIDGET_ID, getWidgetId(), prevId); } - if (projectName == null) { - propertySupport.firePropertyChange(PROJECT_NAME, getProjectName(), - prevPn); - } } public void setExtensions(Map extensions) { diff -r 533ef48d3b15 -r 85f06000ab13 org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WizardNewProjectCreationPage.java --- a/org.symbian.tools.wrttools/src/org/symbian/tools/wrttools/wizards/WizardNewProjectCreationPage.java Tue Jul 13 08:58:31 2010 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -package org.symbian.tools.wrttools.wizards; - -import java.net.URI; - -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspace; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Path; -import org.eclipse.jface.dialogs.Dialog; -import org.eclipse.jface.viewers.IStructuredSelection; -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.Composite; -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 org.eclipse.ui.IWorkingSet; -import org.eclipse.ui.PlatformUI; -import org.eclipse.ui.dialogs.WorkingSetGroup; -import org.eclipse.ui.internal.ide.IDEWorkbenchMessages; -import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; -import org.eclipse.ui.internal.ide.IIDEHelpContextIds; -import org.eclipse.ui.internal.ide.dialogs.ProjectContentsLocationArea; -import org.eclipse.ui.internal.ide.dialogs.ProjectContentsLocationArea.IErrorMessageReporter; - -/** - * Standard main page for a wizard that is creates a project resource. - *

- * This page may be used by clients as-is; it may be also be subclassed to suit. - *

- *

- * Example usage: - *

- * mainPage = new WizardNewProjectCreationPage("basicNewProjectPage");
- * mainPage.setTitle("Project");
- * mainPage.setDescription("Create a new project resource.");
- * 
- *

- */ -public class WizardNewProjectCreationPage extends WizardPage { - - // initial value stores - private String initialProjectFieldValue; - - // widgets - Text projectNameField; - - private final Listener nameModifyListener = new Listener() { - public void handleEvent(Event e) { - setLocationForSelection(); - boolean valid = validatePage(); - setPageComplete(valid); - - } - }; - - private ProjectContentsLocationArea locationArea; - - private WorkingSetGroup workingSetGroup; - - // constants - private static final int SIZING_TEXT_FIELD_WIDTH = 250; - - /** - * Creates a new project creation wizard page. - * - * @param pageName the name of this page - */ - public WizardNewProjectCreationPage(String pageName) { - super(pageName); - setPageComplete(false); - } - - /** (non-Javadoc) - * Method declared on IDialogPage. - */ - public void createControl(Composite parent) { - Composite composite = new Composite(parent, SWT.NULL); - - - initializeDialogUnits(parent); - - PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, - IIDEHelpContextIds.NEW_PROJECT_WIZARD_PAGE); - - composite.setLayout(new GridLayout()); - composite.setLayoutData(new GridData(GridData.FILL_BOTH)); - - createProjectNameGroup(composite); - - createChildControls(composite); - - locationArea = new ProjectContentsLocationArea(getErrorReporter(), composite); - if(initialProjectFieldValue != null) { - locationArea.updateProjectName(initialProjectFieldValue); - } - - // Scale the button based on the rest of the dialog - setButtonLayoutData(locationArea.getBrowseButton()); - - setPageComplete(validatePage()); - // Show description on opening - setErrorMessage(null); - setMessage(null); - setControl(composite); - Dialog.applyDialogFont(composite); - } - - protected void createChildControls(Composite composite) { - // TODO Auto-generated method stub - - } - - /** - * Create a working set group for this page. This method can only be called - * once. - * - * @param composite - * the composite in which to create the group - * @param selection - * the current workbench selection - * @param supportedWorkingSetTypes - * an array of working set type IDs that will restrict what types - * of working sets can be chosen in this group - * @return the created group. If this method has been called previously the - * original group will be returned. - * @since 3.4 - */ - public WorkingSetGroup createWorkingSetGroup(Composite composite, - IStructuredSelection selection, String[] supportedWorkingSetTypes) { - if (workingSetGroup != null) { - return workingSetGroup; - } - workingSetGroup = new WorkingSetGroup(composite, selection, - supportedWorkingSetTypes); - return workingSetGroup; - } - - /** - * Get an error reporter for the receiver. - * @return IErrorMessageReporter - */ - private IErrorMessageReporter getErrorReporter() { - return new IErrorMessageReporter(){ - /* (non-Javadoc) - * @see org.eclipse.ui.internal.ide.dialogs.ProjectContentsLocationArea.IErrorMessageReporter#reportError(java.lang.String) - */ - public void reportError(String errorMessage, boolean infoOnly) { - if (infoOnly) { - setMessage(errorMessage, IStatus.INFO); - setErrorMessage(null); - } else { - setErrorMessage(errorMessage); - } - boolean valid = errorMessage == null; - if(valid) { - valid = validatePage(); - } - - setPageComplete(valid); - } - }; - } - - /** - * Creates the project name specification controls. - * - * @param parent the parent composite - */ - private final void createProjectNameGroup(Composite parent) { - // project specification group - Composite projectGroup = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - projectGroup.setLayout(layout); - projectGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); - - // new project label - Label projectLabel = new Label(projectGroup, SWT.NONE); - projectLabel.setText(IDEWorkbenchMessages.WizardNewProjectCreationPage_nameLabel); - projectLabel.setFont(parent.getFont()); - - // new project name entry field - projectNameField = new Text(projectGroup, SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = SIZING_TEXT_FIELD_WIDTH; - projectNameField.setLayoutData(data); - projectNameField.setFont(parent.getFont()); - - // Set the initial value first before listener - // to avoid handling an event during the creation. - if (initialProjectFieldValue != null) { - projectNameField.setText(initialProjectFieldValue); - } - projectNameField.addListener(SWT.Modify, nameModifyListener); - } - - - /** - * Returns the current project location path as entered by - * the user, or its anticipated initial value. - * Note that if the default has been returned the path - * in a project description used to create a project - * should not be set. - * - * @return the project location path or its anticipated initial value. - */ - public IPath getLocationPath() { - return new Path(locationArea.getProjectLocation()); - } - - /** - /** - * Returns the current project location URI as entered by - * the user, or null if a valid project location - * has not been entered. - * - * @return the project location URI, or null - * @since 3.2 - */ - public URI getLocationURI() { - return locationArea.getProjectLocationURI(); - } - - /** - * Creates a project resource handle for the current project name field - * value. The project handle is created relative to the workspace root. - *

- * This method does not create the project resource; this is the - * responsibility of IProject::create invoked by the new - * project resource wizard. - *

- * - * @return the new project resource handle - */ - public IProject getProjectHandle() { - return ResourcesPlugin.getWorkspace().getRoot().getProject( - getProjectName()); - } - - /** - * Returns the current project name as entered by the user, or its anticipated - * initial value. - * - * @return the project name, its anticipated initial value, or null - * if no project name is known - */ - public String getProjectName() { - if (projectNameField == null) { - return initialProjectFieldValue; - } - - return getProjectNameFieldValue(); - } - - /** - * Returns the value of the project name field - * with leading and trailing spaces removed. - * - * @return the project name in the field - */ - private String getProjectNameFieldValue() { - if (projectNameField == null) { - return ""; //$NON-NLS-1$ - } - - return projectNameField.getText().trim(); - } - - /** - * Sets the initial project name that this page will use when - * created. The name is ignored if the createControl(Composite) - * method has already been called. Leading and trailing spaces - * in the name are ignored. - * Providing the name of an existing project will not necessarily - * cause the wizard to warn the user. Callers of this method - * should first check if the project name passed already exists - * in the workspace. - * - * @param name initial project name for this page - * - * @see IWorkspace#validateName(String, int) - * - */ - public void setInitialProjectName(String name) { - if (name == null) { - initialProjectFieldValue = null; - } else { - initialProjectFieldValue = name.trim(); - if(locationArea != null) { - locationArea.updateProjectName(name.trim()); - } - } - } - - /** - * Set the location to the default location if we are set to useDefaults. - */ - void setLocationForSelection() { - locationArea.updateProjectName(getProjectNameFieldValue()); - } - - - /** - * Returns whether this page's controls currently all contain valid - * values. - * - * @return true if all controls are valid, and - * false if at least one is invalid - */ - protected boolean validatePage() { - IWorkspace workspace = IDEWorkbenchPlugin.getPluginWorkspace(); - - String projectFieldContents = getProjectNameFieldValue(); - if (projectFieldContents.equals("")) { //$NON-NLS-1$ - setErrorMessage(null); - setMessage(IDEWorkbenchMessages.WizardNewProjectCreationPage_projectNameEmpty); - return false; - } - - IStatus nameStatus = workspace.validateName(projectFieldContents, - IResource.PROJECT); - if (!nameStatus.isOK()) { - setErrorMessage(nameStatus.getMessage()); - return false; - } - - IProject handle = getProjectHandle(); - if (handle.exists()) { - setErrorMessage(IDEWorkbenchMessages.WizardNewProjectCreationPage_projectExistsMessage); - return false; - } - - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject( - getProjectNameFieldValue()); - locationArea.setExistingProject(project); - - String validLocationMessage = locationArea.checkValidLocation(); - if (validLocationMessage != null) { // there is no destination location given - setErrorMessage(validLocationMessage); - return false; - } - - setErrorMessage(null); - setMessage(null); - return true; - } - - /* - * see @DialogPage.setVisible(boolean) - */ - public void setVisible(boolean visible) { - super.setVisible(visible); - if (visible) { - projectNameField.setFocus(); - } - } - - /** - * Returns the useDefaults. - * @return boolean - */ - public boolean useDefaults() { - return locationArea.isDefault(); - } - - /** - * Return the selected working sets, if any. If this page is not configured - * to interact with working sets this will be an empty array. - * - * @return the selected working sets - * @since 3.4 - */ - public IWorkingSet[] getSelectedWorkingSets() { - return workingSetGroup == null ? new IWorkingSet[0] : workingSetGroup - .getSelectedWorkingSets(); - } -}