1
0
Fork 0
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:
Mikhail Khodjaiants 2007-10-02 14:29:32 +00:00
parent d0c30f1b23
commit f969cc0ef9
7 changed files with 160 additions and 34 deletions

View file

@ -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">

View file

@ -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 ) {

View file

@ -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();

View file

@ -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;

View file

@ -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)

View file

@ -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;
}
}

View file

@ -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();
}
}