X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/internal/ui/TreeAndListGroup.java b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/internal/ui/TreeAndListGroup.java new file mode 100644 index 0000000..9da2dea --- /dev/null +++ b/net.sourceforge.phpeclipse.externaltools/src/net/sourceforge/phpdt/externaltools/internal/ui/TreeAndListGroup.java @@ -0,0 +1,287 @@ +package net.sourceforge.phpdt.externaltools.internal.ui; + +/********************************************************************** +Copyright (c) 2002 IBM Corp. and others. 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 java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; + +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ITreeContentProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.ViewerSorter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.Tree; + +/** + * This class was derived from org.eclipse.ui.internal.misc.CheckboxTreeAndListGroup + * + */ +public class TreeAndListGroup implements ISelectionChangedListener { + private Object root; + private Object currentTreeSelection; + private Collection listeners = new HashSet(); + + private ITreeContentProvider treeContentProvider; + private IStructuredContentProvider listContentProvider; + private ILabelProvider treeLabelProvider; + private ILabelProvider listLabelProvider; + + // widgets + private TreeViewer treeViewer; + private TableViewer listViewer; + private boolean allowMultiselection= false; + + /** + * Create an instance of this class. Use this constructor if you wish to specify + * the width and/or height of the combined widget (to only hardcode one of the + * sizing dimensions, specify the other dimension's value as -1) + * + * @param parent org.eclipse.swt.widgets.Composite + * @param style int + * @param rootObject java.lang.Object + * @param childPropertyName java.lang.String + * @param parentPropertyName java.lang.String + * @param listPropertyName java.lang.String + * @param width int + * @param height int + */ + public TreeAndListGroup(Composite parent, Object rootObject, ITreeContentProvider treeContentProvider, ILabelProvider treeLabelProvider, IStructuredContentProvider listContentProvider, ILabelProvider listLabelProvider, int style, int width, int height) { + + root = rootObject; + this.treeContentProvider = treeContentProvider; + this.listContentProvider = listContentProvider; + this.treeLabelProvider = treeLabelProvider; + this.listLabelProvider = listLabelProvider; + createContents(parent, width, height, style); + } + /** + * This method must be called just before this window becomes visible. + */ + public void aboutToOpen() { + currentTreeSelection = null; + + //select the first element in the list + Object[] elements = treeContentProvider.getElements(root); + Object primary = elements.length > 0 ? elements[0] : null; + if (primary != null) { + treeViewer.setSelection(new StructuredSelection(primary)); + } + treeViewer.getControl().setFocus(); + } + /** + * Add the passed listener to collection of clients + * that listen for changes to list viewer selection state + * + * @param listener ISelectionChangedListener + */ + public void addSelectionChangedListener(ISelectionChangedListener listener) { + listeners.add(listener); + } + + /** + * Notify all checked state listeners that the passed element + *has had its checked state changed to the passed state + */ + protected void notifySelectionListeners(SelectionChangedEvent event) { + Iterator listenersEnum = listeners.iterator(); + while (listenersEnum.hasNext()) { + ((ISelectionChangedListener) listenersEnum.next()).selectionChanged(event); + } + } + + /** + * Lay out and initialize self's visual components. + * + * @param parent org.eclipse.swt.widgets.Composite + * @param width int + * @param height int + */ + protected void createContents(Composite parent, int width, int height, int style) { + // group pane + Composite composite = new Composite(parent, style); + composite.setFont(parent.getFont()); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + layout.makeColumnsEqualWidth = true; + layout.marginHeight = 0; + layout.marginWidth = 0; + composite.setLayout(layout); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + + createTreeViewer(composite, width / 2, height); + createListViewer(composite, width / 2, height); + + initialize(); + } + /** + * Create this group's list viewer. + */ + protected void createListViewer(Composite parent, int width, int height) { + int style; + if (allowMultiselection) { + style= SWT.MULTI; + } else { + style= SWT.SINGLE; + } + listViewer = new TableViewer(parent, SWT.BORDER | style); + GridData data = new GridData(GridData.FILL_BOTH); + data.widthHint = width; + data.heightHint = height; + listViewer.getTable().setLayoutData(data); + listViewer.getTable().setFont(parent.getFont()); + listViewer.setContentProvider(listContentProvider); + listViewer.setLabelProvider(listLabelProvider); + listViewer.addSelectionChangedListener(new ISelectionChangedListener() { + public void selectionChanged(SelectionChangedEvent event) { + notifySelectionListeners(event); + } + }); + } + /** + * Create this group's tree viewer. + */ + protected void createTreeViewer(Composite parent, int width, int height) { + Tree tree = new Tree(parent, SWT.BORDER); + GridData data = new GridData(GridData.FILL_BOTH); + data.widthHint = width; + data.heightHint = height; + tree.setLayoutData(data); + tree.setFont(parent.getFont()); + + treeViewer = new TreeViewer(tree); + treeViewer.setContentProvider(treeContentProvider); + treeViewer.setLabelProvider(treeLabelProvider); + treeViewer.addSelectionChangedListener(this); + } + + public Table getListTable() { + return listViewer.getTable(); + } + + public IStructuredSelection getListTableSelection() { + ISelection selection= this.listViewer.getSelection(); + if (selection instanceof IStructuredSelection) { + return (IStructuredSelection)selection; + } else { + return StructuredSelection.EMPTY; + } + } + + protected void initialListItem(Object element) { + Object parent = treeContentProvider.getParent(element); + selectAndRevealFolder(parent); + } + + public void selectAndRevealFolder(Object treeElement) { + treeViewer.reveal(treeElement); + IStructuredSelection selection = new StructuredSelection(treeElement); + treeViewer.setSelection(selection); + } + + public void selectAndRevealFile(Object treeElement) { + listViewer.reveal(treeElement); + IStructuredSelection selection = new StructuredSelection(treeElement); + listViewer.setSelection(selection); + } + + /** + * Initialize this group's viewers after they have been laid out. + */ + protected void initialize() { + treeViewer.setInput(root); + } + + /** + * Handle the selection of an item in the tree viewer + * + * @param selection ISelection + */ + public void selectionChanged(SelectionChangedEvent event) { + IStructuredSelection selection = (IStructuredSelection) event.getSelection(); + Object selectedElement = selection.getFirstElement(); + if (selectedElement == null) { + currentTreeSelection = null; + listViewer.setInput(currentTreeSelection); + return; + } + + // ie.- if not an item deselection + if (selectedElement != currentTreeSelection) { + listViewer.setInput(selectedElement); + } + + currentTreeSelection = selectedElement; + } + /** + * Set the list viewer's providers to those passed + * + * @param contentProvider ITreeContentProvider + * @param labelProvider ILabelProvider + */ + public void setListProviders(IStructuredContentProvider contentProvider, ILabelProvider labelProvider) { + listViewer.setContentProvider(contentProvider); + listViewer.setLabelProvider(labelProvider); + } + /** + * Set the sorter that is to be applied to self's list viewer + */ + public void setListSorter(ViewerSorter sorter) { + listViewer.setSorter(sorter); + } + /** + * Set the root of the widget to be new Root. Regenerate all of the tables and lists from this + * value. + * @param newRoot + */ + public void setRoot(Object newRoot) { + this.root = newRoot; + initialize(); + } + + /** + * Set the tree viewer's providers to those passed + * + * @param contentProvider ITreeContentProvider + * @param labelProvider ILabelProvider + */ + public void setTreeProviders(ITreeContentProvider contentProvider, ILabelProvider labelProvider) { + treeViewer.setContentProvider(contentProvider); + treeViewer.setLabelProvider(labelProvider); + } + /** + * Set the sorter that is to be applied to self's tree viewer + */ + public void setTreeSorter(ViewerSorter sorter) { + treeViewer.setSorter(sorter); + } + + /** + * Set the focus on to the list widget. + */ + public void setFocus() { + + this.treeViewer.getTree().setFocus(); + } + + public void setAllowMultiselection(boolean allowMultiselection) { + this.allowMultiselection= allowMultiselection; + + } +}