diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java index 33c54a67b97..7fb7ed6438b 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/expression/ExpressionVMProvider.java @@ -24,8 +24,8 @@ import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode; import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode; import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode; import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IExpressionsListener; import org.eclipse.debug.core.model.IExpression; +import org.eclipse.debug.internal.core.IExpressionsListener2; import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; @@ -33,10 +33,10 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont * */ @SuppressWarnings("restriction") -public class ExpressionVMProvider extends AbstractDebugDMVMProviderWithCache implements IExpressionsListener +public class ExpressionVMProvider extends AbstractDebugDMVMProviderWithCache implements IExpressionsListener2 { public static class ExpressionsChangedEvent { - enum Type {ADDED, CHANGED, REMOVED} + enum Type {ADDED, CHANGED, REMOVED, MOVED, INSERTED} public final Type fType; public final IExpression[] fExpressions; public ExpressionsChangedEvent(Type type, IExpression[] expressions) { @@ -162,4 +162,12 @@ public class ExpressionVMProvider extends AbstractDebugDMVMProviderWithCache imp public void expressionsRemoved(IExpression[] expressions) { handleEvent(new ExpressionsChangedEvent(ExpressionsChangedEvent.Type.REMOVED, expressions)); } + + public void expressionsInserted(IExpression[] expressions, int index) { + handleEvent(new ExpressionsChangedEvent(ExpressionsChangedEvent.Type.INSERTED, expressions)); + } + + public void expressionsMoved(IExpression[] expressions, int index) { + handleEvent(new ExpressionsChangedEvent(ExpressionsChangedEvent.Type.MOVED, expressions)); + } } diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java index d74c297c78f..12fd985be2e 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMAdapter.java @@ -29,6 +29,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentati import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; /** @@ -110,7 +111,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter public void update(final IChildrenUpdate[] updates) { handleUpdates(updates); } - + private void handleUpdates(final IViewerUpdate[] updates) { try { getExecutor().execute(new DsfRunnable() { @@ -131,6 +132,10 @@ abstract public class AbstractVMAdapter implements IVMAdapter } }); } catch(RejectedExecutionException e) { + for (IViewerUpdate update : updates) { + update.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, "VM adapter executor not available", e)); //$NON-NLS-1$ + update.done(); + } } } @@ -190,7 +195,15 @@ abstract public class AbstractVMAdapter implements IVMAdapter } return null; } - + + + public void update(IViewerInputUpdate update) { + final IVMProvider provider = getVMProvider(update.getPresentationContext()); + if (provider != null) { + provider.update(update); + } + } + /** * Creates a new View Model Provider for given presentation context. Returns null * if the presentation context is not supported. diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java index 8bdec75ce00..2ba86fa5b25 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMProvider.java @@ -38,6 +38,8 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdat import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputProvider; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy; import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousContentAdapter; @@ -486,7 +488,21 @@ abstract public class AbstractVMProvider implements IVMProvider return null; } - + /** + * Calculates the proxy input object to be used for the given input in the given + * viewer. By default no proxy object is used an the given element is used + * as the input into the view. + *
+ * Sub classes can override this method for view-specific behavior. + * + * @see IViewerInputProvider + */ + public void update(IViewerInputUpdate update) { + update.setViewerInput(update.getElement()); + update.done(); + } + + /** * Convenience method that finds the VMC corresponding to given parent * argument given to isContainer() or retrieveChildren(). diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java index 6c82f654f10..648981f77fe 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMAdapter.java @@ -5,6 +5,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentati import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputProvider; /** * The View Model adapter handles the layout of a given data model within a @@ -15,7 +16,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont @ThreadSafe @SuppressWarnings("restriction") public interface IVMAdapter - extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory + extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory, IViewerInputProvider { /** * Returns the View Model Provider that is registered for the given presentation diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java index 66fcaa216a0..60960351190 100644 --- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java +++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/IVMProvider.java @@ -5,6 +5,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentati import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider; import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory; import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext; +import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerInputProvider; /** * The View Model Provider handles the layout of a given model within a @@ -14,7 +15,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationCont @ThreadSafe @SuppressWarnings("restriction") public interface IVMProvider - extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory + extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory, IViewerInputProvider { /** * Returns the VM Adapter associated with the provider.