diff options
author | Pierre-Charles David | 2016-10-28 07:37:22 +0000 |
---|---|---|
committer | Melanie Bats | 2016-11-24 13:40:39 +0000 |
commit | 7e0a1e0fa3d33672dd50a596a988f194df80b00b (patch) | |
tree | 3a04e0cabd6c142228ef91db2e7dfee486c3d970 | |
parent | 0dcc9b430de1602d054611634947cd0b981fafc5 (diff) | |
download | org.eclipse.eef-7e0a1e0fa3d33672dd50a596a988f194df80b00b.tar.gz org.eclipse.eef-7e0a1e0fa3d33672dd50a596a988f194df80b00b.tar.xz org.eclipse.eef-7e0a1e0fa3d33672dd50a596a988f194df80b00b.zip |
[506621] Always synchronize widgets' UI state after callback execution
Bug: 506621
Change-Id: I4aaf82fff88fbf2e8f00d76557a9fba3ea8fa164
Signed-off-by: Pierre-Charles David <pierre-charles.david@obeo.fr>
Signed-off-by: Mélanie Bats <melanie.bats@obeo.fr>
17 files changed, 117 insertions, 39 deletions
diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFButtonController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFButtonController.java index 6241acad2..6b71c1c24 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFButtonController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFButtonController.java @@ -10,6 +10,8 @@ *******************************************************************************/ package org.eclipse.eef.core.api.controllers; +import org.eclipse.core.runtime.IStatus; + /** * The IEEFButtonController is responsible of supporting all the interactions with the widgets created for an * EEFButtonDescription. @@ -32,7 +34,9 @@ public interface IEEFButtonController extends IEEFWidgetController { /** * Invoked when the user pushes the button. + * + * @return the status of the pushed execution. */ - void pushed(); + IStatus pushed(); } diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFHyperlinkController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFHyperlinkController.java index 1c1954de6..13b55c8d8 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFHyperlinkController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFHyperlinkController.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.eef.core.api.controllers; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFWidgetAction; /** @@ -25,8 +26,9 @@ public interface IEEFHyperlinkController extends IEEFWidgetController { * * @param element * Semantic element + * @return the status of the onclick execution. */ - void onClick(Object element); + IStatus onClick(Object element); /** * Register a consumer which will be called with the new value of the hyperlink when it will change. @@ -46,8 +48,9 @@ public interface IEEFHyperlinkController extends IEEFWidgetController { * * @param action * Widget action + * @return the status of the action execution */ - void action(EEFWidgetAction action); + IStatus action(EEFWidgetAction action); /** * Compute the display value. diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFLabelController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFLabelController.java index 6eb917517..4b647f972 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFLabelController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFLabelController.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.eef.core.api.controllers; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFWidgetAction; /** @@ -37,6 +38,7 @@ public interface IEEFLabelController extends IEEFWidgetController { * * @param action * Widget action + * @return the status of the action execution */ - void action(EEFWidgetAction action); + IStatus action(EEFWidgetAction action); } diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFListController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFListController.java index a7a9725eb..34663ce98 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFListController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/api/controllers/IEEFListController.java @@ -12,6 +12,7 @@ package org.eclipse.eef.core.api.controllers; import java.util.List; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFWidgetAction; /** @@ -50,7 +51,8 @@ public interface IEEFListController extends IEEFWidgetController { * Widget action * @param selection * The selected elements + * @return the status of the action execution */ - void action(EEFWidgetAction action, List<Object> selection); + IStatus action(EEFWidgetAction action, List<Object> selection); } diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFButtonController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFButtonController.java index 8927c5768..12d65dd25 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFButtonController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFButtonController.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.eef.core.internal.controllers; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFButtonDescription; import org.eclipse.eef.EEFWidgetDescription; import org.eclipse.eef.EefPackage; @@ -85,8 +86,8 @@ public class EEFButtonController extends AbstractEEFWidgetController implements } @Override - public void pushed() { - contextAdapter.performModelChange(new Runnable() { + public IStatus pushed() { + return contextAdapter.performModelChange(new Runnable() { @Override public void run() { String pushExpression = EEFButtonController.this.description.getPushExpression(); diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java index 1677d1bdf..467e83587 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFHyperlinkController.java @@ -15,6 +15,7 @@ import com.google.common.base.Objects; import java.util.HashMap; import java.util.Map; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFHyperlinkDescription; import org.eclipse.eef.EEFWidgetAction; import org.eclipse.eef.EEFWidgetDescription; @@ -111,8 +112,8 @@ public class EEFHyperlinkController extends AbstractEEFWidgetController implemen * @see org.eclipse.eef.core.api.controllers.IEEFHyperlinkController#onClick(java.lang.Object) */ @Override - public void onClick(final Object element) { - contextAdapter.performModelChange(new Runnable() { + public IStatus onClick(final Object element) { + return contextAdapter.performModelChange(new Runnable() { @Override public void run() { String expression = EEFHyperlinkController.this.description.getOnClickExpression(); @@ -159,12 +160,12 @@ public class EEFHyperlinkController extends AbstractEEFWidgetController implemen /** * {@inheritDoc} - * + * * @see org.eclipse.eef.core.api.controllers.IEEFHyperlinkController#action(EEFWidgetAction) */ @Override - public void action(final EEFWidgetAction action) { - this.contextAdapter.performModelChange(new Runnable() { + public IStatus action(final EEFWidgetAction action) { + return this.contextAdapter.performModelChange(new Runnable() { @Override public void run() { String expression = action.getActionExpression(); diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFLabelController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFLabelController.java index 5dd4cf8b3..080c48fd1 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFLabelController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFLabelController.java @@ -13,6 +13,7 @@ package org.eclipse.eef.core.internal.controllers; import java.util.HashMap; import java.util.Map; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFLabelDescription; import org.eclipse.eef.EEFWidgetAction; import org.eclipse.eef.EEFWidgetDescription; @@ -128,8 +129,8 @@ public class EEFLabelController extends AbstractEEFWidgetController implements I * @see org.eclipse.eef.core.api.controllers.IEEFLabelController#action(EEFWidgetAction) */ @Override - public void action(final EEFWidgetAction action) { - this.contextAdapter.performModelChange(new Runnable() { + public IStatus action(final EEFWidgetAction action) { + return this.contextAdapter.performModelChange(new Runnable() { @Override public void run() { String expression = action.getActionExpression(); diff --git a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFListController.java b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFListController.java index 0e7c3e818..69f5ce5c0 100644 --- a/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFListController.java +++ b/plugins/org.eclipse.eef.core/src/org/eclipse/eef/core/internal/controllers/EEFListController.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFListDescription; import org.eclipse.eef.EEFWidgetAction; import org.eclipse.eef.EEFWidgetDescription; @@ -140,8 +141,8 @@ public class EEFListController extends AbstractEEFWidgetController implements IE * java.util.List) */ @Override - public void action(final EEFWidgetAction action, final List<Object> elements) { - contextAdapter.performModelChange(new Runnable() { + public IStatus action(final EEFWidgetAction action, final List<Object> elements) { + return contextAdapter.performModelChange(new Runnable() { @Override public void run() { String expression = action.getActionExpression(); diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java index 9a8c76931..993406530 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFButtonLifecycleManager.java @@ -12,6 +12,7 @@ package org.eclipse.eef.ide.ui.internal.widgets; import com.google.common.base.Objects; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFButtonDescription; import org.eclipse.eef.EEFWidgetDescription; import org.eclipse.eef.common.ui.api.EEFWidgetFactory; @@ -22,6 +23,7 @@ import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFButtonController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; @@ -143,7 +145,14 @@ public class EEFButtonLifecycleManager extends AbstractEEFWidgetLifecycleManager this.selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - controller.pushed(); + if (!EEFButtonLifecycleManager.this.container.isRenderingInProgress()) { + IStatus result = controller.pushed(); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + refresh(); + } + } } }; this.button.addSelectionListener(this.selectionListener); diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java index 2cafa6583..1ab1959df 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFCheckboxLifecycleManager.java @@ -24,10 +24,10 @@ import org.eclipse.eef.core.api.controllers.EEFControllersFactory; import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFCheckboxController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; -import org.eclipse.eef.ide.internal.EEFIdePlugin; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper.IEEFTextStyleCallback; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; @@ -65,6 +65,11 @@ public class EEFCheckboxLifecycleManager extends AbstractEEFWidgetLifecycleManag private SelectionListener selectionListener; /** + * The reference value of the checkbox, as last rendered from the state of the actual model. + */ + private boolean referenceValue; + + /** * The constructor. * * @param description @@ -163,11 +168,10 @@ public class EEFCheckboxLifecycleManager extends AbstractEEFWidgetLifecycleManag public void widgetSelected(SelectionEvent event) { IStatus result = controller.updateValue(checkbox.getSelection()); if (result != null && result.getSeverity() == IStatus.ERROR) { - EEFIdePlugin.INSTANCE.log(result); - // The checkbox widget is a special case with only two possible states, so we can deduce the - // reference state to revert to without storing anything. - boolean referenceValue = !checkbox.getSelection(); + EEFIdeUiPlugin.INSTANCE.log(result); checkbox.setSelection(referenceValue); + } else { + refresh(); } } @@ -185,6 +189,7 @@ public class EEFCheckboxLifecycleManager extends AbstractEEFWidgetLifecycleManag if (!checkbox.isDisposed()) { if (value != null && checkbox.getSelection() != value.booleanValue()) { checkbox.setSelection(value.booleanValue()); + referenceValue = value.booleanValue(); } } } diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkLifecycleManager.java index be91d8269..f4f682701 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkLifecycleManager.java @@ -13,6 +13,7 @@ package org.eclipse.eef.ide.ui.internal.widgets; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFHyperlinkDescription; import org.eclipse.eef.EEFHyperlinkStyle; import org.eclipse.eef.EEFWidgetAction; @@ -28,6 +29,7 @@ import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper.IEEFTextStyleCallback; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; @@ -199,7 +201,7 @@ public class EEFHyperlinkLifecycleManager extends AbstractEEFWidgetLifecycleMana public void aboutToBeShown() { super.aboutToBeShown(); - this.hyperlinkListener = new EEFHyperlinkListener(this.hyperlink, this.container, this.controller); + this.hyperlinkListener = new EEFHyperlinkListener(this, this.hyperlink, this.container, this.controller); hyperlink.addMouseListener(hyperlinkListener); this.controller.onNewValue(new IConsumer<Object>() { @@ -223,7 +225,14 @@ public class EEFHyperlinkLifecycleManager extends AbstractEEFWidgetLifecycleMana SelectionAdapter selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - controller.action(actionButton.getAction()); + if (!EEFHyperlinkLifecycleManager.this.container.isRenderingInProgress()) { + IStatus result = controller.action(actionButton.getAction()); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + refresh(); + } + } } }; diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkListener.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkListener.java index 5552206db..eeb28150a 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkListener.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFHyperlinkListener.java @@ -10,8 +10,10 @@ *******************************************************************************/ package org.eclipse.eef.ide.ui.internal.widgets; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.common.ui.api.IEEFFormContainer; import org.eclipse.eef.core.api.controllers.IEEFHyperlinkController; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.MouseEvent; @@ -24,6 +26,12 @@ import org.eclipse.swt.graphics.Point; * @author sbegaudeau */ public class EEFHyperlinkListener implements MouseListener { + + /** + * The life cycle manager. + */ + private EEFHyperlinkLifecycleManager lifecycleManager; + /** * The hyperlink. */ @@ -41,7 +49,9 @@ public class EEFHyperlinkListener implements MouseListener { /** * The constructor. - * + * + * @param lifecycleManager + * The life cycle manager * @param hyperlink * The hyperlink * @param container @@ -49,7 +59,9 @@ public class EEFHyperlinkListener implements MouseListener { * @param controller * The controller */ - public EEFHyperlinkListener(StyledText hyperlink, IEEFFormContainer container, IEEFHyperlinkController controller) { + public EEFHyperlinkListener(EEFHyperlinkLifecycleManager lifecycleManager, StyledText hyperlink, IEEFFormContainer container, + IEEFHyperlinkController controller) { + this.lifecycleManager = lifecycleManager; this.hyperlink = hyperlink; this.container = container; this.controller = controller; @@ -77,7 +89,12 @@ public class EEFHyperlinkListener implements MouseListener { StyleRange stylerange = hyperlink.getStyleRangeAtOffset(offset); if (stylerange != null) { if (!container.isRenderingInProgress()) { - controller.onClick(hyperlink.getData()); + IStatus result = controller.onClick(hyperlink.getData()); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + lifecycleManager.refresh(); + } } } } catch (IllegalArgumentException exception) { diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java index 6671abce5..8ff889f2b 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFLabelLifecycleManager.java @@ -15,6 +15,7 @@ import com.google.common.base.Objects; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFLabelDescription; import org.eclipse.eef.EEFLabelStyle; import org.eclipse.eef.EEFWidgetAction; @@ -30,6 +31,7 @@ import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper.IEEFTextStyleCallback; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; import org.eclipse.swt.SWT; @@ -201,7 +203,14 @@ public class EEFLabelLifecycleManager extends AbstractEEFWidgetLifecycleManager SelectionAdapter selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - controller.action(actionButton.getAction()); + if (!EEFLabelLifecycleManager.this.container.isRenderingInProgress()) { + IStatus result = controller.action(actionButton.getAction()); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + refresh(); + } + } } }; diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFListLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFListLifecycleManager.java index 2dea0fdbb..99b16f94c 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFListLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFListLifecycleManager.java @@ -13,6 +13,7 @@ package org.eclipse.eef.ide.ui.internal.widgets; import java.util.ArrayList; import java.util.List; +import org.eclipse.core.runtime.IStatus; import org.eclipse.eef.EEFListDescription; import org.eclipse.eef.EEFWidgetAction; import org.eclipse.eef.EEFWidgetDescription; @@ -24,6 +25,7 @@ import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFListController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; @@ -227,12 +229,19 @@ public class EEFListLifecycleManager extends AbstractEEFWidgetLifecycleManager { SelectionAdapter selectionListener = new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { - List<Object> selections = new ArrayList<Object>(); - IStructuredSelection structuredSelection = (IStructuredSelection) tableViewer.getSelection(); - for (Object selection : structuredSelection.toList()) { - selections.add(selection); + if (!EEFListLifecycleManager.this.container.isRenderingInProgress()) { + List<Object> selections = new ArrayList<Object>(); + IStructuredSelection structuredSelection = (IStructuredSelection) tableViewer.getSelection(); + for (Object selection : structuredSelection.toList()) { + selections.add(selection); + } + IStatus result = controller.action(actionButton.getAction(), selections); + if (result != null && result.getSeverity() == IStatus.ERROR) { + EEFIdeUiPlugin.INSTANCE.log(result); + } else { + refresh(); + } } - controller.action(actionButton.getAction(), selections); } }; diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFRadioLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFRadioLifecycleManager.java index d64cbd42a..6f9d657f4 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFRadioLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFRadioLifecycleManager.java @@ -29,8 +29,8 @@ import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFRadioController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.core.api.utils.EvalFactory; -import org.eclipse.eef.ide.internal.EEFIdePlugin; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ISelection; @@ -181,8 +181,10 @@ public class EEFRadioLifecycleManager extends AbstractEEFWidgetLifecycleManager Object newValue = selection.getFirstElement(); IStatus result = controller.updateValue(newValue); if (result != null && result.getSeverity() == IStatus.ERROR && referenceSelection != null) { - EEFIdePlugin.INSTANCE.log(result); + EEFIdeUiPlugin.INSTANCE.log(result); radioGroupViewer.setSelection(referenceSelection); + } else { + refresh(); } } finally { updateInProgress.set(false); diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFSelectLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFSelectLifecycleManager.java index b23f1cdb0..cfdf2363d 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFSelectLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFSelectLifecycleManager.java @@ -28,8 +28,8 @@ import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFSelectController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; import org.eclipse.eef.core.api.utils.EvalFactory; -import org.eclipse.eef.ide.internal.EEFIdePlugin; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; @@ -188,8 +188,10 @@ public class EEFSelectLifecycleManager extends AbstractEEFWidgetLifecycleManager } IStatus result = controller.updateValue(newValue); if (result != null && result.getSeverity() == IStatus.ERROR) { - EEFIdePlugin.INSTANCE.log(result); + EEFIdeUiPlugin.INSTANCE.log(result); comboViewer.setSelection(referenceValue); + } else { + refresh(); } } } diff --git a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java index 0d6e01491..4eac0d0c1 100644 --- a/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java +++ b/plugins/org.eclipse.eef.ide.ui/src/org/eclipse/eef/ide/ui/internal/widgets/EEFTextLifecycleManager.java @@ -25,10 +25,10 @@ import org.eclipse.eef.core.api.controllers.EEFControllersFactory; import org.eclipse.eef.core.api.controllers.IConsumer; import org.eclipse.eef.core.api.controllers.IEEFTextController; import org.eclipse.eef.core.api.controllers.IEEFWidgetController; -import org.eclipse.eef.ide.internal.EEFIdePlugin; import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper; import org.eclipse.eef.ide.ui.api.widgets.EEFStyleHelper.IEEFTextStyleCallback; +import org.eclipse.eef.ide.ui.internal.EEFIdeUiPlugin; import org.eclipse.eef.ide.ui.internal.widgets.styles.EEFColor; import org.eclipse.sirius.common.interpreter.api.IInterpreter; import org.eclipse.sirius.common.interpreter.api.IVariableManager; @@ -280,10 +280,11 @@ public class EEFTextLifecycleManager extends AbstractEEFWidgetLifecycleManager { try { IStatus result = controller.updateValue(text.getText()); if (result != null && result.getSeverity() == IStatus.ERROR) { - EEFIdePlugin.INSTANCE.log(result); + EEFIdeUiPlugin.INSTANCE.log(result); text.setText(referenceValue); } else { referenceValue = text.getText(); + refresh(); } this.isDirty = false; this.setStyle(); |