diff options
author | Stéphane Bégaudeau | 2016-05-03 12:18:34 +0000 |
---|---|---|
committer | Stéphane Bégaudeau | 2016-05-04 12:13:30 +0000 |
commit | db04ece493b95f8eee8c8c548a602e4d2f2c638e (patch) | |
tree | 6626a05ee9829aacec8794670df13d7e8b3dc75a | |
parent | b9d3994e3c5a0489e85f2abe28d4e7561abd6e25 (diff) | |
download | org.eclipse.eef-db04ece493b95f8eee8c8c548a602e4d2f2c638e.tar.gz org.eclipse.eef-db04ece493b95f8eee8c8c548a602e4d2f2c638e.tar.xz org.eclipse.eef-db04ece493b95f8eee8c8c548a602e4d2f2c638e.zip |
Fix an issue with quick fixes
Change-Id: I08851406cb8b1debf356682ba695d6a02e8542d0
Signed-off-by: Stéphane Bégaudeau <stephane.begaudeau@obeo.fr>
5 files changed, 71 insertions, 11 deletions
diff --git a/plugins/org.eclipse.eef.ide.ui/plugin.properties b/plugins/org.eclipse.eef.ide.ui/plugin.properties index 3a30e7c27..76faae4a9 100644 --- a/plugins/org.eclipse.eef.ide.ui/plugin.properties +++ b/plugins/org.eclipse.eef.ide.ui/plugin.properties @@ -26,6 +26,9 @@ EEFQuickFixWizard_applyQuickFix=Applying quick fix... EEFQuickFixPage_title=Quick Fix EEFQuickFixPage_description=Select a quick fix for ''{0}'' EEFQuickFixPage_label=Select a fix: + +EEFQuickFixWizard_noQuickFixAvailable=No quick fix available for your validation issue + EEFValidationRulesPage_title=Messages EEFValidationRulesPage_description=Select the message to fix EEFValidationRulesPage_label=Select a message: diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/Messages.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/Messages.java index 816637b3b..f43f174a2 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/Messages.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/Messages.java @@ -67,6 +67,9 @@ public final class Messages { @TranslatableMessage public static String EEFValidationRulesPage_label; + @TranslatableMessage + public static String EEFQuickFixWizard_noQuickFixAvailable; + // CHECKSTYLE:ON /** diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixPage.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixPage.java index 7cc12a96f..ca9397ba9 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixPage.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixPage.java @@ -23,6 +23,7 @@ import org.eclipse.eef.ide.ui.internal.Messages; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; @@ -141,7 +142,22 @@ public class EEFQuickFixPage extends WizardPage { Dialog.applyDialogFont(control); // Select the first quick fix available - this.quickFixesList.setSelection(new StructuredSelection(this.quickFixesList.getElementAt(0))); + Object firstElement = this.quickFixesList.getElementAt(0); + if (firstElement != null) { + this.quickFixesList.setSelection(new StructuredSelection(firstElement)); + } else { + this.setMessage(Messages.EEFQuickFixWizard_noQuickFixAvailable, IMessageProvider.ERROR); + } + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.jface.wizard.WizardPage#isPageComplete() + */ + @Override + public boolean isPageComplete() { + return this.quickFixesList != null && this.validationRule.getFixes().size() > 0 && !this.quickFixesList.getSelection().isEmpty(); } /** diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixWizard.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixWizard.java index 20211e6fb..a2d3a60f6 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixWizard.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFQuickFixWizard.java @@ -105,10 +105,13 @@ public class EEFQuickFixWizard extends Wizard { // The second page will show the quick fixes of the message of the first page if (message.getKey() instanceof EEFValidationRuleDescription && message.getData() instanceof Eval) { EEFValidationRuleDescription validationRule = (EEFValidationRuleDescription) message.getKey(); - Eval<?> eval = (Eval<?>) message.getData(); - this.quickFixPage = new EEFQuickFixPage(message, validationRule, eval); - this.quickFixPage.setWizard(this); - return this.quickFixPage; + + if (validationRule.getFixes().size() > 0) { + Eval<?> eval = (Eval<?>) message.getData(); + this.quickFixPage = new EEFQuickFixPage(message, validationRule, eval); + this.quickFixPage.setWizard(this); + return this.quickFixPage; + } } } return super.getNextPage(page); @@ -129,6 +132,7 @@ public class EEFQuickFixWizard extends Wizard { this.quickFixPage = null; return this.validationMessagesPage; } + return super.getPreviousPage(page); } @@ -139,10 +143,22 @@ public class EEFQuickFixWizard extends Wizard { */ @Override public boolean needsPreviousAndNextButtons() { - if (this.messages.length != 1) { - return true; - } - return super.needsPreviousAndNextButtons(); + return this.messages.length > 1; + } + + /** + * {@inheritDoc} + * + * @see org.eclipse.jface.wizard.Wizard#canFinish() + */ + @Override + public boolean canFinish() { + boolean canFinish = this.getContainer().getCurrentPage() == this.quickFixPage; + + canFinish = canFinish && (this.validationMessagesPage == null || this.validationMessagesPage.isPageComplete()); + canFinish = canFinish && (this.quickFixPage != null && this.quickFixPage.isPageComplete()); + + return canFinish; } /** diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFValidationMessagesPage.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFValidationMessagesPage.java index 582d0dac4..cf7ea5cd6 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFValidationMessagesPage.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/quickfix/EEFValidationMessagesPage.java @@ -10,9 +10,11 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets.quickfix; +import org.eclipse.eef.EEFValidationRuleDescription; import org.eclipse.eef.ide.ui.internal.Messages; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.IMessageProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; @@ -108,8 +110,6 @@ public class EEFValidationMessagesPage extends WizardPage { this.validationMessagesList.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { - EEFValidationMessagesPage.this.setPageComplete(true); - // Sets the new selected message ISelection selection = event.getSelection(); if (selection instanceof IStructuredSelection) { @@ -119,6 +119,17 @@ public class EEFValidationMessagesPage extends WizardPage { EEFValidationMessagesPage.this.selectedMessage = (IMessage) element; } } + + if (EEFValidationMessagesPage.this.selectedMessage.getKey() instanceof EEFValidationRuleDescription) { + EEFValidationRuleDescription validationRuleDescription = (EEFValidationRuleDescription) EEFValidationMessagesPage.this.selectedMessage + .getKey(); + if (validationRuleDescription.getFixes().size() == 0) { + EEFValidationMessagesPage.this.setMessage(Messages.EEFQuickFixWizard_noQuickFixAvailable, IMessageProvider.ERROR); + } else { + EEFValidationMessagesPage.this.setMessage(null); + } + } + EEFValidationMessagesPage.this.setPageComplete(true); } }); @@ -138,6 +149,17 @@ public class EEFValidationMessagesPage extends WizardPage { } /** + * {@inheritDoc} + * + * @see org.eclipse.jface.wizard.WizardPage#isPageComplete() + */ + @Override + public boolean isPageComplete() { + // There is always a next page + return true; + } + + /** * Returns the selected {@link IMessage}. * * @return The selected message |