blob: 2f1904f1f87cba5137cba3636849f226b7d561fa [file] [log] [blame]
package org.eclipse.jdt.internal.debug.ui.actions;
/**********************************************************************
Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
This file is made available under the terms of the Common Public License v1.0
which accompanies this distribution, and is available at
http://www.eclipse.org/legal/cpl-v10.html
**********************************************************************/
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugModelPresentation;
import org.eclipse.jdt.debug.core.IJavaBreakpoint;
import org.eclipse.jdt.debug.core.IJavaObject;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.JDIModelPresentation;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
/**
* An instance filter viewer is a field editor which
* allows the user to configure instance filters for a given
* breakpoint.
*/
public class InstanceFilterViewer extends FieldEditor {
private IJavaBreakpoint fBreakpoint;
private CheckboxTableViewer fInstanceViewer;
private Composite fOuter;
private InstanceFilterContentProvider fContentProvider;
private CheckHandler fCheckHandler;
public InstanceFilterViewer(Composite parent, IJavaBreakpoint breakpoint) {
fBreakpoint= breakpoint;
fContentProvider= new InstanceFilterContentProvider();
fCheckHandler= new CheckHandler();
init(JavaBreakpointPreferenceStore.INSTANCE_FILTER, ActionMessages.getString("InstanceFilterViewer.Restricted_to_Selected_Ob&ject(s)_1")); //$NON-NLS-1$
createControl(parent);
}
/**
* Create and initialize the thread filter tree viewer.
*/
protected void createViewer() {
GridData data= new GridData(GridData.FILL_BOTH);
data.heightHint= 100;
fInstanceViewer= CheckboxTableViewer.newCheckList(fOuter, SWT.BORDER);
fInstanceViewer.addCheckStateListener(fCheckHandler);
fInstanceViewer.getTable().setLayoutData(data);
fInstanceViewer.setContentProvider(fContentProvider);
IDebugModelPresentation pres = DebugUITools.newDebugModelPresentation();
pres.setAttribute(JDIModelPresentation.DISPLAY_QUALIFIED_NAMES, new Boolean(true));
fInstanceViewer.setLabelProvider(pres);
fInstanceViewer.setInput(fBreakpoint);
setInitialCheckedState();
}
/**
* Sets the initial checked state of the tree viewer.
* The initial state should reflect the current state
* of the breakpoint. If the breakpoint has a thread
* filter in a given thread, that thread should be
* checked.
*/
protected void setInitialCheckedState() {
try {
IJavaObject[] objects = fBreakpoint.getInstanceFilters();
for (int i= 0; i < objects.length; i++) {
fCheckHandler.checkObject(objects[i], true);
}
} catch (CoreException e) {
JDIDebugUIPlugin.log(e);
}
}
/**
* @see FieldEditor#adjustForNumColumns(int)
*/
protected void adjustForNumColumns(int numColumns) {
((GridData) fOuter.getLayoutData()).horizontalSpan = numColumns;
}
/**
* @see FieldEditor#doFillIntoGrid(Composite, int)
*/
protected void doFillIntoGrid(Composite parent, int numColumns) {
fOuter= new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.numColumns = numColumns;
fOuter.setLayout(layout);
GridData data= new GridData(GridData.FILL_BOTH);
fOuter.setLayoutData(data);
data = new GridData();
data.horizontalSpan = numColumns;
getLabelControl(fOuter).setLayoutData(data);
createViewer();
}
/**
* @see FieldEditor#doLoad()
*/
protected void doLoad() {
}
/**
* @see FieldEditor#doLoadDefault()
*/
protected void doLoadDefault() {
}
/**
* @see FieldEditor#doStore()
*/
protected void doStore() {
try {
IJavaObject[] objects = fBreakpoint.getInstanceFilters();
for (int i= 0; i < objects.length; i++) {
if (!fInstanceViewer.getChecked(objects[i])) {
fBreakpoint.removeInstanceFilter(objects[i]);
}
}
} catch (CoreException e) {
JDIDebugUIPlugin.log(e);
}
}
/**
* @see FieldEditor#getNumberOfControls()
*/
public int getNumberOfControls() {
return 1;
}
class CheckHandler implements ICheckStateListener {
public void checkStateChanged(CheckStateChangedEvent event) {
fInstanceViewer.setChecked(event.getElement(), event.getChecked());
}
public void checkObject(IJavaObject object, boolean checked) {
fInstanceViewer.setChecked(object, checked);
}
}
class InstanceFilterContentProvider implements ITreeContentProvider {
/**
* @see ITreeContentProvider#getChildren(Object)
*/
public Object[] getChildren(Object parent) {
if (parent instanceof IJavaBreakpoint) {
try {
return ((IJavaBreakpoint)parent).getInstanceFilters();
} catch (CoreException e) {
JDIDebugUIPlugin.log(e);
}
}
return new Object[0];
}
/**
* @see ITreeContentProvider#getParent(Object)
*/
public Object getParent(Object element) {
if (element instanceof IJavaObject) {
return fBreakpoint;
}
return null;
}
/**
* @see ITreeContentProvider#hasChildren(Object)
*/
public boolean hasChildren(Object element) {
if (element instanceof IJavaBreakpoint) {
return getChildren(element).length > 0;
}
return false;
}
/**
* @see IStructuredContentProvider#getElements(Object)
*/
public Object[] getElements(Object inputElement) {
return getChildren(inputElement);
}
/**
* @see IContentProvider#dispose()
*/
public void dispose() {
}
/**
* @see IContentProvider#inputChanged(Viewer, Object, Object)
*/
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
}