Created a separated 'externaltools' plugin: initial check-in
[phpeclipse.git] / net.sourceforge.phpeclipse.externaltools / src / net / sourceforge / phpdt / externaltools / internal / ui / TreeAndListGroup.java
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 (file)
index 0000000..9da2dea
--- /dev/null
@@ -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;
+               
+       }
+}