diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractViewerState.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractViewerState.java deleted file mode 100644 index 7f39274a601..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/AbstractViewerState.java +++ /dev/null @@ -1,182 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 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; - -import java.util.ArrayList; -import java.util.List; - -import org.eclipse.core.runtime.IPath; -import org.eclipse.debug.core.DebugException; -import org.eclipse.jface.viewers.AbstractTreeViewer; -import org.eclipse.jface.viewers.TreePath; -import org.eclipse.jface.viewers.TreeSelection; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.widgets.TreeItem; - -/** - * The abstract superclass for mementos of the expanded and - * selected items in a tree viewer. - */ -public abstract class AbstractViewerState { - - // paths to expanded elements - private List fSavedExpansion = null; - private IPath[] fSelection; - - /** - * Constructs a memento for the given viewer. - */ - public AbstractViewerState(TreeViewer viewer) { - saveState(viewer); - } - - /** - * Saves the current state of the given viewer into - * this memento. - * - * @param viewer viewer of which to save the state - */ - public void saveState(TreeViewer viewer) { - List expanded = new ArrayList(); - fSavedExpansion = null; - TreeItem[] items = viewer.getTree().getItems(); - try { - for (int i = 0; i < items.length; i++) { - collectExpandedItems(items[i], expanded); - } - if (expanded.size() > 0) { - fSavedExpansion = expanded; - } - } catch (DebugException e) { - fSavedExpansion = null; - } - TreeItem[] selection = viewer.getTree().getSelection(); - fSelection = new IPath[selection.length]; - try { - for (int i = 0; i < selection.length; i++) { - fSelection[i] = encodeElement(selection[i]); - if (fSelection[i] == null) { - fSelection = null; - return; - } - } - } catch (DebugException e) { - fSelection = null; - } - } - - /** - * Collects paths to expanded children of the given element and returns - * whether any paths were expanded. - * - * @param item item to collect expanded paths for - * @param expanded list to add to - * @return whether any paths were found expanded - * @throws DebugException - */ - protected boolean collectExpandedItems(TreeItem item, List expanded) throws DebugException { - if (item.getExpanded()) { - boolean childExpanded = false; - TreeItem[] items = item.getItems(); - for (int i = 0; i < items.length; i++) { - childExpanded = collectExpandedItems(items[i], expanded) || childExpanded; - } - if (!childExpanded) { - IPath path = encodeElement(item); - expanded.add(path); - } - } else { - return false; - } - return true; - } - - /** - * Constructs a path representing the given tree item. The segments in the - * path denote parent items, and the last segment is the name of - * the given item. - * - * @param item tree item to encode - * @return path encoding the given item - * @throws DebugException if unable to generate a path - */ - protected abstract IPath encodeElement(TreeItem item) throws DebugException; - - /** - * Restores the state of the given viewer to this memento's - * saved state. - * - * @param viewer viewer to which state is restored - */ - public void restoreState(TreeViewer viewer) { - boolean expansionComplete = true; - if (fSavedExpansion != null && fSavedExpansion.size() > 0) { - for (int i = 0; i < fSavedExpansion.size(); i++) { - IPath path = (IPath) fSavedExpansion.get(i); - if (path != null) { - try { - TreePath treePath = decodePath(path, viewer); - if (treePath != null) { - viewer.expandToLevel( new TreeSelection(new TreePath[] { treePath }), AbstractTreeViewer.ALL_LEVELS); - - if (treePath.getSegmentCount()-1 != path.segmentCount()) { - expansionComplete = false; - } - } else { - expansionComplete =false; - } - } catch (DebugException e) { - } - } - } - if (expansionComplete) { - fSavedExpansion = null; - } - } - - boolean selectionComplete = true; - if (fSelection != null && fSelection.length > 0) { - List selection = new ArrayList(fSelection.length); - for (int i = 0; i < fSelection.length; i++) { - IPath path = fSelection[i]; - TreePath obj; - try { - obj = decodePath(path, viewer); - if (obj != null && obj.getSegmentCount()-1 == path.segmentCount()) { - selection.add(obj); - } else { - selectionComplete = false; - } - } catch (DebugException e) { - } - } - if (selection.size() > 0) { - TreePath[] treePaths = (TreePath[]) selection.toArray(new TreePath[0]); - viewer.setSelection(new TreeSelection(treePaths)); - } - if (selectionComplete) { - fSelection = null; - } - } - } - - /** - * Returns an element in the given viewer that corresponds to the given - * path, or null if none. - * - * @param path encoded element path - * @param viewer viewer to search for the element in - * @return element represented by the path, or null if none - * @throws DebugException if unable to locate a variable - */ - protected abstract TreePath decodePath(IPath path, TreeViewer viewer) throws DebugException; - -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewDecoratingLabelProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewDecoratingLabelProvider.java deleted file mode 100644 index 98baae0d759..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewDecoratingLabelProvider.java +++ /dev/null @@ -1,97 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 IBM Corporation 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.debug.internal.ui.views; - -import java.util.HashMap; -import java.util.Map; -import org.eclipse.jface.viewers.DecoratingLabelProvider; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.StructuredViewer; - -/** - * A label provider which receives notification of labels computed in - * the background by a LaunchViewLabelDecorator. - */ -public class DebugViewDecoratingLabelProvider extends DecoratingLabelProvider { - - /** - * A map of text computed for elements. Items are added to this map - * when notification is received that text has been computed for an element - * and they are removed the first time the text is returned for an - * element. - * key: Object the element - * value: String the label text - */ - private Map computedText= new HashMap(); - private StructuredViewer viewer= null; - private boolean disposed= false; - - /** - * @see DecoratingLabelProvider#DecoratingLabelProvider(org.eclipse.jface.viewers.ILabelProvider, org.eclipse.jface.viewers.ILabelDecorator) - */ - public DebugViewDecoratingLabelProvider(StructuredViewer viewer, ILabelProvider provider, DebugViewLabelDecorator decorator) { - super(provider, decorator); - decorator.setLabelProvider(this); - this.viewer= viewer; - } - - /** - * Notifies this label provider that the given text was computed - * for the given element. The given text will be returned the next - * time its text is requested. - * - * @param element the element whose label was computed - * @param text the label - */ - public void textComputed(Object element, String text) { - computedText.put(element, text); - } - - /** - * Labels have been computed for the given block of elements. - * This method tells the label provider to update the - * given elements in the view. - * - * @param elements the elements which have had their text computed - */ - public void labelsComputed(Object[] elements) { - if (!disposed) { - viewer.update(elements, null); - } - for (int i = 0; i < elements.length; i++) { - computedText.remove(elements[i]); - } - } - - /** - * Returns the stored text computed by the background decorator - * or delegates to the decorating label provider to compute text. - * The stored value is not cleared - the value is cleared when - * #lablesComputed(...) has completed the update of its elements. - * - * @see DecoratingLabelProvider#getText(java.lang.Object) - */ - public String getText(Object element) { - String text= (String) computedText.get(element); - if (text != null) { - return text; - } - return super.getText(element); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() - */ - public void dispose() { - disposed= true; - super.dispose(); - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewInterimLabelProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewInterimLabelProvider.java deleted file mode 100644 index f01e1aeb8c5..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewInterimLabelProvider.java +++ /dev/null @@ -1,127 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2000, 2005 IBM Corporation 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: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.debug.internal.ui.views; - -import org.eclipse.debug.ui.IDebugModelPresentation; -import org.eclipse.jface.viewers.IColorProvider; -import org.eclipse.jface.viewers.IFontProvider; -import org.eclipse.jface.viewers.ILabelProvider; -import org.eclipse.jface.viewers.ILabelProviderListener; -import org.eclipse.swt.graphics.Color; -import org.eclipse.swt.graphics.Font; -import org.eclipse.swt.graphics.Image; - -/** - * A label provider that provide interim text labels. When queried for text, the label provider - * returns a default string (""). When queried for images, the label provider - * queries a debug model presentation. This label provider is intended to be passed to - * a DebugViewDecoratingLabelProvider. - */ -public class DebugViewInterimLabelProvider implements ILabelProvider, IColorProvider, IFontProvider { - - /** - * The text label returned by this label provider (value: "..."). - */ - public final static String PENDING_LABEL= "..."; //$NON-NLS-1$ - - /** - * The debug model presentation used for computing images. - */ - protected IDebugModelPresentation presentation; - - /** - * Creates a new interim label provider with the given model presentation. - * - * @param presentation the model presentation to use for computing images - */ - public DebugViewInterimLabelProvider(IDebugModelPresentation presentation) { - this.presentation= presentation; - } - - /** - * Returns the debug model presentation used by this label provider - * to compute images. - * - * @return this label provider's model presentation - */ - public IDebugModelPresentation getPresentation() { - return presentation; - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelProvider#getImage(java.lang.Object) - */ - public Image getImage(Object element) { - return presentation.getImage(element); - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object) - */ - public String getText(Object element) { - return DebugViewInterimLabelProvider.PENDING_LABEL; - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) - */ - public void addListener(ILabelProviderListener listener) { - presentation.addListener(listener); - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() - */ - public void dispose() { - presentation.dispose(); - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) - */ - public boolean isLabelProperty(Object element, String property) { - return presentation.isLabelProperty(element, property); - } - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) - */ - public void removeListener(ILabelProviderListener listener) { - presentation.removeListener(listener); - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IColorProvider#getForeground(java.lang.Object) - */ - public Color getForeground(Object element) { - if (presentation instanceof IColorProvider) { - IColorProvider colorProvider = (IColorProvider) presentation; - return colorProvider.getForeground(element); - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IColorProvider#getBackground(java.lang.Object) - */ - public Color getBackground(Object element) { - if (presentation instanceof IColorProvider) { - IColorProvider colorProvider = (IColorProvider) presentation; - return colorProvider.getBackground(element); - } - return null; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object) - */ - public Font getFont(Object element) { - if (presentation instanceof IFontProvider) { - IFontProvider fontProvider = (IFontProvider) presentation; - return fontProvider.getFont(element); - } - return null; - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewLabelDecorator.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewLabelDecorator.java deleted file mode 100644 index 9798c7bb795..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/DebugViewLabelDecorator.java +++ /dev/null @@ -1,199 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2005 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; - -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.List; -import java.util.Vector; -import org.eclipse.cdt.debug.ui.CDebugUIPlugin; -import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.Status; -import org.eclipse.core.runtime.jobs.ISchedulingRule; -import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.DebugEvent; -import org.eclipse.debug.core.DebugPlugin; -import org.eclipse.debug.core.IDebugEventSetListener; -import org.eclipse.debug.ui.IDebugModelPresentation; -import org.eclipse.jface.viewers.ILabelDecorator; -import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.swt.graphics.Image; - -/** - * A label decorator which computes text for debug elements - * in the background and updates them asynchronously. - */ -public class DebugViewLabelDecorator extends LabelProvider implements ILabelDecorator, IDebugEventSetListener { - - /** - * The presentation used to compute text. - */ - private IDebugModelPresentation fPresentation; - - /** - * The label provider notified when text is computed. - */ - protected DebugViewDecoratingLabelProvider fLabelProvider; - - /** - * The job which will be executed next. All new label requests - * are appended to this job. - */ - protected LabelJob fNextJob = null; - - /** - * Constructor for DebugViewLabelDecorator. - */ - public DebugViewLabelDecorator( IDebugModelPresentation presentation ) { - fPresentation = presentation; - DebugPlugin.getDefault().addDebugEventListener( this ); - } - - /** - * Sets the label provider which will be notified when a - * label has been computed in the background. - * - * @param labelProvider the label provider to notify when text - * is computed - */ - public void setLabelProvider( DebugViewDecoratingLabelProvider labelProvider ) { - fLabelProvider = labelProvider; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object) - */ - public Image decorateImage( Image image, Object element ) { - return image; - } - - /* (non-Javadoc) - * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object) - */ - public String decorateText( String text, final Object element ) { - computeText( element ); - return text; - } - - public void computeText( Object element ) { - synchronized( this ) { - if ( fNextJob == null ) { - fNextJob = new LabelJob( "Debug", fPresentation ); //$NON-NLS-1$ - } - fNextJob.computeText( element ); - } - } - - public void labelsComputed( final Object[] computedElements ) { - CDebugUIPlugin.getStandardDisplay().asyncExec( - new Runnable() { - - public void run() { - fLabelProvider.labelsComputed( computedElements ); - } - } ); - } - - /* (non-Javadoc) - * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[]) - */ - public void handleDebugEvents( DebugEvent[] events ) { - } - - /** - * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() - */ - public void dispose() { - super.dispose(); - DebugPlugin.getDefault().removeDebugEventListener( this ); - } - - /** - * A job which computes text for a queue of elements. The job's label - * decorator is notified when text has been computed for some number - * of elements. - */ - protected class LabelJob extends Job implements ISchedulingRule { - - private Vector fElementQueue = new Vector(); - private IDebugModelPresentation fJobPresentation; - - /** - * Creates a new job with the given name which will use the given - * presentation to compute labels in the background - * @param name the job's name - * @param presentation the presentation to use for label - * computation - */ - public LabelJob( String name, IDebugModelPresentation presentation ) { - super( name ); - fJobPresentation = presentation; - setSystem( true ); - } - - /** - * Queues up the given element to have its text computed. - * @param element the element whose text should be computed - * in this background job - */ - public void computeText( Object element ) { - if ( !fElementQueue.contains( element ) ) { - fElementQueue.add( element ); - } - schedule(); - } - - /* (non-Javadoc) - * @see org.eclipse.core.internal.jobs.InternalJob#run(org.eclipse.core.runtime.IProgressMonitor) - */ - public IStatus run( IProgressMonitor monitor ) { - int numElements = fElementQueue.size(); - monitor.beginTask( MessageFormat.format( "Fetching {0} labels", new String[]{ Integer.toString( numElements ) } ), numElements ); //$NON-NLS-1$ - while( !fElementQueue.isEmpty() && !monitor.isCanceled() ) { - StringBuffer message = new StringBuffer( MessageFormat.format( "Fetching {0} labels", new String[]{ Integer.toString( fElementQueue.size() ) } ) ); //$NON-NLS-1$ - message.append( MessageFormat.format( " ({0} pending)", new String[]{ Integer.toString( fNextJob.fElementQueue.size() ) } ) ); //$NON-NLS-1$ - monitor.setTaskName( message.toString() ); - int blockSize = 10; - if ( fElementQueue.size() < blockSize ) { - blockSize = fElementQueue.size(); - } - final List computedElements = new ArrayList(); - for( int i = 0; i < blockSize; i++ ) { - Object element = fElementQueue.remove( 0 ); - if ( element == null ) { - break; - } - fLabelProvider.textComputed( element, fJobPresentation.getText( element ) ); - computedElements.add( element ); - } - labelsComputed( computedElements.toArray() ); - monitor.worked( computedElements.size() ); - } - monitor.done(); - return Status.OK_STATUS; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.ISchedulingRule#contains(org.eclipse.core.runtime.jobs.ISchedulingRule) - */ - public boolean contains( ISchedulingRule rule ) { - return (rule instanceof LabelJob) && fJobPresentation == ((LabelJob)rule).fJobPresentation; - } - - /* (non-Javadoc) - * @see org.eclipse.core.runtime.jobs.ISchedulingRule#isConflicting(org.eclipse.core.runtime.jobs.ISchedulingRule) - */ - public boolean isConflicting( ISchedulingRule rule ) { - return (rule instanceof LabelJob) && fJobPresentation == ((LabelJob)rule).fJobPresentation; - } - } -} diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java index 108410bf153..dc0c7e84e74 100644 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java +++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesView.java @@ -27,7 +27,6 @@ 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; import org.eclipse.cdt.debug.internal.ui.preferences.ICDebugPreferenceConstants; -import org.eclipse.cdt.debug.internal.ui.views.AbstractViewerState; import org.eclipse.cdt.debug.internal.ui.views.IDebugExceptionHandler; import org.eclipse.cdt.debug.ui.CDebugUIPlugin; import org.eclipse.cdt.debug.ui.ICDebugUIConstants; @@ -864,57 +863,6 @@ public class ModulesView extends AbstractDebugView implements IDebugContextListe fImageCache.clear(); } -// protected void restoreState() { -// ModulesViewer viewer = (ModulesViewer)getViewer(); -// if ( viewer != null ) { -// Object context = viewer.getInput(); -// if ( context != null ) { -// AbstractViewerState state = getCachedViewerState( context ); -// if ( state == null ) { -// // attempt to restore selection/expansion based on last -// // frame -// state = fLastState; -// } -// if ( state != null ) { -// state.restoreState( viewer ); -// } -// } -// } -// } - - /** - * Caches the given viewer state for the given viewer input. - * - * @param input viewer input - * @param state viewer state - */ - protected void cacheViewerState( Object input, AbstractViewerState state ) { - // generate a key for the input based on its hashcode, we don't - // want to maintain reference real model objects preventing GCs. - fSelectionStates.put( generateKey( input ), state ); - } - - /** - * Generate a key for an input object. - * - * @param input - * @return key - */ - protected Object generateKey( Object input ) { - return new Integer( input.hashCode() ); - } - - /** - * Returns the cached viewer state for the given viewer input or - * null if none. - * - * @param input viewer input - * @return viewer state or null - */ - protected AbstractViewerState getCachedViewerState( Object input ) { - return (AbstractViewerState)fSelectionStates.get( generateKey( input ) ); - } - public void contextActivated( ISelection selection ) { if ( !isAvailable() || !isVisible() ) { return; diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewerState.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewerState.java deleted file mode 100644 index 23ff4f22120..00000000000 --- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/modules/ModulesViewerState.java +++ /dev/null @@ -1,84 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2004, 2006 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 java.util.ArrayList; -import java.util.List; - -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.jface.viewers.TreePath; -import org.eclipse.jface.viewers.TreeViewer; -import org.eclipse.swt.widgets.Tree; -import org.eclipse.swt.widgets.TreeItem; - -/** - * Memento of the expanded and selected items in a modules viewer. - */ -public class ModulesViewerState extends AbstractViewerState { - - /** - * Constructor for ModulesViewerState. - */ - public ModulesViewerState( TreeViewer viewer ) { - super( viewer ); - } - - /* (non-Javadoc) - * @see org.eclipse.cdt.debug.internal.ui.views.AbstractViewerState#encodeElement(org.eclipse.swt.widgets.TreeItem) - */ - protected IPath encodeElement( TreeItem item ) throws DebugException { - StringBuffer path = new StringBuffer( item.getText() ); - TreeItem parent = item.getParentItem(); - while( parent != null ) { - path.insert( 0, parent.getText() + IPath.SEPARATOR ); - parent = parent.getParentItem(); - } - return new Path( path.toString() ); - } - - /* (non-Javadoc) - * @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, TreeViewer viewer ) throws DebugException { - String[] names = path.segments(); - Tree tree = viewer.getTree(); - TreeItem[] items = tree.getItems(); - List elements = new ArrayList(); - elements.add( viewer.getInput() ); - boolean pathFound = false; - for( int i = 0; i < names.length; i++ ) { - String name = names[i]; - TreeItem item = findItem( name, items ); - if ( item != null ) { - pathFound = true; - elements.add( item.getData() ); - items = item.getItems(); - } - } - if ( pathFound ) { - return new TreePath( elements.toArray() ); - } - return null; - } - - private TreeItem findItem( String name, TreeItem[] items ) { - for( int i = 0; i < items.length; i++ ) { - TreeItem item = items[i]; - if ( item.getText().equals( name ) ) { - return item; - } - } - return null; - } -}