mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-05 08:46:02 +02:00
Debug model agnostic Modules view.
This commit is contained in:
parent
d0c30f1b23
commit
f969cc0ef9
7 changed files with 160 additions and 34 deletions
|
@ -1205,19 +1205,6 @@
|
|||
class="org.eclipse.cdt.debug.internal.ui.sourcelookup.SourceContainerAdapterFactory">
|
||||
<adapter type="org.eclipse.ui.model.IWorkbenchAdapter"/>
|
||||
</factory>
|
||||
<factory
|
||||
adaptableType="org.eclipse.cdt.debug.core.model.IModuleRetrieval"
|
||||
class="org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory">
|
||||
<adapter
|
||||
type="org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider">
|
||||
</adapter>
|
||||
<adapter
|
||||
type="org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory">
|
||||
</adapter>
|
||||
<adapter
|
||||
type="org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider">
|
||||
</adapter>
|
||||
</factory>
|
||||
<factory
|
||||
adaptableType="org.eclipse.cdt.debug.core.model.ICModule"
|
||||
class="org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory">
|
||||
|
|
|
@ -14,9 +14,12 @@ import org.eclipse.cdt.core.model.CModelException;
|
|||
import org.eclipse.cdt.core.model.IBinary;
|
||||
import org.eclipse.cdt.core.model.IParent;
|
||||
import org.eclipse.cdt.debug.core.model.ICModule;
|
||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
||||
import org.eclipse.cdt.debug.core.model.ICThread;
|
||||
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
|
||||
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.debug.internal.ui.model.elements.ElementContentProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
|
||||
|
@ -44,10 +47,16 @@ public class ModuleContentProvider extends ElementContentProvider {
|
|||
return ICDebugUIConstants.ID_MODULES_VIEW.equals( id );
|
||||
}
|
||||
|
||||
protected Object[] getAllChildren( Object parent, IPresentationContext context ) throws CoreException {
|
||||
protected Object[] getAllChildren( Object parent, IPresentationContext context ) throws CoreException {
|
||||
if ( parent instanceof IModuleRetrieval ) {
|
||||
return ((IModuleRetrieval)parent).getModules();
|
||||
}
|
||||
else if ( parent instanceof ICThread || parent instanceof ICStackFrame ) {
|
||||
IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)parent).getAdapter( IModuleRetrieval.class );
|
||||
if ( mr != null ) {
|
||||
return mr.getModules();
|
||||
}
|
||||
}
|
||||
else if ( parent instanceof ICModule ) {
|
||||
IBinary binary = (IBinary)((ICModule)parent).getAdapter( IBinary.class );
|
||||
if ( binary != null ) {
|
||||
|
|
|
@ -12,9 +12,13 @@ package org.eclipse.cdt.debug.internal.ui.views.modules;
|
|||
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.debug.core.CDIDebugModel;
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.model.ICModule;
|
||||
import org.eclipse.cdt.debug.core.model.ICStackFrame;
|
||||
import org.eclipse.cdt.debug.core.model.ICThread;
|
||||
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||
import org.eclipse.ui.IMemento;
|
||||
|
@ -34,9 +38,15 @@ public class ModuleMementoProvider extends ElementMementoProvider {
|
|||
* @see org.eclipse.debug.internal.ui.model.elements.ElementMementoProvider#encodeElement(java.lang.Object, org.eclipse.ui.IMemento, org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext)
|
||||
*/
|
||||
protected boolean encodeElement( Object element, IMemento memento, IPresentationContext context ) throws CoreException {
|
||||
if ( element instanceof IModuleRetrieval ) {
|
||||
// attempt to maintain expansion for target ????
|
||||
memento.putString( ELEMENT_NAME, CDIDebugModel.getPluginIdentifier() );
|
||||
if ( element instanceof ICDebugTarget || element instanceof ICThread || element instanceof ICStackFrame ) {
|
||||
IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)element).getAdapter( IModuleRetrieval.class );
|
||||
if ( mr != null ) {
|
||||
memento.putString( ELEMENT_NAME, mr.toString() );
|
||||
}
|
||||
else {
|
||||
// shouldn't happen
|
||||
memento.putString( ELEMENT_NAME, CDIDebugModel.getPluginIdentifier() );
|
||||
}
|
||||
}
|
||||
else if ( element instanceof ICModule ) {
|
||||
memento.putString( ELEMENT_NAME, ((ICModule)element).getName() );
|
||||
|
@ -57,8 +67,9 @@ public class ModuleMementoProvider extends ElementMementoProvider {
|
|||
String mementoName = memento.getString( ELEMENT_NAME );
|
||||
if ( mementoName != null ) {
|
||||
String elementName = null;
|
||||
if ( element instanceof IModuleRetrieval ) {
|
||||
elementName = CDIDebugModel.getPluginIdentifier();
|
||||
if ( element instanceof ICDebugTarget || element instanceof ICThread || element instanceof ICStackFrame ) {
|
||||
IModuleRetrieval mr = (IModuleRetrieval)((IAdaptable)element).getAdapter( IModuleRetrieval.class );
|
||||
elementName = ( mr != null ) ? mr.toString() : CDIDebugModel.getPluginIdentifier();
|
||||
}
|
||||
else if ( element instanceof ICModule ) {
|
||||
elementName = ((ICModule)element).getName();
|
||||
|
|
|
@ -11,8 +11,10 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.debug.internal.ui.views.modules;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
|
||||
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||
|
@ -24,8 +26,14 @@ public class ModuleProxyFactory implements IModelProxyFactory {
|
|||
*/
|
||||
public IModelProxy createModelProxy( Object element, IPresentationContext context ) {
|
||||
if ( ICDebugUIConstants.ID_MODULES_VIEW.equals( context.getId() ) ) {
|
||||
if ( element instanceof IModuleRetrieval ) {
|
||||
return new ModulesViewModelProxy( (IModuleRetrieval)element );
|
||||
IModuleRetrieval mr = null;
|
||||
if ( element instanceof IAdaptable ) {
|
||||
ICDebugTarget target = (ICDebugTarget)((IAdaptable)element).getAdapter( ICDebugTarget.class );
|
||||
if ( target != null )
|
||||
mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
|
||||
}
|
||||
if ( mr != null ) {
|
||||
return new ModulesViewModelProxy( mr );
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -20,9 +20,7 @@ import java.util.Iterator;
|
|||
|
||||
import org.eclipse.cdt.core.IAddress;
|
||||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
|
||||
import org.eclipse.cdt.debug.core.model.ICModule;
|
||||
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
|
||||
import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
|
||||
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
|
||||
import org.eclipse.cdt.debug.internal.ui.actions.ToggleDetailPaneAction;
|
||||
|
@ -30,7 +28,6 @@ import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants;
|
|||
import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler;
|
||||
import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
|
||||
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.debug.core.DebugException;
|
||||
import org.eclipse.debug.core.DebugPlugin;
|
||||
|
@ -285,31 +282,25 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
|
|||
}
|
||||
|
||||
protected void setViewerInput( Object context ) {
|
||||
IModuleRetrieval mr = null;
|
||||
if ( context instanceof IAdaptable ) {
|
||||
ICDebugTarget target = (ICDebugTarget)((IAdaptable)context).getAdapter( ICDebugTarget.class );
|
||||
if ( target != null )
|
||||
mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
|
||||
}
|
||||
|
||||
if ( context == null ) {
|
||||
clearDetails();
|
||||
}
|
||||
Object current = getViewer().getInput();
|
||||
if ( current == null && mr == null ) {
|
||||
if ( current == null && context == null ) {
|
||||
return;
|
||||
}
|
||||
if ( current != null && current.equals( mr ) ) {
|
||||
if ( current != null && current.equals( context ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
showViewer();
|
||||
getViewer().setInput( mr );
|
||||
getViewer().setInput( context );
|
||||
}
|
||||
|
||||
protected TreeModelViewer createTreeViewer( Composite parent ) {
|
||||
// add tree viewer
|
||||
final TreeModelViewer modulesViewer = new TreeModelViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL | SWT.FULL_SELECTION, getPresentationContext() );
|
||||
final TreeModelViewer modulesViewer = new ModulesViewTreeViewer( parent, SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL | SWT.VIRTUAL | SWT.FULL_SELECTION, getPresentationContext() );
|
||||
modulesViewer.getControl().addFocusListener( new FocusAdapter() {
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -0,0 +1,88 @@
|
|||
/**
|
||||
* Copyright 2007 ARM Limited. All rights reserved.
|
||||
*
|
||||
* $ Rev: $
|
||||
* $ Author: $
|
||||
* $ Date: $
|
||||
* $ URL: $
|
||||
*/
|
||||
package org.eclipse.cdt.debug.internal.ui.views.modules;
|
||||
|
||||
import org.eclipse.cdt.debug.core.model.ICDebugElement;
|
||||
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
|
||||
import org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory;
|
||||
import org.eclipse.core.runtime.IAdaptable;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory;
|
||||
|
||||
/**
|
||||
* org.eclipse.cdt.debug.internal.ui.views.modules.ModulesViewTreeContentProvider:
|
||||
* //TODO Add description.
|
||||
*/
|
||||
public class ModulesViewTreeContentProvider extends TreeModelContentProvider {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getContentAdapter(java.lang.Object)
|
||||
*/
|
||||
protected IElementContentProvider getContentAdapter( Object element ) {
|
||||
IElementContentProvider adapter = null;
|
||||
if ( !(element instanceof ICDebugElement) ) {
|
||||
if ( element instanceof IElementContentProvider ) {
|
||||
adapter = (IElementContentProvider)element;
|
||||
}
|
||||
else if ( element instanceof IAdaptable ) {
|
||||
IAdaptable adaptable = (IAdaptable)element;
|
||||
adapter = (IElementContentProvider)adaptable.getAdapter( IElementContentProvider.class );
|
||||
}
|
||||
}
|
||||
else {
|
||||
IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
|
||||
if ( moduleRetrieval != null ) {
|
||||
adapter = (IElementContentProvider)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IElementContentProvider.class );
|
||||
}
|
||||
}
|
||||
return adapter;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getModelProxyFactoryAdapter(java.lang.Object)
|
||||
*/
|
||||
protected IModelProxyFactory getModelProxyFactoryAdapter( Object element ) {
|
||||
IModelProxyFactory adapter = null;
|
||||
if ( !(element instanceof ICDebugElement) ) {
|
||||
if ( element instanceof IModelProxyFactory ) {
|
||||
adapter = (IModelProxyFactory)element;
|
||||
}
|
||||
else if ( element instanceof IAdaptable ) {
|
||||
IAdaptable adaptable = (IAdaptable)element;
|
||||
adapter = (IModelProxyFactory)adaptable.getAdapter( IModelProxyFactory.class );
|
||||
}
|
||||
}
|
||||
else {
|
||||
IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
|
||||
if ( moduleRetrieval != null ) {
|
||||
adapter = (IModelProxyFactory)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IModelProxyFactory.class );
|
||||
}
|
||||
}
|
||||
return adapter;
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.internal.ui.viewers.model.ModelContentProvider#getViewerStateAdapter(java.lang.Object)
|
||||
*/
|
||||
protected IElementMementoProvider getViewerStateAdapter( Object element ) {
|
||||
IElementMementoProvider adapter = null;
|
||||
if ( !(element instanceof ICDebugElement) ) {
|
||||
adapter = super.getViewerStateAdapter( element );
|
||||
}
|
||||
else {
|
||||
IModuleRetrieval moduleRetrieval = (IModuleRetrieval)((ICDebugElement)element).getAdapter( IModuleRetrieval.class );
|
||||
if ( moduleRetrieval != null ) {
|
||||
adapter = (IElementMementoProvider)new CDebugElementAdapterFactory().getAdapter( moduleRetrieval, IElementMementoProvider.class );
|
||||
}
|
||||
}
|
||||
return adapter;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* Copyright 2007 ARM Limited. All rights reserved.
|
||||
*
|
||||
* $ Rev: $
|
||||
* $ Author: $
|
||||
* $ Date: $
|
||||
* $ URL: $
|
||||
*/
|
||||
package org.eclipse.cdt.debug.internal.ui.views.modules;
|
||||
|
||||
import org.eclipse.debug.internal.ui.viewers.model.TreeModelContentProvider;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
|
||||
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
|
||||
import org.eclipse.swt.widgets.Composite;
|
||||
|
||||
/**
|
||||
* org.eclipse.cdt.debug.internal.ui.views.modules.ModulesViewTreeViewer:
|
||||
* //TODO Add description.
|
||||
*/
|
||||
public class ModulesViewTreeViewer extends TreeModelViewer {
|
||||
|
||||
public ModulesViewTreeViewer( Composite parent, int style, IPresentationContext context ) {
|
||||
super( parent, style, context );
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.debug.internal.ui.viewers.model.InternalTreeModelViewer#createContentProvider()
|
||||
*/
|
||||
protected TreeModelContentProvider createContentProvider() {
|
||||
return new ModulesViewTreeContentProvider();
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue