Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 119025
Collapse All | Expand All

(-)ui/org/eclipse/debug/internal/ui/views/variables/ViewerState.java (-28 / +48 lines)
Lines 30-35 Link Here
30
 */
30
 */
31
public class ViewerState extends AbstractViewerState {
31
public class ViewerState extends AbstractViewerState {
32
32
33
	public ViewerState() {
34
	}
35
	
33
	/**
36
	/**
34
	 * Constructs a memento for the given viewer.
37
	 * Constructs a memento for the given viewer.
35
	 */
38
	 */
Lines 41-52 Link Here
41
	 * @see org.eclipse.debug.internal.ui.views.AbstractViewerState#encodeElement(org.eclipse.swt.widgets.TreeItem)
44
	 * @see org.eclipse.debug.internal.ui.views.AbstractViewerState#encodeElement(org.eclipse.swt.widgets.TreeItem)
42
	 */
45
	 */
43
	protected IPath encodeElement(TreeItem item) throws DebugException {
46
	protected IPath encodeElement(TreeItem item) throws DebugException {
44
		StringBuffer path = new StringBuffer(item.getText());
47
		StringBuffer path = new StringBuffer();
45
		TreeItem parent = item.getParentItem();
48
		TreeItem parent = item.getParentItem();
46
		while (parent != null) {
49
		while (parent != null) {
47
			path.insert(0, parent.getText()+'/');
50
			int i = parent.indexOf(item);
48
			parent = parent.getParentItem();
51
			path.insert(0, i);
52
			path.insert(0, '/');
53
			item = parent;
54
			parent = item.getParentItem();
49
		}
55
		}
56
		Tree tree = item.getParent();
57
		int i = tree.indexOf(item);
58
		path.insert(0, i);
50
		return new Path(path.toString());
59
		return new Path(path.toString());
51
	}
60
	}
52
61
Lines 55-94 Link Here
55
	 *      org.eclipse.jface.viewers.TreeViewer)
64
	 *      org.eclipse.jface.viewers.TreeViewer)
56
	 */
65
	 */
57
	protected TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException {
66
	protected TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException {
58
		String[] names = path.segments();
67
		String[] indicies = path.segments();
59
		Tree tree = viewer.getTree();
68
		Tree tree = viewer.getTree();
60
		TreeItem[] items = tree.getItems();
69
		int index = -1;
70
		try {
71
			index = Integer.parseInt(indicies[0]);
72
		} catch (NumberFormatException e) {
73
			return null;
74
		}
75
		TreeItem item = null;
76
		if (index < tree.getItemCount()) {
77
			item = tree.getItem(index);
78
		} else {
79
			return null;
80
		}
61
		
81
		
62
		List elements = new ArrayList();
82
		List elements = new ArrayList();
63
		elements.add(viewer.getInput());
83
		elements.add(viewer.getInput());
64
		
84
		Object element = item.getData();
65
		boolean pathFound = false;
85
		if (element != null) {
66
		
86
			elements.add(element);
67
		for (int i = 0; i < names.length; i++) {
87
		} else {
68
			String name = names[i];
88
			return null;
69
			TreeItem item = findItem(name, items);
70
			if (item != null) {
71
				pathFound = true;
72
				elements.add(item.getData());
73
				items = item.getItems();
74
			}
75
		}
89
		}
76
		
90
		
77
		if (pathFound) {
91
		for (int i = 1; i < indicies.length; i++) {
78
			return new TreePath(elements.toArray());
92
			try {
93
				index = Integer.parseInt(indicies[i]);
94
			} catch (NumberFormatException e) {
95
				return null;
96
			}	
97
			if (index < item.getItemCount()) {
98
				item = item.getItem(index);
99
			} else {
100
				return null;
101
			}		
102
			element = item.getData();
103
			if (element != null) {
104
				elements.add(element);
105
			} else {
106
				return null;
107
			}			
79
		}
108
		}
80
		
109
		
81
		return null;
110
		return new TreePath(elements.toArray());
82
	}
111
	}
83
112
84
	private TreeItem findItem(String name, TreeItem[] items) {
85
		for (int i = 0; i < items.length; i++) {
86
			TreeItem item = items[i];
87
			if (item.getText().equals(name)) {
88
				return item;
89
			}
90
		}
91
		return null;
92
	}
93
113
94
}
114
}
(-)ui/org/eclipse/debug/internal/ui/views/variables/VariablesView.java (-1 / +3 lines)
Lines 478-484 Link Here
478
                if (state == null) {
478
                if (state == null) {
479
                    // attempt to restore selection/expansion based on last
479
                    // attempt to restore selection/expansion based on last
480
                    // frame
480
                    // frame
481
                    state = fLastState;
481
                	if (fLastState != null) {
482
                		state = (AbstractViewerState) fLastState.clone();
483
                	}
482
                }
484
                }
