/******************************************************************************* * Copyright (c) 2000, 2015 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.jdt.internal.debug.ui.propertypages; 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.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; 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.widgets.Composite; import org.eclipse.swt.widgets.Label; /** * */ public class InstanceFilterEditor { private IJavaBreakpoint fBreakpoint; private CheckboxTableViewer fInstanceViewer; private Composite fParent; private InstanceFilterContentProvider fContentProvider; private CheckHandler fCheckHandler; public InstanceFilterEditor(Composite parent, IJavaBreakpoint breakpoint) { fBreakpoint= breakpoint; fContentProvider= new InstanceFilterContentProvider(); fCheckHandler= new CheckHandler(); Label label= new Label(parent, SWT.NONE); label.setFont(parent.getFont()); label.setText(PropertyPageMessages.InstanceFilterEditor_0); fParent= parent; //fOuter= new Composite(parent, SWT.NONE); //fOuter.setFont(parent.getFont()); //GridLayout layout = new GridLayout(); //layout.marginWidth = 0; //layout.marginHeight = 0; //layout.numColumns = 2; //fOuter.setLayout(layout); //GridData data= new GridData(GridData.FILL_BOTH); //fOuter.setLayoutData(data); createViewer(); } /** * Create and initialize the thread filter tree viewer. */ protected void createViewer() { GridData data= new GridData(GridData.FILL_BOTH); data.heightHint= 100; fInstanceViewer= CheckboxTableViewer.newCheckList(fParent, SWT.BORDER); fInstanceViewer.addCheckStateListener(fCheckHandler); fInstanceViewer.getTable().setLayoutData(data); fInstanceViewer.setContentProvider(fContentProvider); IDebugModelPresentation pres = DebugUITools.newDebugModelPresentation(); pres.setAttribute(JDIModelPresentation.DISPLAY_QUALIFIED_NAMES, 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); } } 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); } } class CheckHandler implements ICheckStateListener { @Override 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) */ @Override 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) */ @Override public Object getParent(Object element) { if (element instanceof IJavaObject) { return fBreakpoint; } return null; } /** * @see ITreeContentProvider#hasChildren(Object) */ @Override public boolean hasChildren(Object element) { if (element instanceof IJavaBreakpoint) { return getChildren(element).length > 0; } return false; } /** * @see IStructuredContentProvider#getElements(Object) */ @Override public Object[] getElements(Object inputElement) { return getChildren(inputElement); } /** * @see IContentProvider#dispose() */ @Override public void dispose() { } /** * @see IContentProvider#inputChanged(Viewer, Object, Object) */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } }