1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-22 22:22:11 +02:00

Bug 122336: Use the asynchronous tree viewer in the Modules view. Adjustments to the platform changes in M5.

This commit is contained in:
Mikhail Khodjaiants 2006-02-21 16:32:58 +00:00
parent b0f0e7e414
commit 373ff106c3
10 changed files with 153 additions and 84 deletions

View file

@ -1,3 +1,18 @@
2006-02-21 Mikhail Khodjaiants
Bug 122336: Use the asynchronous tree viewer in the Modules view.
Adjustments to the platform changes in M5.
+ src/org/eclipse/cdt/debug/internal/ui/elements/adapters (new package)
+ CDebugElementAdapterFactory.java
* AbstractViewerState.java
+ ModuleContentAdapter.java
+ ModuleProxyFactory.java
* ModulesView.java
* ModulesViewer.java
* ModulesViewerState.java
* ModulesViewEventHandler.java
- ModuleTreeContentAdapter.java
* CDebugUIPlugin.java
2006-02-03 Mikhail Khodjaiants
The "ICDebuggerPage" interface and "AbstractCDebuggerPage" class are added.
All extensions of the "CDebuggerPage" extension point must implement "ICDebuggerPage".

View file

@ -0,0 +1,65 @@
/*******************************************************************************
* Copyright (c) 2004 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.elements.adapters;
import org.eclipse.cdt.debug.core.model.ICModule;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleContentAdapter;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleProxyFactory;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousContentAdapter;
import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousLabelAdapter;
import org.eclipse.debug.internal.ui.viewers.provisional.IModelProxyFactoryAdapter;
/**
* Comment for .
*/
public class CDebugElementAdapterFactory implements IAdapterFactory {
// private static IAsynchronousLabelAdapter fgModuleLabelAdapter = new AsynchronousDebugLabelAdapter();
private static IAsynchronousContentAdapter fgModuleContentAdapter = new ModuleContentAdapter();
private static IModelProxyFactoryAdapter fgModuleProxyFactory = new ModuleProxyFactory();
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
*/
public Object getAdapter( Object adaptableObject, Class adapterType ) {
if ( adapterType.isInstance( adaptableObject ) ) {
return adaptableObject;
}
if ( adapterType.equals( IAsynchronousContentAdapter.class ) ) {
if ( adaptableObject instanceof IModuleRetrieval ) {
return fgModuleContentAdapter;
}
if ( adaptableObject instanceof ICModule ) {
return fgModuleContentAdapter;
}
}
if ( adapterType.equals( IModelProxyFactoryAdapter.class ) ) {
if ( adaptableObject instanceof IModuleRetrieval ) {
return fgModuleProxyFactory;
}
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
*/
public Class[] getAdapterList() {
return new Class[] {
IAsynchronousContentAdapter.class,
IAsynchronousLabelAdapter.class,
IModelProxyFactoryAdapter.class
};
}
}

View file

@ -12,10 +12,9 @@ package org.eclipse.cdt.debug.internal.ui.views;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IPath;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
import org.eclipse.debug.internal.ui.model.viewers.AsynchronousTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.TreePath;
import org.eclipse.debug.internal.ui.viewers.TreeSelection;
import org.eclipse.swt.widgets.TreeItem;
@ -33,7 +32,7 @@ public abstract class AbstractViewerState {
/**
* Constructs a memento for the given viewer.
*/
public AbstractViewerState(AsynchronousTreeViewer viewer) {
public AbstractViewerState(AsynchronousTreeModelViewer viewer) {
saveState(viewer);
}
@ -43,7 +42,7 @@ public abstract class AbstractViewerState {
*
* @param viewer viewer of which to save the state
*/
public void saveState(AsynchronousTreeViewer viewer) {
public void saveState(AsynchronousTreeModelViewer viewer) {
List expanded = new ArrayList();
fSavedExpansion = null;
TreeItem[] items = viewer.getTree().getItems();
@ -115,7 +114,7 @@ public abstract class AbstractViewerState {
*
* @param viewer viewer to which state is restored
*/
public void restoreState(AsynchronousTreeViewer viewer) {
public void restoreState(AsynchronousTreeModelViewer viewer) {
boolean expansionComplete = true;
if (fSavedExpansion != null && fSavedExpansion.size() > 0) {
for (int i = 0; i < fSavedExpansion.size(); i++) {
@ -176,6 +175,6 @@ public abstract class AbstractViewerState {
* @return element represented by the path, or <code>null</code> if none
* @throws DebugException if unable to locate a variable
*/
protected abstract TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException;
protected abstract TreePath decodePath(IPath path, AsynchronousTreeModelViewer viewer) throws DebugException;
}

View file

@ -17,16 +17,16 @@ import org.eclipse.cdt.debug.core.model.ICModule;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeContentAdapter;
import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
import org.eclipse.debug.internal.ui.viewers.provisional.AsynchronousContentAdapter;
import org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext;
/**
* Comment for .
*/
public class ModuleTreeContentAdapter extends AsynchronousTreeContentAdapter {
public class ModuleContentAdapter extends AsynchronousContentAdapter {
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousTreeContentAdapter#getChildren(java.lang.Object, org.eclipse.debug.internal.ui.viewers.IPresentationContext)
* @see org.eclipse.debug.internal.ui.viewers.provisional.AsynchronousContentAdapter#getChildren(java.lang.Object, org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext)
*/
protected Object[] getChildren( Object parent, IPresentationContext context ) throws CoreException {
if ( parent instanceof IModuleRetrieval ) {

View file

@ -0,0 +1,37 @@
/*******************************************************************************
* Copyright (c) 2004 QNX Software Systems and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.views.modules;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.debug.internal.ui.viewers.provisional.IModelProxy;
import org.eclipse.debug.internal.ui.viewers.provisional.IModelProxyFactoryAdapter;
import org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext;
import org.eclipse.ui.IWorkbenchPart;
public class ModuleProxyFactory implements IModelProxyFactoryAdapter {
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.provisional.IModelProxyFactoryAdapter#createModelProxy(java.lang.Object, org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext)
*/
public IModelProxy createModelProxy( Object element, IPresentationContext context ) {
IWorkbenchPart part = context.getPart();
if ( part != null ) {
String id = part.getSite().getId();
if ( ICDebugUIConstants.ID_MODULES_VIEW.equals( id ) ) {
if ( element instanceof IModuleRetrieval ) {
return new ModulesViewModelProxy();
}
}
}
return null;
}
}

View file

@ -30,7 +30,7 @@ import org.eclipse.core.runtime.ListenerList;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.internal.ui.contexts.DebugContextManager;
import org.eclipse.debug.internal.ui.contexts.IDebugContextListener;
import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener;
import org.eclipse.debug.internal.ui.viewers.PresentationContext;
import org.eclipse.debug.ui.AbstractDebugView;
import org.eclipse.debug.ui.IDebugUIConstants;
@ -374,7 +374,7 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
// create the sash form that will contain the tree viewer & text viewer
setSashForm( new SashForm( parent, SWT.NONE ) );
// add tree viewer
final ModulesViewer modulesViewer = new ModulesViewer( getSashForm(), SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL, this );
final ModulesViewer modulesViewer = new ModulesViewer( getSashForm(), this );
modulesViewer.setUseHashlookup( false );
modulesViewer.getControl().addFocusListener( new FocusAdapter() {
@ -391,7 +391,7 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe
getSite().setSelectionProvider( getModulesViewSelectionProvider() );
// listen to debug context
DebugContextManager.getDefault().addDebugContextListener(this, getSite().getWorkbenchWindow());
DebugContextManager.getDefault().addDebugContextListener( this, getSite().getWorkbenchWindow() );
return modulesViewer;
}

View file

@ -13,10 +13,10 @@ package org.eclipse.cdt.debug.internal.ui.views.modules;
import org.eclipse.cdt.debug.core.model.ICModule;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.internal.ui.viewers.AbstractModelProxy;
import org.eclipse.debug.internal.ui.viewers.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy;
import org.eclipse.debug.internal.ui.viewers.provisional.IModelDelta;
import org.eclipse.debug.internal.ui.viewers.provisional.ModelDelta;
import org.eclipse.debug.internal.ui.viewers.update.DebugEventHandler;
import org.eclipse.debug.internal.ui.viewers.update.ModelDelta;
/**
* Comment for .
@ -46,7 +46,7 @@ public class ModulesViewEventHandler extends DebugEventHandler {
*/
protected void handleChange( DebugEvent event ) {
if ( event.getSource() instanceof ICModule )
fireDelta( new ModelDelta( event.getSource(), IModelDelta.CHANGED | IModelDelta.STATE ) );
fireDelta( new ModelDelta( event.getSource(), IModelDelta.STATE ) );
}
/* (non-Javadoc)

View file

@ -10,54 +10,19 @@
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui.views.modules;
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.debug.internal.ui.elements.adapters.AsynchronousDebugLabelAdapter;
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
import org.eclipse.debug.internal.ui.viewers.IAsynchronousLabelAdapter;
import org.eclipse.debug.internal.ui.viewers.IAsynchronousRequestMonitor;
import org.eclipse.debug.internal.ui.viewers.IAsynchronousTreeContentAdapter;
import org.eclipse.debug.internal.ui.viewers.IModelProxy;
import org.eclipse.debug.internal.ui.viewers.IModelProxyFactory;
import org.eclipse.debug.internal.ui.viewers.IPresentationContext;
import org.eclipse.debug.internal.ui.model.viewers.AsynchronousTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.progress.UIJob;
/**
* Asynchronous viewer used by the Modules view.
*/
public class ModulesViewer extends AsynchronousTreeViewer {
public class ModulesViewer extends AsynchronousTreeModelViewer {
static class ModuleProxyFactory implements IModelProxyFactory {
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.IModelProxyFactory#createModelProxy(java.lang.Object, org.eclipse.debug.internal.ui.viewers.IPresentationContext)
*/
public IModelProxy createModelProxy( Object element, IPresentationContext context ) {
IWorkbenchPart part = context.getPart();
if ( part != null ) {
String id = part.getSite().getId();
if ( ICDebugUIConstants.ID_MODULES_VIEW.equals( id ) ) {
if ( element instanceof IAdaptable ) {
ICDebugTarget target = (ICDebugTarget)((IAdaptable)element).getAdapter( ICDebugTarget.class );
if ( target != null )
return new ModulesViewModelProxy();
}
}
}
return null;
}
}
private static IAsynchronousLabelAdapter fgModuleLabelAdapter = new AsynchronousDebugLabelAdapter();
private static IAsynchronousTreeContentAdapter fgModuleTreeContentAdapter = new ModuleTreeContentAdapter();
private static IModelProxyFactory fgModuleProxyFactory = new ModuleProxyFactory();
protected ModulesView fView;
private UIJob fRestoreJob = new UIJob( "restore viewer state" ) { //$NON-NLS-1$
@ -71,14 +36,14 @@ public class ModulesViewer extends AsynchronousTreeViewer {
/**
* Constructor for ModulesViewer.
*/
public ModulesViewer( Composite parent, int style, ModulesView view ) {
super( parent, style );
public ModulesViewer( Composite parent, ModulesView view ) {
super( parent );
fView = view;
fRestoreJob.setSystem( true );
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousViewer#updateComplete(org.eclipse.debug.internal.ui.viewers.IAsynchronousRequestMonitor)
* @see org.eclipse.debug.internal.ui.model.viewers.AsynchronousModelViewer#updateComplete(org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor)
*/
protected void updateComplete( IAsynchronousRequestMonitor update ) {
super.updateComplete( update );
@ -88,30 +53,9 @@ public class ModulesViewer extends AsynchronousTreeViewer {
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousViewer#handlePresentationFailure(org.eclipse.debug.internal.ui.viewers.IAsynchronousRequestMonitor, org.eclipse.core.runtime.IStatus)
* @see org.eclipse.debug.internal.ui.model.viewers.AsynchronousModelViewer#handlePresentationFailure(org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor, org.eclipse.core.runtime.IStatus)
*/
protected void handlePresentationFailure( IAsynchronousRequestMonitor update, IStatus status ) {
fView.showMessage( status.getMessage() );
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer#getTreeContentAdapter(java.lang.Object)
*/
protected IAsynchronousTreeContentAdapter getTreeContentAdapter( Object element ) {
return fgModuleTreeContentAdapter;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousViewer#getLabelAdapter(java.lang.Object)
*/
protected IAsynchronousLabelAdapter getLabelAdapter( Object element ) {
return fgModuleLabelAdapter;
}
/* (non-Javadoc)
* @see org.eclipse.debug.internal.ui.viewers.AsynchronousViewer#getModelProxyFactoryAdapter(java.lang.Object)
*/
protected IModelProxyFactory getModelProxyFactoryAdapter( Object element ) {
return fgModuleProxyFactory;
}
}

View file

@ -16,7 +16,7 @@ import org.eclipse.cdt.debug.internal.ui.views.AbstractViewerState;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
import org.eclipse.debug.internal.ui.model.viewers.AsynchronousTreeModelViewer;
import org.eclipse.debug.internal.ui.viewers.TreePath;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.swt.widgets.TreeItem;
@ -29,7 +29,7 @@ public class ModulesViewerState extends AbstractViewerState {
/**
* Constructor for ModulesViewerState.
*/
public ModulesViewerState( AsynchronousTreeViewer viewer ) {
public ModulesViewerState( AsynchronousTreeModelViewer viewer ) {
super( viewer );
}
@ -47,9 +47,9 @@ public class ModulesViewerState extends AbstractViewerState {
}
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.ui.views.AbstractViewerState#decodePath(org.eclipse.core.runtime.IPath, org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer)
* @see org.eclipse.cdt.debug.internal.ui.views.AbstractViewerState#decodePath(org.eclipse.core.runtime.IPath, org.eclipse.debug.internal.ui.model.viewers.AsynchronousTreeModelViewer)
*/
protected TreePath decodePath( IPath path, AsynchronousTreeViewer viewer ) throws DebugException {
protected TreePath decodePath( IPath path, AsynchronousTreeModelViewer viewer ) throws DebugException {
String[] names = path.segments();
Tree tree = viewer.getTree();
TreeItem[] items = tree.getItems();

View file

@ -13,17 +13,21 @@ package org.eclipse.cdt.debug.ui;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.model.ICModule;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.internal.ui.CBreakpointUpdater;
import org.eclipse.cdt.debug.internal.ui.CDebugImageDescriptorRegistry;
import org.eclipse.cdt.debug.internal.ui.CDebugModelPresentation;
import org.eclipse.cdt.debug.internal.ui.ColorManager;
import org.eclipse.cdt.debug.internal.ui.EvaluationContextManager;
import org.eclipse.cdt.debug.internal.ui.IInternalCDebugUIConstants;
import org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory;
import org.eclipse.cdt.debug.ui.sourcelookup.DefaultSourceLocator;
import org.eclipse.cdt.debug.ui.sourcelookup.OldDefaultSourceLocator;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IStatus;
@ -250,6 +254,11 @@ public class CDebugUIPlugin extends AbstractUIPlugin {
super.start( context );
EvaluationContextManager.startup();
CDebugCorePlugin.getDefault().addCBreakpointListener( CBreakpointUpdater.getInstance() );
IAdapterManager manager= Platform.getAdapterManager();
CDebugElementAdapterFactory elementAdapterFactory = new CDebugElementAdapterFactory();
manager.registerAdapters( elementAdapterFactory, IModuleRetrieval.class );
manager.registerAdapters( elementAdapterFactory, ICModule.class );
}
/*