483
                if (state != null) {
485
                if (state != null) {
484
                    state.restoreState(viewer);
486
                    state.restoreState(viewer);
(-)ui/org/eclipse/debug/internal/ui/views/AbstractViewerState.java (-2 / +36 lines)
Lines 11-19 Link Here
11
package org.eclipse.debug.internal.ui.views;
11
package org.eclipse.debug.internal.ui.views;
12
12
13
import java.util.ArrayList;
13
import java.util.ArrayList;
14
import java.util.Iterator;
14
import java.util.List;
15
import java.util.List;
15
16
16
import org.eclipse.core.runtime.IPath;
17
import org.eclipse.core.runtime.IPath;
18
import org.eclipse.core.runtime.Path;
17
import org.eclipse.debug.core.DebugException;
19
import org.eclipse.debug.core.DebugException;
18
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
20
import org.eclipse.debug.internal.ui.viewers.AsynchronousTreeViewer;
19
import org.eclipse.jface.viewers.TreePath;
21
import org.eclipse.jface.viewers.TreePath;
Lines 24-35 Link Here
24
 * The abstract superclass for mementos of the expanded and 
26
 * The abstract superclass for mementos of the expanded and 
25
 * selected items in a tree viewer.
27
 * selected items in a tree viewer.
26
 */
28
 */
27
public abstract class AbstractViewerState {
29
public abstract class AbstractViewerState implements Cloneable {
28
30
29
	// paths to expanded elements
31
	// paths to expanded elements
30
	private List fSavedExpansion = null;
32
	private List fSavedExpansion = null;
31
	private IPath[] fSelection;
33
	private IPath[] fSelection;
32
	
34
	
35
	public AbstractViewerState() {
36
	}
37
	
33
	/**
38
	/**
34
	 * Constructs a memento for the given viewer.
39
	 * Constructs a memento for the given viewer.
35
	 */
40
	 */
Lines 178-181 Link Here
178
	 */
183
	 */
179
	protected abstract TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException;
184
	protected abstract TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException;
180
185
181
}
186
	/* (non-Javadoc)
187
	 * @see java.lang.Object#clone()
188
	 */
189
	public Object clone() {
190
		AbstractViewerState clone = null;
191
		try {
192
			clone = (AbstractViewerState) this.getClass().newInstance();
193
		} catch (InstantiationException e) {
194
			return null;
195
		} catch (IllegalAccessException e) {
196
			return null;
197
		}
198
		if (fSavedExpansion != null) {
199
			clone.fSavedExpansion = new ArrayList(fSavedExpansion.size());
200
			Iterator iterator = fSavedExpansion.iterator();
201
			while (iterator.hasNext()) {
202
				IPath path = (IPath) iterator.next();
203
				IPath clonePath = Path.fromPortableString(path.toPortableString());
204
				clone.fSavedExpansion.add(clonePath);
205
			}
206
		}
207
		if (fSelection != null) {
208
			clone.fSelection = new IPath[fSelection.length];
209
			for (int i = 0; i < fSelection.length; i++) {
210
				clone.fSelection[i] = Path.fromPortableString(fSelection[i].toPortableString());
211
			}
212
		}
213
		return clone;
214
	}
215
}
(-)ui/org/eclipse/debug/internal/ui/views/memory/MemoryBlocksTreeViewPane.java (-1 / +13 lines)
Lines 243-252 Link Here
243
		}
243
		}
244
	}
244
	}
245
	
245
	
246
	class MemoryViewerState extends ViewerState
246
	class MemoryViewerState extends ViewerState implements Cloneable
247
	{
247
	{
248
		private Hashtable fPathMap = new Hashtable(); 
248
		private Hashtable fPathMap = new Hashtable(); 
249
		private AsynchronousTreeViewer fViewer;
249
		private AsynchronousTreeViewer fViewer;
250
		
251
		public MemoryViewerState() {}
250
		public MemoryViewerState(AsynchronousTreeViewer viewer) {
252
		public MemoryViewerState(AsynchronousTreeViewer viewer) {
251
			super(viewer);
253
			super(viewer);
252
			fViewer = viewer;
254
			fViewer = viewer;
Lines 270-275 Link Here
270
		protected TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException {
272
		protected TreePath decodePath(IPath path, AsynchronousTreeViewer viewer) throws DebugException {
271
			return (TreePath)fPathMap.get(path);
273
			return (TreePath)fPathMap.get(path);
272
		}
274
		}
275
		
276
		/* (non-Javadoc)
277
		 * @see org.eclipse.debug.internal.ui.views.AbstractViewerState#clone()
278
		 */
279
		public Object clone() {
280
			MemoryViewerState clone = (MemoryViewerState) super.clone();
281
			clone.fViewer = fViewer;
282
			clone.fPathMap = fPathMap;
283
			return clone;
284
		}
273
	}
285
	}
274
	
286
	
275
	class TreeViewPaneContextListener implements IDebugContextListener
287
	class TreeViewPaneContextListener implements IDebugContextListener

Return to bug 119025