|
Lines 17-26
import java.util.HashSet;
Link Here
|
| 17 |
import java.util.LinkedList; |
17 |
import java.util.LinkedList; |
| 18 |
import java.util.Map; |
18 |
import java.util.Map; |
| 19 |
import java.util.Set; |
19 |
import java.util.Set; |
|
|
20 |
import java.util.TreeMap; |
| 20 |
|
21 |
|
| 21 |
import org.eclipse.core.runtime.IStatus; |
22 |
import org.eclipse.core.runtime.IStatus; |
| 22 |
import org.eclipse.debug.internal.ui.viewers.model.InternalTreeModelViewer; |
23 |
import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer; |
| 23 |
import org.eclipse.debug.internal.ui.viewers.model.InternalVirtualTreeModelViewer; |
|
|
| 24 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; |
24 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate; |
| 25 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; |
25 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate; |
| 26 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; |
26 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta; |
|
Lines 32-38
import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateList
Link Here
|
| 32 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; |
32 |
import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta; |
| 33 |
import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy; |
33 |
import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy; |
| 34 |
import org.eclipse.debug.ui.IDebugUIConstants; |
34 |
import org.eclipse.debug.ui.IDebugUIConstants; |
|
|
35 |
import org.eclipse.jface.viewers.ITreeViewerListener; |
| 36 |
import org.eclipse.jface.viewers.TreeExpansionEvent; |
| 35 |
import org.eclipse.jface.viewers.TreePath; |
37 |
import org.eclipse.jface.viewers.TreePath; |
|
|
38 |
import org.eclipse.jface.viewers.TreeViewer; |
| 36 |
import org.eclipse.swt.graphics.Device; |
39 |
import org.eclipse.swt.graphics.Device; |
| 37 |
import org.eclipse.swt.widgets.Display; |
40 |
import org.eclipse.swt.widgets.Display; |
| 38 |
import org.eclipse.tcf.internal.debug.model.TCFLaunch; |
41 |
import org.eclipse.tcf.internal.debug.model.TCFLaunch; |
|
Lines 44-50
import org.eclipse.tcf.protocol.Protocol;
Link Here
|
| 44 |
* Model proxy listeners are debuggers views. |
47 |
* Model proxy listeners are debuggers views. |
| 45 |
*/ |
48 |
*/ |
| 46 |
@SuppressWarnings("restriction") |
49 |
@SuppressWarnings("restriction") |
| 47 |
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Runnable { |
50 |
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Runnable, ITreeViewerListener { |
| 48 |
|
51 |
|
| 49 |
private static final TCFNode[] EMPTY_NODE_ARRAY = new TCFNode[0]; |
52 |
private static final TCFNode[] EMPTY_NODE_ARRAY = new TCFNode[0]; |
| 50 |
|
53 |
|
|
Lines 67-72
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 67 |
private boolean enable_auto_expand; |
70 |
private boolean enable_auto_expand; |
| 68 |
private Set<TCFNode> auto_expand_removed_nodes; |
71 |
private Set<TCFNode> auto_expand_removed_nodes; |
| 69 |
private Set<TCFNode> auto_expand_created_nodes; |
72 |
private Set<TCFNode> auto_expand_created_nodes; |
|
|
73 |
private Map<String, Boolean> auto_expand_user_nodes = new TreeMap<String, Boolean>(); |
| 70 |
|
74 |
|
| 71 |
private final Runnable timer = new Runnable() { |
75 |
private final Runnable timer = new Runnable() { |
| 72 |
|
76 |
|
|
Lines 200-207
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 200 |
super.initialize(viewer); |
204 |
super.initialize(viewer); |
| 201 |
enable_auto_expand = |
205 |
enable_auto_expand = |
| 202 |
IDebugUIConstants.ID_DEBUG_VIEW.equals(getPresentationContext().getId()) && |
206 |
IDebugUIConstants.ID_DEBUG_VIEW.equals(getPresentationContext().getId()) && |
| 203 |
viewer instanceof InternalTreeModelViewer; |
207 |
viewer instanceof IInternalTreeModelViewer; |
| 204 |
viewer.addViewerUpdateListener(update_listener); |
208 |
viewer.addViewerUpdateListener(update_listener); |
|
|
209 |
if (viewer instanceof TreeViewer) { |
| 210 |
((TreeViewer)viewer).addTreeListener(this); |
| 211 |
} |
| 205 |
Protocol.invokeAndWait(new Runnable() { |
212 |
Protocol.invokeAndWait(new Runnable() { |
| 206 |
public void run() { |
213 |
public void run() { |
| 207 |
assert !installed; |
214 |
assert !installed; |
|
Lines 226-231
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 226 |
} |
233 |
} |
| 227 |
}); |
234 |
}); |
| 228 |
viewer.removeViewerUpdateListener(update_listener); |
235 |
viewer.removeViewerUpdateListener(update_listener); |
|
|
236 |
if (viewer instanceof TreeViewer) { |
| 237 |
((TreeViewer)viewer).removeTreeListener(this); |
| 238 |
} |
| 229 |
super.dispose(); |
239 |
super.dispose(); |
| 230 |
} |
240 |
} |
| 231 |
|
241 |
|
|
Lines 281-286
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 281 |
} |
291 |
} |
| 282 |
|
292 |
|
| 283 |
/** |
293 |
/** |
|
|
294 |
* Returns true if stack trace should be expanded upon a suspended event. |
| 295 |
*/ |
| 296 |
boolean getAutoExpandStack(String id) { |
| 297 |
Boolean expand = auto_expand_user_nodes.get(id); |
| 298 |
if (expand == null) { |
| 299 |
expand = Boolean.TRUE; |
| 300 |
auto_expand_user_nodes.put(id, expand); |
| 301 |
} |
| 302 |
return expand; |
| 303 |
} |
| 304 |
|
| 305 |
/** |
| 306 |
* Returns true if stack trace should be expanded upon a suspended event. |
| 307 |
*/ |
| 308 |
void clearAutoExpandStack(String id) { |
| 309 |
auto_expand_user_nodes.remove(id) ; |
| 310 |
} |
| 311 |
|
| 312 |
/** |
| 284 |
* Get current value of the view input. |
313 |
* Get current value of the view input. |
| 285 |
* @return view input object. |
314 |
* @return view input object. |
| 286 |
*/ |
315 |
*/ |
|
Lines 438-445
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 438 |
asyncExec(new Runnable() { |
467 |
asyncExec(new Runnable() { |
| 439 |
public void run() { |
468 |
public void run() { |
| 440 |
if (save_expand_state != null && save_expand_state.size() > 0) { |
469 |
if (save_expand_state != null && save_expand_state.size() > 0) { |
| 441 |
if (viewer instanceof InternalTreeModelViewer) { |
470 |
if (viewer instanceof IInternalTreeModelViewer) { |
| 442 |
InternalTreeModelViewer tree_viwer = (InternalTreeModelViewer)viewer; |
471 |
IInternalTreeModelViewer tree_viwer = (IInternalTreeModelViewer)viewer; |
| 443 |
final Set<String> expanded = new HashSet<String>(); |
472 |
final Set<String> expanded = new HashSet<String>(); |
| 444 |
for (TCFNode node : save_expand_state) { |
473 |
for (TCFNode node : save_expand_state) { |
| 445 |
if (tree_viwer.getExpandedState(node)) expanded.add(node.id); |
474 |
if (tree_viwer.getExpandedState(node)) expanded.add(node.id); |
|
Lines 471-481
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 471 |
asyncExec(new Runnable() { |
500 |
asyncExec(new Runnable() { |
| 472 |
boolean found; |
501 |
boolean found; |
| 473 |
public void run() { |
502 |
public void run() { |
| 474 |
if (viewer instanceof InternalTreeModelViewer) { |
503 |
if (viewer instanceof IInternalTreeModelViewer) { |
| 475 |
found = ((InternalTreeModelViewer)viewer).findElementIndex(TreePath.EMPTY, launch) >= 0; |
504 |
found = ((IInternalTreeModelViewer)viewer).findElementIndex(TreePath.EMPTY, launch) >= 0; |
| 476 |
} |
|
|
| 477 |
else if (viewer instanceof InternalVirtualTreeModelViewer) { |
| 478 |
found = ((InternalVirtualTreeModelViewer)viewer).findElementIndex(TreePath.EMPTY, launch) >= 0; |
| 479 |
} |
505 |
} |
| 480 |
Protocol.invokeLater(new Runnable() { |
506 |
Protocol.invokeLater(new Runnable() { |
| 481 |
public void run() { |
507 |
public void run() { |
|
Lines 566-569
public class TCFModelProxy extends AbstractModelProxy implements IModelProxy, Ru
Link Here
|
| 566 |
launch.removePendingClient(this); |
592 |
launch.removePendingClient(this); |
| 567 |
} |
593 |
} |
| 568 |
} |
594 |
} |
|
|
595 |
|
| 596 |
@Override |
| 597 |
public void treeCollapsed(TreeExpansionEvent event) { |
| 598 |
updateExpandStack(event, false); |
| 599 |
} |
| 600 |
|
| 601 |
@Override |
| 602 |
public void treeExpanded(TreeExpansionEvent event) { |
| 603 |
updateExpandStack(event, true); |
| 604 |
} |
| 605 |
|
| 606 |
private void updateExpandStack(TreeExpansionEvent event, final boolean expand) { |
| 607 |
if (event.getElement() instanceof TCFNodeExecContext) { |
| 608 |
final TCFNodeExecContext node = (TCFNodeExecContext)event.getElement(); |
| 609 |
if ( !model.equals(node.getModel()) ) return; |
| 610 |
Protocol.invokeLater(new Runnable() { |
| 611 |
@Override |
| 612 |
public void run() { |
| 613 |
Boolean hasStack = node.getStackTrace().checkHasChildren(this); |
| 614 |
if (Boolean.TRUE.equals(hasStack)) { |
| 615 |
auto_expand_user_nodes.put(node.id, expand); |
| 616 |
} |
| 617 |
} |
| 618 |
}); |
| 619 |
} |
| 620 |
} |
| 569 |
} |
621 |
} |
| 570 |
- |
|
|