diff --git a/debug/org.eclipse.cdt.debug.ui/ChangeLog b/debug/org.eclipse.cdt.debug.ui/ChangeLog index a5c9d2f66b4..89b4463940e 100644 --- a/debug/org.eclipse.cdt.debug.ui/ChangeLog +++ b/debug/org.eclipse.cdt.debug.ui/ChangeLog @@ -1,3 +1,9 @@ +2003-01-21 Mikhail Khodjaiants + Changed the viewer of the Shared Libraries view to TreeViewer. + * SharedLibrariesView.java + * SharedLibrariesViewContentProvider.java + * SharedLibrariesViewEventHandler.java + 2003-01-21 Mikhail Khodjaiants * src/org/eclipse/cdt/debu/internal/ui/CDTDebugModelPresentation.java diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesView.java index bc52564e00d..ab815e4d784 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesView.java @@ -7,10 +7,11 @@ package org.eclipse.cdt.debug.internal.ui.views.sharedlibs; import org.eclipse.cdt.debug.core.ICSharedLibraryManager; import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds; +import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; +import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandlerView; import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IDebugElement; -import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugModelPresentation; import org.eclipse.debug.ui.IDebugUIConstants; @@ -21,7 +22,7 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; @@ -32,61 +33,24 @@ import org.eclipse.ui.IWorkbenchPart; /** * Enter type comment. * - * @since: Jan 16, 2003 + * @since: Jan 21, 2003 */ -public class SharedLibrariesView extends AbstractDebugView +public class SharedLibrariesView extends AbstractDebugEventHandlerView implements ISelectionListener, IPropertyChangeListener, IDebugExceptionHandler { - /** - * Event handler for this view - */ - private SharedLibrariesViewEventHandler fEventHandler; - /** * The model presentation used as the label provider for the tree viewer. */ private IDebugModelPresentation fModelPresentation; - /** - * Sets the event handler for this view - * - * @param eventHandler event handler - */ - protected void setEventHandler( SharedLibrariesViewEventHandler eventHandler ) - { - fEventHandler = eventHandler; - } - - /** - * Returns the event handler for this view - * - * @return The event handler for this view - */ - protected SharedLibrariesViewEventHandler getEventHandler() - { - return fEventHandler; - } - - /** - * @see IWorkbenchPart#dispose() - */ - public void dispose() - { - super.dispose(); - if ( getEventHandler() != null ) - { - getEventHandler().dispose(); - } - } - /* (non-Javadoc) * @see org.eclipse.debug.ui.AbstractDebugView#createViewer(Composite) */ protected Viewer createViewer( Composite parent ) { - TableViewer viewer = new TableViewer( parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL ); + TreeViewer viewer = new TreeViewer( parent, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL ); viewer.setContentProvider( new SharedLibrariesViewContentProvider() ); viewer.setLabelProvider( getModelPresentation() ); @@ -200,7 +164,7 @@ public class SharedLibrariesView extends AbstractDebugView * @param viewer the viewer associated with this view * @return an event handler */ - protected SharedLibrariesViewEventHandler createEventHandler( Viewer viewer ) + protected AbstractDebugEventHandler createEventHandler( Viewer viewer ) { return new SharedLibrariesViewEventHandler( this ); } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewContentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewContentProvider.java index 3f4fe0f7590..29ae048a6fa 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewContentProvider.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewContentProvider.java @@ -5,27 +5,102 @@ */ package org.eclipse.cdt.debug.internal.ui.views.sharedlibs; +import java.util.HashMap; + import org.eclipse.cdt.debug.core.ICSharedLibraryManager; -import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; +import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; /** * Enter type comment. * - * @since: Jan 16, 2003 + * @since: Jan 21, 2003 */ -public class SharedLibrariesViewContentProvider implements IStructuredContentProvider +public class SharedLibrariesViewContentProvider implements ITreeContentProvider { - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(Object) + /** + * A table that maps children to their parent element + * such that this content provider can walk back up the + * parent chain (since values do not know their + * parent). + * Map of IVariable (child) -> IVariable (parent). */ - public Object[] getElements( Object parent ) + private HashMap fParentCache; + + /** + * Handler for exceptions as content is retrieved + */ + private IDebugExceptionHandler fExceptionHandler = null; + + + /** + * Constructor for SharedLibrariesViewContentProvider. + */ + public SharedLibrariesViewContentProvider() + { + fParentCache = new HashMap( 10 ); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(Object) + */ + public Object[] getChildren( Object parent ) + { + Object[] children = null; + if ( parent != null && parent instanceof ICSharedLibraryManager ) + { + children = ((ICSharedLibraryManager)parent).getSharedLibraries(); + } + if ( children != null ) + { + cache( parent, children ); + return children; + } + return new Object[0]; + } + + /** + * Caches the given elememts as children of the given + * parent. + * + * @param parent parent element + * @param children children elements + */ + protected void cache( Object parent, Object[] children ) + { + for ( int i = 0; i < children.length; i++ ) + { + fParentCache.put( children[i], parent ); + } + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(Object) + */ + public Object getParent( Object element ) + { + return fParentCache.get( element ); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(Object) + */ + public boolean hasChildren( Object parent ) { if ( parent != null && parent instanceof ICSharedLibraryManager ) { - return ((ICSharedLibraryManager)parent).getSharedLibraries(); + return ( ((ICSharedLibraryManager)parent).getSharedLibraries().length > 0 ); } - return null; + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(Object) + */ + public Object[] getElements( Object inputElement ) + { + return getChildren( inputElement ); } /* (non-Javadoc) @@ -33,6 +108,8 @@ public class SharedLibrariesViewContentProvider implements IStructuredContentPro */ public void dispose() { + fParentCache = null; + setExceptionHandler( null ); } /* (non-Javadoc) @@ -40,5 +117,50 @@ public class SharedLibrariesViewContentProvider implements IStructuredContentPro */ public void inputChanged( Viewer viewer, Object oldInput, Object newInput ) { + clearCache(); } + + protected void clearCache() + { + if ( fParentCache != null ) + { + fParentCache.clear(); + } + } + + /** + * Remove the cached parent for the given children + * + * @param children for which to remove cached parents + */ + public void removeCache( Object[] children ) + { + if ( fParentCache != null ) + { + for ( int i = 0; i < children.length; i++ ) + { + fParentCache.remove( children[i] ); + } + } + } + + /** + * Sets an exception handler for this content provider. + * + * @param handler debug exception handler or null + */ + protected void setExceptionHandler( IDebugExceptionHandler handler ) + { + fExceptionHandler = handler; + } + + /** + * Returns the exception handler for this content provider. + * + * @return debug exception handler or null + */ + protected IDebugExceptionHandler getExceptionHandler() + { + return fExceptionHandler; + } } diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewEventHandler.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewEventHandler.java index 07264633e5a..d49ff52357e 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewEventHandler.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/sharedlibs/SharedLibrariesViewEventHandler.java @@ -6,56 +6,25 @@ package org.eclipse.cdt.debug.internal.ui.views.sharedlibs; import org.eclipse.cdt.debug.core.model.ICSharedLibrary; +import org.eclipse.cdt.debug.internal.ui.views.AbstractDebugEventHandler; import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.ui.AbstractDebugView; -import org.eclipse.jface.viewers.TableViewer; /** * Enter type comment. * - * @since: Jan 16, 2003 + * @since: Jan 21, 2003 */ -public class SharedLibrariesViewEventHandler implements IDebugEventSetListener +public class SharedLibrariesViewEventHandler extends AbstractDebugEventHandler { - /** - * This event handler's view - */ - private AbstractDebugView fView; - /** * Constructor for SharedLibrariesViewEventHandler. * @param view */ public SharedLibrariesViewEventHandler( AbstractDebugView view ) { - setView( view ); - DebugPlugin.getDefault().addDebugEventListener( this ); - } - - /** - * @see IDebugEventSetListener#handleDebugEvents(DebugEvent[]) - */ - public void handleDebugEvents( final DebugEvent[] events ) - { - if ( !isAvailable() ) - { - return; - } - Runnable r = new Runnable() - { - public void run() - { - if ( isAvailable() ) - { - doHandleDebugEvents( events ); - } - } - }; - - getView().asyncExec( r ); + super( view ); } /* (non-Javadoc) @@ -81,80 +50,4 @@ public class SharedLibrariesViewEventHandler implements IDebugEventSetListener } } } - - /** - * Refresh the given element in the viewer - must be called in UI thread. - */ - protected void refresh( Object element ) - { - if ( isAvailable() ) - { - getView().showViewer(); - getTableViewer().refresh( element ); - } - } - - /** - * Refresh the viewer - must be called in UI thread. - */ - public void refresh() - { - if ( isAvailable() ) - { - getView().showViewer(); - getTableViewer().refresh(); - } - } - - /** - * De-registers this event handler from the debug model. - */ - public void dispose() - { - DebugPlugin plugin = DebugPlugin.getDefault(); - plugin.removeDebugEventListener( this ); - } - - /** - * Returns the view this event handler is - * updating. - * - * @return debug view - */ - protected AbstractDebugView getView() - { - return fView; - } - - /** - * Sets the view this event handler is updating. - * - * @param view debug view - */ - private void setView( AbstractDebugView view ) - { - fView = view; - } - - /** - * Returns the viewer this event handler is updating. - * - * @return viewer - */ - protected TableViewer getTableViewer() - { - return (TableViewer)getView().getViewer(); - } - - /** - * Returns whether this event handler's viewer is - * currently available. - * - * @return whether this event handler's viewer is - * currently available - */ - protected boolean isAvailable() - { - return getView().isAvailable(); - } }