This patch validates the "link to file" fields on the class wizard page
and disables the finish button if they are empty.
-Chris
------------------------------------------------------------------------
Index: src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties,v
retrieving revision 1.9
diff -u -r1.9 NewWizardMessages.properties
--- src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties 18 Jun 2004 13:58:45 -0000 1.9
+++ src/org/eclipse/cdt/internal/ui/wizards/NewWizardMessages.properties 23 Jun 2004 18:22:44 -0000
@@ -174,6 +174,9 @@
NewClassWizardPage.getProjectClasses.noclasses.title=Class Selection
NewClassWizardPage.getProjectClasses.noclasses.message=No classes available.
+NewClassWizardPage.error.EnterHeaderFile=Header file is empty.
+NewClassWizardPage.error.EnterBodyFile=Body file is empty.
+
# ------- BaseClassSelectionDialog -----
BaseClassSelectionDialog.title=Choose Base Class
Index: src/org/eclipse/cdt/internal/ui/wizards/dialogfields/LinkToFileGroup.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/wizards/dialogfields/LinkToFileGroup.java,v
retrieving revision 1.6
diff -u -r1.6 LinkToFileGroup.java
--- src/org/eclipse/cdt/internal/ui/wizards/dialogfields/LinkToFileGroup.java 8 Jun 2004 17:40:04 -0000 1.6
+++ src/org/eclipse/cdt/internal/ui/wizards/dialogfields/LinkToFileGroup.java 23 Jun 2004 18:22:44 -0000
@@ -121,8 +121,10 @@
browseButton.setEnabled(createLink);
variablesButton.setEnabled(createLink);
linkTargetField.setEnabled(createLink);
+ resolveVariable();
if (listener != null)
listener.handleEvent(new Event());
+ dialogFieldChanged();
}
};
linkButton.addSelectionListener(selectionListener);
@@ -138,9 +140,8 @@
fText= text;
if (isOkToUse(linkTargetField)) {
linkTargetField.setText(text);
- } else {
- dialogFieldChanged();
- }
+ }
+ dialogFieldChanged();
}
public Text getTextControl(Composite parent){
@@ -154,6 +155,7 @@
resolveVariable();
if (listener != null)
listener.handleEvent(new Event());
+ dialogFieldChanged();
}
});
if (initialLinkTarget != null)
@@ -273,8 +275,10 @@
dialog.setMessage(WorkbenchMessages.getString("CreateLinkedResourceGroup.targetSelectionLabel")); //$NON-NLS-1$
selection = dialog.open();
}
- if (selection != null)
+ if (selection != null) {
linkTargetField.setText(selection);
+ dialogFieldChanged();
+ }
}
/**
* Opens a path variable selection dialog
@@ -292,7 +296,10 @@
if (dialog.open() == IDialogConstants.OK_ID) {
String[] variableNames = (String[]) dialog.getResult();
if (variableNames != null && variableNames.length == 1)
+ {
linkTargetField.setText(variableNames[0]);
+ dialogFieldChanged();
+ }
}
}
/**
@@ -301,8 +308,10 @@
* Displays the resolved value if the entered value is a variable.
*/
protected void resolveVariable() {
- if(!linkTargetField.isEnabled())
+ if(!linkTargetField.isEnabled()) {
+ resolvedPathLabelData.setText("");
return;
+ }
IPathVariableManager pathVariableManager = ResourcesPlugin.getWorkspace().getPathVariableManager();
IPath path = new Path(linkTargetField.getText());
@@ -325,8 +334,10 @@
*/
public void setLinkTarget(String target) {
initialLinkTarget = target;
- if (linkTargetField != null && linkTargetField.isDisposed() == false)
+ if (linkTargetField != null && linkTargetField.isDisposed() == false) {
linkTargetField.setText(target);
+ dialogFieldChanged();
+ }
}
/**
* Validates the type of the given file against the link type specified
Index: src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java,v
retrieving revision 1.21
diff -u -r1.21 NewClassWizardPage.java
--- src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java 4 Jun 2004 21:57:38 -0000 1.21
+++ src/org/eclipse/cdt/ui/wizards/NewClassWizardPage.java 23 Jun 2004 18:22:44 -0000
@@ -132,6 +132,8 @@
private IStatus fCurrStatus;
protected IStatus fClassNameStatus;
protected IStatus fBaseClassStatus;
+ protected IStatus fLinkedResourceGroupForHeaderStatus;
+ protected IStatus fLinkedResourceGroupForBodyStatus;
private boolean hasCppNature = false;
@@ -179,12 +181,16 @@
fConstDestButtons.setDialogFieldListener(adapter);
linkedResourceGroupForHeader = new LinkToFileGroup(adapter, this);
+ linkedResourceGroupForHeader.setDialogFieldListener(adapter);
linkedResourceGroupForHeader.setLabelText(NewWizardMessages.getString("NewClassWizardPage.files.header")); //$NON-NLS-1$
linkedResourceGroupForBody = new LinkToFileGroup(adapter, this);
+ linkedResourceGroupForBody.setDialogFieldListener(adapter);
linkedResourceGroupForBody.setLabelText(NewWizardMessages.getString("NewClassWizardPage.files.body")); //$NON-NLS-1$
fClassNameStatus= new StatusInfo();
fBaseClassStatus= new StatusInfo();
+ fLinkedResourceGroupForHeaderStatus= new StatusInfo();
+ fLinkedResourceGroupForBodyStatus= new StatusInfo();
}
public void init() {
@@ -384,7 +390,27 @@
else{
fAccessButtons.setEnabled(false);
}
- }
+ }
+
+ if (field == linkedResourceGroupForHeader) {
+ StatusInfo status = new StatusInfo();
+ String text = linkedResourceGroupForHeader.getText();
+ // must not be empty
+ if (linkedResourceGroupForHeader.linkCreated() && (text == null || text.length() == 0)) {
+ status.setError(NewWizardMessages.getString("NewClassWizardPage.error.EnterHeaderFile")); //$NON-NLS-1$
+ }
+ fLinkedResourceGroupForHeaderStatus = status;
+ }
+ if (field == linkedResourceGroupForBody) {
+ StatusInfo status = new StatusInfo();
+ String text = linkedResourceGroupForBody.getText();
+ // must not be empty
+ if (linkedResourceGroupForBody.linkCreated() && (text == null || text.length() == 0)) {
+ status.setError(NewWizardMessages.getString("NewClassWizardPage.error.EnterBodyFile")); //$NON-NLS-1$
+ }
+ fLinkedResourceGroupForBodyStatus = status;
+ }
+
doStatusUpdate();
}
@@ -986,7 +1012,9 @@
IStatus[] status= new IStatus[] {
fClassNameStatus,
fBaseClassStatus,
- };
+ fLinkedResourceGroupForHeaderStatus,
+ fLinkedResourceGroupForBodyStatus
+ };
// the mode severe status will be displayed and the ok button enabled/disabled.
updateStatus(status);