blob: dc5047412150f54acfef785be8667edf82875bbb [file] [log] [blame]
package org.eclipse.debug.internal.ui;
/*
* Licensed Materials - Property of IBM,
* WebSphere Studio Workbench
* (c) Copyright IBM Corp 2000
*/
import org.eclipse.debug.core.model.IStackFrame;
import org.eclipse.debug.core.model.IThread;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Tree;
/**
* The launches viewer displays a tree of launches. It can be
* configured to display run launches or debug launches. When
* displaying run launches, it filters debug targets from the viewer.
* When displaying debug launches, debug targets are displayed,
* and the debug target's corresponding system process is filtered
* from the view.
*/
public class LaunchesViewer extends TreeViewer {
/**
* The view this viewer is contained in
*/
protected LaunchesView fView;
public LaunchesViewer(Composite parent, boolean showDebugTargets, LaunchesView view) {
super(new Tree(parent, SWT.MULTI));
fView= view;
LaunchesViewerFilter filter= new LaunchesViewerFilter(showDebugTargets);
addFilter(filter);
setUseHashlookup(true);
}
/**
* Update the buttons in my view
*/
protected void updateButtons() {
fView.updateButtons();
}
protected void updateMarkerForSelection() {
// update the instruction pointer
if (fView instanceof DebugView) {
((DebugView) fView).showMarkerForCurrentSelection();
}
}
/**
* Only sets selection if it is different from the current selection
*/
public void setSelection(ISelection selection, boolean reveal) {
if (selection instanceof IStructuredSelection) {
IStructuredSelection ss= (IStructuredSelection)selection;
Object element= ss.getFirstElement();
ISelection oldSelection= getSelection();
if (oldSelection instanceof IStructuredSelection) {
if (element != null) {
IStructuredSelection oldss= (IStructuredSelection)oldSelection;
Object oldElement= oldss.getFirstElement();
if (element.equals(oldElement)) {
if (element instanceof IStackFrame) {
//update source selection only...line number change
((DebugView)fView).showMarkerForCurrentSelection();
} else if (element instanceof IThread) {
((DebugView)fView).updateButtons();
}
return;
}
}
}
}
super.setSelection(selection, reveal);
}
protected void clearSourceSelection() {
if (fView instanceof DebugView) {
((DebugView)fView).clearSourceSelection();
}
}
}