mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Replaced IRootVMLayoutNode.getRootObject() with IVMProvider.getRootElement() (bug 195182).
This commit is contained in:
parent
68cf334f92
commit
6a33c3118c
14 changed files with 96 additions and 94 deletions
|
@ -11,7 +11,6 @@
|
||||||
package org.eclipse.dd.dsf.debug.ui.viewmodel.expression;
|
package org.eclipse.dd.dsf.debug.ui.viewmodel.expression;
|
||||||
|
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
|
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterGroupLayoutNode;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterGroupLayoutNode;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterLayoutNode;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.register.RegisterLayoutNode;
|
||||||
|
@ -25,6 +24,7 @@ import org.eclipse.dd.dsf.ui.viewmodel.IVMContext;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
||||||
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
import org.eclipse.debug.core.IExpressionsListener;
|
import org.eclipse.debug.core.IExpressionsListener;
|
||||||
import org.eclipse.debug.core.model.IExpression;
|
import org.eclipse.debug.core.model.IExpression;
|
||||||
|
@ -71,7 +71,7 @@ public class ExpressionVMProvider extends AbstractDMVMProviderWithCache
|
||||||
/*
|
/*
|
||||||
* Create the top level node which provides the anchor starting point.
|
* Create the top level node which provides the anchor starting point.
|
||||||
*/
|
*/
|
||||||
IVMRootLayoutNode debugViewSelectionNode = new DebugViewSelectionRootLayoutNode(this);
|
IVMRootLayoutNode debugViewSelectionNode = new DMVMRootLayoutNode(this);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now the Overarching management node.
|
* Now the Overarching management node.
|
||||||
|
@ -145,7 +145,7 @@ public class ExpressionVMProvider extends AbstractDMVMProviderWithCache
|
||||||
if (rootLayoutNode == null) {
|
if (rootLayoutNode == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
else if (element.equals(rootLayoutNode.getRootObject())) {
|
else if (element.equals(getRootElement())) {
|
||||||
return rootLayoutNode;
|
return rootLayoutNode;
|
||||||
}
|
}
|
||||||
else if (element instanceof IVMContext){
|
else if (element instanceof IVMContext){
|
||||||
|
|
|
@ -17,7 +17,7 @@ import java.util.Map;
|
||||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
|
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.VMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
|
import org.eclipse.dd.dsf.ui.viewmodel.VMDelta;
|
||||||
|
@ -35,7 +35,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
||||||
* functionality, so the default adapters should be used to retrieve the label.
|
* functionality, so the default adapters should be used to retrieve the label.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
public class StandardLaunchRootLayoutNode extends AbstractVMRootLayoutNode
|
public class StandardLaunchRootLayoutNode extends VMRootLayoutNode
|
||||||
implements IVMRootLayoutNode
|
implements IVMRootLayoutNode
|
||||||
{
|
{
|
||||||
public static class LaunchesEvent {
|
public static class LaunchesEvent {
|
||||||
|
|
|
@ -11,13 +11,13 @@
|
||||||
package org.eclipse.dd.dsf.debug.ui.viewmodel.register;
|
package org.eclipse.dd.dsf.debug.ui.viewmodel.register;
|
||||||
|
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
|
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
||||||
import org.eclipse.dd.dsf.service.DsfSession;
|
import org.eclipse.dd.dsf.service.DsfSession;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
||||||
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ public class RegisterVMProvider extends AbstractDMVMProviderWithCache implements
|
||||||
/*
|
/*
|
||||||
* Create the top level node to deal with the root selection.
|
* Create the top level node to deal with the root selection.
|
||||||
*/
|
*/
|
||||||
IVMRootLayoutNode debugViewSelection = new DebugViewSelectionRootLayoutNode(this);
|
IVMRootLayoutNode debugViewSelection = new DMVMRootLayoutNode(this);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the Group nodes next. They represent the first level shown in the view.
|
* Create the Group nodes next. They represent the first level shown in the view.
|
||||||
|
|
|
@ -9,13 +9,13 @@
|
||||||
package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
|
package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
|
||||||
|
|
||||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
|
|
||||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
import org.eclipse.dd.dsf.debug.ui.viewmodel.formatsupport.IFormattedValuePreferenceStore;
|
||||||
import org.eclipse.dd.dsf.service.DsfSession;
|
import org.eclipse.dd.dsf.service.DsfSession;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProviderWithCache;
|
||||||
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.DMVMRootLayoutNode;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||||
|
@ -37,7 +37,7 @@ public class VariableVMProvider extends AbstractDMVMProviderWithCache implements
|
||||||
/*
|
/*
|
||||||
* Create the top level node to deal with the root selection.
|
* Create the top level node to deal with the root selection.
|
||||||
*/
|
*/
|
||||||
IVMRootLayoutNode debugViewSelection = new DebugViewSelectionRootLayoutNode(this);
|
IVMRootLayoutNode debugViewSelection = new DMVMRootLayoutNode(this);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the local variables nodes next. They represent the first level shown in the view.
|
* Create the local variables nodes next. They represent the first level shown in the view.
|
||||||
|
|
|
@ -67,15 +67,8 @@ abstract public class AbstractVMAdapter implements IVMAdapter
|
||||||
return fExecutor;
|
return fExecutor;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Creates a new View Model Provider for given presentation context. Returns null
|
|
||||||
* if the presentation context is not supported.
|
|
||||||
*/
|
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
abstract protected IVMProvider createViewModelProvider(IPresentationContext context);
|
public IVMProvider getVMProvider(IPresentationContext context) {
|
||||||
|
|
||||||
@ThreadSafe
|
|
||||||
private IVMProvider getViewModelProvider(IPresentationContext context) {
|
|
||||||
synchronized(fViewModelProviders) {
|
synchronized(fViewModelProviders) {
|
||||||
if (fDisposed) return null;
|
if (fDisposed) return null;
|
||||||
|
|
||||||
|
@ -142,7 +135,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
private void callProviderWithUpdate(IViewerUpdate[] updates, int startIdx, int endIdx) {
|
private void callProviderWithUpdate(IViewerUpdate[] updates, int startIdx, int endIdx) {
|
||||||
final IVMProvider provider = getViewModelProvider(updates[0].getPresentationContext());
|
final IVMProvider provider = getVMProvider(updates[0].getPresentationContext());
|
||||||
if (provider == null) {
|
if (provider == null) {
|
||||||
for (IViewerUpdate update : updates) {
|
for (IViewerUpdate update : updates) {
|
||||||
update.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfService.INTERNAL_ERROR,
|
update.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfService.INTERNAL_ERROR,
|
||||||
|
@ -175,7 +168,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
public IModelProxy createModelProxy(Object element, IPresentationContext context) {
|
public IModelProxy createModelProxy(Object element, IPresentationContext context) {
|
||||||
IVMProvider provider = getViewModelProvider(context);
|
IVMProvider provider = getVMProvider(context);
|
||||||
if (provider != null) {
|
if (provider != null) {
|
||||||
return provider.createModelProxy(element, context);
|
return provider.createModelProxy(element, context);
|
||||||
}
|
}
|
||||||
|
@ -183,7 +176,7 @@ abstract public class AbstractVMAdapter implements IVMAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) {
|
public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) {
|
||||||
final IVMProvider provider = getViewModelProvider(context);
|
final IVMProvider provider = getVMProvider(context);
|
||||||
if (provider != null) {
|
if (provider != null) {
|
||||||
return provider.createColumnPresentation(context, element);
|
return provider.createColumnPresentation(context, element);
|
||||||
}
|
}
|
||||||
|
@ -191,12 +184,17 @@ abstract public class AbstractVMAdapter implements IVMAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getColumnPresentationId(IPresentationContext context, Object element) {
|
public String getColumnPresentationId(IPresentationContext context, Object element) {
|
||||||
final IVMProvider provider = getViewModelProvider(context);
|
final IVMProvider provider = getVMProvider(context);
|
||||||
if (provider != null) {
|
if (provider != null) {
|
||||||
return provider.getColumnPresentationId(context, element);
|
return provider.getColumnPresentationId(context, element);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new View Model Provider for given presentation context. Returns null
|
||||||
|
* if the presentation context is not supported.
|
||||||
|
*/
|
||||||
|
@ThreadSafe
|
||||||
|
abstract protected IVMProvider createViewModelProvider(IPresentationContext context);
|
||||||
}
|
}
|
||||||
|
|
|
@ -447,7 +447,7 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode {
|
||||||
return path.getLastSegment();
|
return path.getLastSegment();
|
||||||
}
|
}
|
||||||
// Calculate the root of the viewer.
|
// Calculate the root of the viewer.
|
||||||
return getVMProvider().getRootLayoutNode().getRootObject();
|
return getVMProvider().getRootElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object getElement() {
|
public Object getElement() {
|
||||||
|
|
|
@ -62,8 +62,21 @@ import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousLabelAdapt
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
abstract public class AbstractVMProvider implements IVMProvider
|
abstract public class AbstractVMProvider implements IVMProvider
|
||||||
{
|
{
|
||||||
|
/** Reference to the VM adapter that owns this provider */
|
||||||
private final AbstractVMAdapter fVMAdapter;
|
private final AbstractVMAdapter fVMAdapter;
|
||||||
|
|
||||||
|
/** The presentation context that this provider is associated with */
|
||||||
private final IPresentationContext fPresentationContext;
|
private final IPresentationContext fPresentationContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current root element of this view model. This element is obtained
|
||||||
|
* from the argument to {@link #createModelProxy(Object, IPresentationContext)}.
|
||||||
|
*/
|
||||||
|
private Object fRootElement;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
private ModelProxy fModelProxy = new ModelProxy();
|
private ModelProxy fModelProxy = new ModelProxy();
|
||||||
private boolean fDisposed = false;
|
private boolean fDisposed = false;
|
||||||
|
|
||||||
|
@ -104,10 +117,16 @@ abstract public class AbstractVMProvider implements IVMProvider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ThreadSafe
|
||||||
protected synchronized ModelProxy getModelProxy() {
|
protected synchronized ModelProxy getModelProxy() {
|
||||||
return fModelProxy;
|
return fModelProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ThreadSafe
|
||||||
|
public synchronized Object getRootElement() {
|
||||||
|
return fRootElement;
|
||||||
|
}
|
||||||
|
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
public IVMRootLayoutNode getRootLayoutNode() {
|
public IVMRootLayoutNode getRootLayoutNode() {
|
||||||
return fRootLayoutNodeRef.get();
|
return fRootLayoutNodeRef.get();
|
||||||
|
@ -385,19 +404,17 @@ abstract public class AbstractVMProvider implements IVMProvider
|
||||||
public ModelProxy createModelProxy(Object element, IPresentationContext context) {
|
public ModelProxy createModelProxy(Object element, IPresentationContext context) {
|
||||||
/*
|
/*
|
||||||
* Model proxy is the object that correlates events from the data model
|
* Model proxy is the object that correlates events from the data model
|
||||||
* into view model deltas that the view can process. We only need to
|
* into view model deltas that the view can process. This method is called
|
||||||
* create a proxy for the root element of the tree.
|
* by the viewer when a new input object is set to the view. We need to create
|
||||||
|
* a new instance of the ModelProxy object with every call, because the viewer
|
||||||
|
* disposes the old proxy before calling this method.
|
||||||
*/
|
*/
|
||||||
if (getRootLayoutNode() != null &&
|
|
||||||
element.equals(getRootLayoutNode().getRootObject()))
|
|
||||||
{
|
|
||||||
synchronized(this) {
|
synchronized(this) {
|
||||||
|
fRootElement = element;
|
||||||
fModelProxy = new ModelProxy();
|
fModelProxy = new ModelProxy();
|
||||||
}
|
}
|
||||||
return fModelProxy;
|
return fModelProxy;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the column presentation for the given object. This method is meant
|
* Creates the column presentation for the given object. This method is meant
|
||||||
|
@ -456,7 +473,7 @@ abstract public class AbstractVMProvider implements IVMProvider
|
||||||
if (rootLayoutNode == null) {
|
if (rootLayoutNode == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
else if (element.equals(rootLayoutNode.getRootObject())) {
|
else if (element.equals(getRootElement())) {
|
||||||
return rootLayoutNode;
|
return rootLayoutNode;
|
||||||
}
|
}
|
||||||
else if (element instanceof IVMContext){
|
else if (element instanceof IVMContext){
|
||||||
|
|
|
@ -4,6 +4,7 @@ import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentationFactory;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
|
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.IModelProxyFactory;
|
||||||
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The View Model adapter handles the layout of a given data model within a
|
* The View Model adapter handles the layout of a given data model within a
|
||||||
|
@ -16,4 +17,9 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactor
|
||||||
public interface IVMAdapter
|
public interface IVMAdapter
|
||||||
extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory
|
extends IElementContentProvider, IModelProxyFactory, IColumnPresentationFactory
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Returns the View Model Provider that is registered for the given presentation
|
||||||
|
* context. Returns <code>null</code> if there is none.
|
||||||
|
*/
|
||||||
|
public IVMProvider getVMProvider(IPresentationContext presentationContext);
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,15 @@ public interface IVMProvider
|
||||||
*/
|
*/
|
||||||
public IVMRootLayoutNode getRootLayoutNode();
|
public IVMRootLayoutNode getRootLayoutNode();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the root element of the view model. If the given view model is
|
||||||
|
* used to populate the entire contents of the view, then this is the input
|
||||||
|
* element for the viewer. If the view model is used to populate only a
|
||||||
|
* sub-tree section of the view, then this is the root element of that
|
||||||
|
* sub-tree.
|
||||||
|
*/
|
||||||
|
public Object getRootElement();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the presentation context of the viewer that this provider
|
* Returns the presentation context of the viewer that this provider
|
||||||
* is configured for.
|
* is configured for.
|
||||||
|
@ -32,4 +41,5 @@ public interface IVMProvider
|
||||||
* Cleans up the resources associated with this provider.
|
* Cleans up the resources associated with this provider.
|
||||||
*/
|
*/
|
||||||
public void dispose();
|
public void dispose();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,14 +21,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
public interface IVMRootLayoutNode extends IVMLayoutNode{
|
public interface IVMRootLayoutNode extends IVMLayoutNode{
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the single element of this node. Root layout node can only have
|
|
||||||
* one element, and this is a convenience method to access this element.
|
|
||||||
* Alternatively getElements() could be used.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Object getRootObject();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Version of the {@link IVMLayoutNode#buildDelta(Object, ViewModelDelta, org.eclipse.dd.dsf.concurrent.RequestMonitor)}
|
* Version of the {@link IVMLayoutNode#buildDelta(Object, ViewModelDelta, org.eclipse.dd.dsf.concurrent.RequestMonitor)}
|
||||||
* method, which creates and returns the root node of the delta. It does
|
* method, which creates and returns the root node of the delta. It does
|
||||||
|
|
|
@ -21,28 +21,29 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
* Default implementation of a root layout node. This class may be sub-classed
|
||||||
|
* to implement model-specific event handling.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode implements IVMRootLayoutNode {
|
public class VMRootLayoutNode extends AbstractVMLayoutNode implements IVMRootLayoutNode {
|
||||||
|
|
||||||
public AbstractVMRootLayoutNode(AbstractVMProvider provider) {
|
public VMRootLayoutNode(AbstractVMProvider provider) {
|
||||||
super(provider);
|
super(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This implementation only fulfils the requirements of the super-interface.
|
* This implementation only fulfills the requirements of the super-interface.
|
||||||
* There is no use case for a root node implementing this method, but its
|
* There is no use case for a root node implementing this method, but its
|
||||||
* easier to just impelemnt it for sake of uniformity of model.
|
* easier to just implement it for sake of uniformity of model.
|
||||||
*/
|
*/
|
||||||
public void updateElements(IChildrenUpdate update) {
|
public void updateElements(IChildrenUpdate update) {
|
||||||
// Ignore startIdx, endIdx, since there's only one element to be had.
|
// Ignore startIdx, endIdx, since there's only one element to be had.
|
||||||
update.setChild(getRootObject(), 0);
|
update.setChild(getVMProvider().getRootElement(), 0);
|
||||||
update.done();
|
update.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This implementation only fulfils the requirements of the super-interface.
|
* This implementation only fulfills the requirements of the super-interface.
|
||||||
* There is no use case for a root node implementing this method, but its
|
* There is no use case for a root node implementing this method, but its
|
||||||
* easier to just impelemnt it for sake of uniformity of model.
|
* easier to just impelemnt it for sake of uniformity of model.
|
||||||
*/
|
*/
|
||||||
|
@ -52,9 +53,9 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This implementation only fulfils the requirements of the super-interface.
|
* This implementation only fulfills the requirements of the super-interface.
|
||||||
* There is no use case for a root node implementing this method, but its
|
* There is no use case for a root node implementing this method, but its
|
||||||
* easier to just impelemnt it for sake of uniformity of model.
|
* easier to just implement it for sake of uniformity of model.
|
||||||
*/
|
*/
|
||||||
public void updateHasElements(IHasChildrenUpdate[] updates) {
|
public void updateHasElements(IHasChildrenUpdate[] updates) {
|
||||||
for (IHasChildrenUpdate update : updates) {
|
for (IHasChildrenUpdate update : updates) {
|
||||||
|
@ -64,9 +65,9 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This implementation only fulfils the requirements of the super-interface.
|
* This implementation only fulfills the requirements of the super-interface.
|
||||||
* There is no use case for a root node implementing this method, but its
|
* There is no use case for a root node implementing this method, but its
|
||||||
* easier to just impelemnt it for sake of uniformity of model.
|
* easier to just implement it for sake of uniformity of model.
|
||||||
*/
|
*/
|
||||||
public void updateLabel(@SuppressWarnings("unused")
|
public void updateLabel(@SuppressWarnings("unused")
|
||||||
IVMContext vmc, ILabelUpdate update) {
|
IVMContext vmc, ILabelUpdate update) {
|
||||||
|
@ -82,7 +83,7 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
|
||||||
assert childNodeDeltas.size() != 0 : "Caller should make sure that there are deltas for given event."; //$NON-NLS-1$
|
assert childNodeDeltas.size() != 0 : "Caller should make sure that there are deltas for given event."; //$NON-NLS-1$
|
||||||
|
|
||||||
// Always create the rootDelta, no matter what delta flags the child nodes have.
|
// Always create the rootDelta, no matter what delta flags the child nodes have.
|
||||||
final VMDelta rootDelta = new VMDelta(getRootObject(), IModelDelta.NO_CHANGE);
|
final VMDelta rootDelta = new VMDelta(getVMProvider().getRootElement(), IModelDelta.NO_CHANGE);
|
||||||
|
|
||||||
callChildNodesToBuildDelta(
|
callChildNodesToBuildDelta(
|
||||||
childNodeDeltas, rootDelta, event,
|
childNodeDeltas, rootDelta, event,
|
||||||
|
@ -99,4 +100,8 @@ abstract public class AbstractVMRootLayoutNode extends AbstractVMLayoutNode impl
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Object getRootObject() {
|
||||||
|
return getVMProvider().getRootElement();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -534,7 +534,7 @@ abstract public class AbstractDMVMLayoutNode<V extends IDMData> extends Abstract
|
||||||
}
|
}
|
||||||
// Search the root object of the layout hierarchy.
|
// Search the root object of the layout hierarchy.
|
||||||
if (retVal == null) {
|
if (retVal == null) {
|
||||||
Object inputObject = getVMProvider().getRootLayoutNode().getRootObject();
|
Object inputObject = getVMProvider().getRootElement();
|
||||||
if (inputObject instanceof ITreeSelection) {
|
if (inputObject instanceof ITreeSelection) {
|
||||||
ITreeSelection inputSelection = (ITreeSelection)inputObject;
|
ITreeSelection inputSelection = (ITreeSelection)inputObject;
|
||||||
if (inputSelection.getPaths().length == 1) {
|
if (inputSelection.getPaths().length == 1) {
|
||||||
|
|
|
@ -34,7 +34,7 @@ public abstract class AbstractDMVMProviderWithCache extends AbstractDMVMProvider
|
||||||
|
|
||||||
public void cacheFlushed(Object context) {
|
public void cacheFlushed(Object context) {
|
||||||
if(getPresentationContext().equals(context))
|
if(getPresentationContext().equals(context))
|
||||||
getModelProxy().fireModelChanged(new ModelDelta(this.getRootLayoutNode().getRootObject(),IModelDelta.CONTENT));
|
getModelProxy().fireModelChanged(new ModelDelta(getRootElement(),IModelDelta.CONTENT));
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractDMVMProviderWithCache(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) {
|
public AbstractDMVMProviderWithCache(AbstractVMAdapter adapter, IPresentationContext presentationContext, DsfSession session) {
|
||||||
|
|
|
@ -8,21 +8,16 @@
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* Wind River Systems - initial API and implementation
|
* Wind River Systems - initial API and implementation
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.dd.dsf.debug.ui.viewmodel;
|
package org.eclipse.dd.dsf.ui.viewmodel.dm;
|
||||||
|
|
||||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||||
import org.eclipse.dd.dsf.datamodel.IDMEvent;
|
import org.eclipse.dd.dsf.datamodel.IDMEvent;
|
||||||
import org.eclipse.dd.dsf.debug.ui.DsfDebugUIPlugin;
|
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
|
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMProvider;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.VMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
|
||||||
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMLayoutNode.DMVMContext;
|
import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMLayoutNode.DMVMContext;
|
||||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
|
||||||
import org.eclipse.debug.ui.DebugUITools;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is is a standard root node which listens to the selection in Debug View.
|
* This is is a standard root node which listens to the selection in Debug View.
|
||||||
|
@ -36,13 +31,11 @@ import org.eclipse.ui.IWorkbenchWindow;
|
||||||
* whole selection.
|
* whole selection.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction")
|
||||||
public class DebugViewSelectionRootLayoutNode extends AbstractVMRootLayoutNode
|
public class DMVMRootLayoutNode extends VMRootLayoutNode
|
||||||
implements IVMRootLayoutNode
|
implements IVMRootLayoutNode
|
||||||
{
|
{
|
||||||
private final IWorkbenchWindow fWindow;
|
public DMVMRootLayoutNode(AbstractVMProvider provider) {
|
||||||
public DebugViewSelectionRootLayoutNode(AbstractVMProvider provider) {
|
|
||||||
super(provider);
|
super(provider);
|
||||||
fWindow = DsfDebugUIPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -91,34 +84,15 @@ public class DebugViewSelectionRootLayoutNode extends AbstractVMRootLayoutNode
|
||||||
return super.getDeltaFlags(event);
|
return super.getDeltaFlags(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the full selection as it came from the DebugContextManager.
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public ISelection getSelection() {
|
|
||||||
return DebugUITools.getDebugContextManager().getContextService(fWindow).getActiveContext();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Object getRootObject() {
|
|
||||||
ISelection selection = getSelection();
|
|
||||||
if (selection instanceof IStructuredSelection) {
|
|
||||||
return ((IStructuredSelection)selection).getFirstElement();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private IDMContext<?> getSelectedDMC() {
|
private IDMContext<?> getSelectedDMC() {
|
||||||
Object selection = getSelection();
|
Object rootObject = getVMProvider().getRootElement();
|
||||||
if (selection instanceof IStructuredSelection) {
|
if (rootObject instanceof DMVMContext)
|
||||||
IStructuredSelection structSelection = (IStructuredSelection)selection;
|
|
||||||
if (structSelection.getFirstElement() instanceof DMVMContext)
|
|
||||||
{
|
{
|
||||||
// Correct cast: (AbstractDMVMLayoutNode<?>.DMVMContext) breaks the javac compiler
|
// Correct cast: (AbstractDMVMLayoutNode<?>.DMVMContext) breaks the javac compiler
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
DMVMContext vmc = (DMVMContext)structSelection.getFirstElement();
|
DMVMContext vmc = (DMVMContext)rootObject;
|
||||||
return vmc.getDMC();
|
return vmc.getDMC();
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue