mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Bug #205214: extending wizard page from "WizardNewProjectCreationPage".
This commit is contained in:
parent
112824a214
commit
284d5d60f0
1 changed files with 21 additions and 200 deletions
|
@ -15,8 +15,6 @@ import java.util.ArrayList;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.eclipse.core.resources.IProject;
|
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.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
|
@ -24,12 +22,10 @@ import org.eclipse.core.runtime.IExtension;
|
||||||
import org.eclipse.core.runtime.IExtensionPoint;
|
import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.core.runtime.Platform;
|
import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.jface.dialogs.DialogPage;
|
import org.eclipse.jface.dialogs.DialogPage;
|
||||||
import org.eclipse.jface.wizard.IWizard;
|
import org.eclipse.jface.wizard.IWizard;
|
||||||
import org.eclipse.jface.wizard.IWizardPage;
|
import org.eclipse.jface.wizard.IWizardPage;
|
||||||
import org.eclipse.jface.wizard.WizardPage;
|
|
||||||
import org.eclipse.swt.SWT;
|
import org.eclipse.swt.SWT;
|
||||||
import org.eclipse.swt.accessibility.AccessibleAdapter;
|
import org.eclipse.swt.accessibility.AccessibleAdapter;
|
||||||
import org.eclipse.swt.accessibility.AccessibleEvent;
|
import org.eclipse.swt.accessibility.AccessibleEvent;
|
||||||
|
@ -40,23 +36,18 @@ import org.eclipse.swt.layout.GridData;
|
||||||
import org.eclipse.swt.layout.GridLayout;
|
import org.eclipse.swt.layout.GridLayout;
|
||||||
import org.eclipse.swt.widgets.Button;
|
import org.eclipse.swt.widgets.Button;
|
||||||
import org.eclipse.swt.widgets.Composite;
|
import org.eclipse.swt.widgets.Composite;
|
||||||
import org.eclipse.swt.widgets.Event;
|
|
||||||
import org.eclipse.swt.widgets.Label;
|
import org.eclipse.swt.widgets.Label;
|
||||||
import org.eclipse.swt.widgets.Listener;
|
|
||||||
import org.eclipse.swt.widgets.Text;
|
|
||||||
import org.eclipse.swt.widgets.Tree;
|
import org.eclipse.swt.widgets.Tree;
|
||||||
import org.eclipse.swt.widgets.TreeItem;
|
import org.eclipse.swt.widgets.TreeItem;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
|
||||||
|
|
||||||
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
|
import org.eclipse.cdt.ui.newui.CDTPrefUtil;
|
||||||
import org.eclipse.cdt.ui.newui.PageLayout;
|
import org.eclipse.cdt.ui.newui.PageLayout;
|
||||||
import org.eclipse.cdt.ui.newui.ProjectContentsArea;
|
|
||||||
import org.eclipse.cdt.ui.newui.UIMessages;
|
import org.eclipse.cdt.ui.newui.UIMessages;
|
||||||
import org.eclipse.cdt.ui.newui.ProjectContentsArea.IErrorMessageReporter;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.CPluginImages;
|
import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
|
|
||||||
public class CDTMainWizardPage extends WizardPage implements IWizardItemsListListener {
|
public class CDTMainWizardPage extends WizardNewProjectCreationPage implements IWizardItemsListListener {
|
||||||
private static final Image IMG_CATEGORY = CPluginImages.get(CPluginImages.IMG_OBJS_SEARCHFOLDER);
|
private static final Image IMG_CATEGORY = CPluginImages.get(CPluginImages.IMG_OBJS_SEARCHFOLDER);
|
||||||
private static final Image IMG_ITEM = CPluginImages.get(CPluginImages.IMG_OBJS_VARIABLE);
|
private static final Image IMG_ITEM = CPluginImages.get(CPluginImages.IMG_OBJS_VARIABLE);
|
||||||
|
|
||||||
|
@ -65,22 +56,14 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
private static final String EXTENSION_POINT_ID = "org.eclipse.cdt.ui.CDTWizard"; //$NON-NLS-1$
|
private static final String EXTENSION_POINT_ID = "org.eclipse.cdt.ui.CDTWizard"; //$NON-NLS-1$
|
||||||
private static final String ELEMENT_NAME = "wizard"; //$NON-NLS-1$
|
private static final String ELEMENT_NAME = "wizard"; //$NON-NLS-1$
|
||||||
private static final String CLASS_NAME = "class"; //$NON-NLS-1$
|
private static final String CLASS_NAME = "class"; //$NON-NLS-1$
|
||||||
private static final String HELP_CTX = "org.eclipse.ui.ide.new_project_wizard_page_context"; //$NON-NLS-1$
|
|
||||||
public static final String DESC = "EntryDescriptor"; //$NON-NLS-1$
|
public static final String DESC = "EntryDescriptor"; //$NON-NLS-1$
|
||||||
// constants
|
|
||||||
private static final int SIZING_TEXT_FIELD_WIDTH = 250;
|
|
||||||
|
|
||||||
// initial value stores
|
|
||||||
private String initialProjectFieldValue;
|
|
||||||
|
|
||||||
// widgets
|
// widgets
|
||||||
private Text projectNameField;
|
|
||||||
private Tree tree;
|
private Tree tree;
|
||||||
private Composite right;
|
private Composite right;
|
||||||
private Button show_sup;
|
private Button show_sup;
|
||||||
private Label right_label;
|
private Label right_label;
|
||||||
|
|
||||||
private ProjectContentsArea locationArea;
|
|
||||||
public CWizardHandler h_selected = null;
|
public CWizardHandler h_selected = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -97,34 +80,15 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
* Method declared on IDialogPage.
|
* Method declared on IDialogPage.
|
||||||
*/
|
*/
|
||||||
public void createControl(Composite parent) {
|
public void createControl(Composite parent) {
|
||||||
Composite composite = new Composite(parent, SWT.NULL);
|
super.createControl(parent);
|
||||||
composite.setFont(parent.getFont());
|
|
||||||
|
createDynamicGroup((Composite)getControl());
|
||||||
initializeDialogUnits(parent);
|
|
||||||
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, HELP_CTX);
|
|
||||||
|
|
||||||
composite.setLayout(new GridLayout());
|
|
||||||
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
|
|
||||||
|
|
||||||
createProjectNameGroup(composite);
|
|
||||||
locationArea = new ProjectContentsArea(getErrorReporter(), composite);
|
|
||||||
if(initialProjectFieldValue != null) {
|
|
||||||
locationArea.updateProjectName(initialProjectFieldValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scale the button based on the rest of the dialog
|
|
||||||
setButtonLayoutData(locationArea.getBrowseButton());
|
|
||||||
|
|
||||||
createDynamicGroup(composite);
|
|
||||||
|
|
||||||
switchTo(updateData(tree, right, show_sup, CDTMainWizardPage.this, getWizard()),
|
switchTo(updateData(tree, right, show_sup, CDTMainWizardPage.this, getWizard()),
|
||||||
getDescriptor(tree));
|
getDescriptor(tree));
|
||||||
|
|
||||||
setPageComplete(validatePage());
|
setPageComplete(validatePage());
|
||||||
// Show description on opening
|
|
||||||
setErrorMessage(null);
|
setErrorMessage(null);
|
||||||
setMessage(null);
|
setMessage(null);
|
||||||
setControl(composite);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createDynamicGroup(Composite parent) {
|
private void createDynamicGroup(Composite parent) {
|
||||||
|
@ -178,139 +142,16 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
show_sup.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOSUPP));
|
show_sup.setSelection(!CDTPrefUtil.getBool(CDTPrefUtil.KEY_NOSUPP));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get an error reporter for the receiver.
|
|
||||||
* @return IErrorMessageReporter
|
|
||||||
*/
|
|
||||||
private IErrorMessageReporter getErrorReporter() {
|
|
||||||
return new IErrorMessageReporter(){
|
|
||||||
public void reportError(String errorMessage) {
|
|
||||||
setErrorMessage(errorMessage);
|
|
||||||
boolean valid = errorMessage == null;
|
|
||||||
if(valid) valid = validatePage();
|
|
||||||
setPageComplete(valid);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
public IWizardPage getNextPage() {
|
public IWizardPage getNextPage() {
|
||||||
if (h_selected == null) // cannot continue
|
return (h_selected == null) ? null : h_selected.getSpecificPage();
|
||||||
return null;
|
|
||||||
return h_selected.getSpecificPage();
|
|
||||||
}
|
}
|
||||||
/**
|
|
||||||
* 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(UIMessages.getString("CMainWizardPage.8")); //$NON-NLS-1$
|
|
||||||
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, new Listener() {
|
|
||||||
public void handleEvent(Event e) {
|
|
||||||
locationArea.updateProjectName(getProjectNameFieldValue());
|
|
||||||
setPageComplete(validatePage());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a project resource handle for the current project name field value.
|
|
||||||
* <p>
|
|
||||||
* This method does not create the project resource; this is the responsibility
|
|
||||||
* of <code>IProject::create</code> invoked by the new project resource wizard.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return the new project resource handle
|
|
||||||
*/
|
|
||||||
private 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 <code>null</code>
|
|
||||||
* if no project name is known
|
|
||||||
*/
|
|
||||||
|
|
||||||
public String getProjectName() {
|
|
||||||
if (projectNameField == null) {
|
|
||||||
return initialProjectFieldValue;
|
|
||||||
}
|
|
||||||
return getProjectNameFieldValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
public IPath getProjectLocation() {
|
public IPath getProjectLocation() {
|
||||||
if (locationArea.isDefault()) return null;
|
return useDefaults() ? null : getLocationPath();
|
||||||
return new Path(locationArea.getProjectLocation());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getProjectLocationPath() {
|
public String getProjectLocationPath() {
|
||||||
return locationArea.getProjectLocation();
|
return getLocationPath().toOSString();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -321,28 +162,15 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
* <code>false</code> if at least one is invalid
|
* <code>false</code> if at least one is invalid
|
||||||
*/
|
*/
|
||||||
protected boolean validatePage() {
|
protected boolean validatePage() {
|
||||||
IWorkspace workspace = ResourcesPlugin.getWorkspace();
|
|
||||||
setMessage(null);
|
setMessage(null);
|
||||||
|
if (!super.validatePage())
|
||||||
|
return false;
|
||||||
|
|
||||||
String projectFieldContents = getProjectNameFieldValue();
|
if (getProjectName().indexOf('#') >= 0) {
|
||||||
if (projectFieldContents.length() == 0) {
|
|
||||||
setErrorMessage(UIMessages.getString("CMainWizardPage.9")); //$NON-NLS-1$
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
IStatus nameStatus = workspace.validateName(projectFieldContents,
|
|
||||||
IResource.PROJECT);
|
|
||||||
if (!nameStatus.isOK()) {
|
|
||||||
setErrorMessage(nameStatus.getMessage());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (projectFieldContents.indexOf('#') >= 0) {
|
|
||||||
setErrorMessage(UIMessages.getString("CDTMainWizardPage.0")); //$NON-NLS-1$
|
setErrorMessage(UIMessages.getString("CDTMainWizardPage.0")); //$NON-NLS-1$
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
boolean bad = true; // should we treat existing project as error
|
boolean bad = true; // should we treat existing project as error
|
||||||
|
|
||||||
IProject handle = getProjectHandle();
|
IProject handle = getProjectHandle();
|
||||||
|
@ -376,9 +204,9 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!locationArea.isDefault()) {
|
if (!useDefaults()) {
|
||||||
IStatus locationStatus = workspace.validateProjectLocationURI(handle,
|
IStatus locationStatus = ResourcesPlugin.getWorkspace().validateProjectLocationURI(handle,
|
||||||
locationArea.getProjectLocationURI());
|
getLocationURI());
|
||||||
if (!locationStatus.isOK()) {
|
if (!locationStatus.isOK()) {
|
||||||
setErrorMessage(locationStatus.getMessage());
|
setErrorMessage(locationStatus.getMessage());
|
||||||
return false;
|
return false;
|
||||||
|
@ -406,22 +234,15 @@ import org.eclipse.cdt.internal.ui.CPluginImages;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* see @DialogPage.setVisible(boolean)
|
|
||||||
*/
|
|
||||||
public void setVisible(boolean visible) {
|
|
||||||
super.setVisible(visible);
|
|
||||||
if (visible) projectNameField.setFocus();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the useDefaults.
|
*
|
||||||
* @return boolean
|
* @param tree
|
||||||
|
* @param right
|
||||||
|
* @param show_sup
|
||||||
|
* @param ls
|
||||||
|
* @param wizard
|
||||||
|
* @return : selected Wizard Handler.
|
||||||
*/
|
*/
|
||||||
public boolean useDefaults() {
|
|
||||||
return locationArea.isDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static CWizardHandler updateData(Tree tree, Composite right, Button show_sup, IWizardItemsListListener ls, IWizard wizard) {
|
public static CWizardHandler updateData(Tree tree, Composite right, Button show_sup, IWizardItemsListListener ls, IWizard wizard) {
|
||||||
// remember selected item
|
// remember selected item
|
||||||
TreeItem[] sel = tree.getSelection();
|
TreeItem[] sel = tree.getSelection();
|
||||||
|
|
Loading…
Add table
Reference in a new issue