Revert "Bug 436505: Delete TableTreeViewer and related classes / methods"
This reverts commit acc23e29d806cf7d41343e2875138928000c8bff. (partially)
This reverts commit ff96babf6170beb3d09ce75be275d056c395f80c.
This reverts commit 34d2d0feefa3f2f2425263452713a3ce6fe30811.
This reverts commit 818b28b3479a6c0265217b4413cb8991caea2f39.
This reverts commit dd4a2a1bbd9a020f867acfc4c0828677b8a730a3.
This reverts commit 76e603249523a1a322c65f27b6cc3a03cece8c0a.
Change-Id: Ie26616e381b3f25a21cf8e283cca4a410c388699
diff --git a/bundles/org.eclipse.jface/.settings/.api_filters b/bundles/org.eclipse.jface/.settings/.api_filters
deleted file mode 100644
index bd75c42..0000000
--- a/bundles/org.eclipse.jface/.settings/.api_filters
+++ /dev/null
@@ -1,51 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.jface" version="2">
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.jface.viewers.TableTreeViewer">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305324134">
- <message_arguments>
- <message_argument value="org.eclipse.jface.viewers.TableTreeViewer"/>
- <message_argument value="org.eclipse.jface_3.12.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTree">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTree"/>
- <message_argument value="org.eclipse.jface_3.11.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTreeEditor">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTreeEditor"/>
- <message_argument value="org.eclipse.jface_3.11.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTreeItem">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTreeItem"/>
- <message_argument value="org.eclipse.jface_3.11.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/jface/viewers/StructuredViewer.java" type="org.eclipse.jface.viewers.StructuredViewer$ColorAndFontCollector">
- <filter comment="Bug 475833: Delete TableTree and related items" id="338792546">
- <message_arguments>
- <message_argument value="org.eclipse.jface.viewers.StructuredViewer.ColorAndFontCollector"/>
- <message_argument value="applyFontsAndColors(TableTreeItem)"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="src/org/eclipse/jface/viewers/StructuredViewer.java" type="org.eclipse.jface.viewers.StructuredViewer$ColorAndFontCollectorWithProviders">
- <filter comment="Bug 475833: Delete TableTree and related items" id="338792546">
- <message_arguments>
- <message_argument value="org.eclipse.jface.viewers.StructuredViewer.ColorAndFontCollectorWithProviders"/>
- <message_argument value="applyFontsAndColors(TableTreeItem)"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
index d4caa29..6bac384 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/util/OpenStrategy.java
@@ -10,8 +10,9 @@
*******************************************************************************/
package org.eclipse.jface.util;
-import org.eclipse.core.runtime.ListenerList;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableTree;
+import org.eclipse.swt.custom.TableTreeItem;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Point;
@@ -25,6 +26,8 @@
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.swt.widgets.Widget;
+import org.eclipse.core.runtime.ListenerList;
+
/**
* Implementation of single-click and double-click strategies.
* <p>
@@ -468,6 +471,13 @@
table.setSelection(new TableItem[] { item });
}
selEvent.item = item;
+ } else if (w instanceof TableTree) {
+ TableTree table = (TableTree) w;
+ TableTreeItem item = table.getItem(new Point(e.x, e.y));
+ if (item != null) {
+ table.setSelection(new TableTreeItem[] { item });
+ }
+ selEvent.item = item;
} else {
return;
}
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColorCellEditor.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColorCellEditor.java
index 37a47b3..c6bcee6 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColorCellEditor.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColorCellEditor.java
@@ -11,6 +11,7 @@
package org.eclipse.jface.viewers;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableTree;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.FontMetrics;
import org.eclipse.swt.graphics.GC;
@@ -149,6 +150,8 @@
extent = ((Table) w).getItemHeight() - 1;
} else if (w instanceof Tree) {
extent = ((Tree) w).getItemHeight() - 1;
+ } else if (w instanceof TableTree) {
+ extent = ((TableTree) w).getItemHeight() - 1;
}
if (size > extent) {
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
index 40805d8..6a46885 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ColumnViewer.java
@@ -83,8 +83,8 @@
* the control you want to hook on
*/
protected void hookEditingSupport(Control control) {
- // Needed for backwards comp with AbstractTreeViewer
- // which is not hooked this way others may already overwrite and provide
+ // Needed for backwards comp with AbstractTreeViewer and TableTreeViewer
+ // who are not hooked this way others may already overwrite and provide
// their
// own impl
if (viewerEditor != null) {
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
index 02927c5..2738e12 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/StructuredViewer.java
@@ -26,6 +26,7 @@
import org.eclipse.jface.util.Policy;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableTreeItem;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DragSourceListener;
import org.eclipse.swt.dnd.DropTarget;
@@ -269,6 +270,39 @@
clear();
}
+ @Override
+ public void applyFontsAndColors(TableTreeItem control) {
+
+ if(colorProvider == null){
+ if(usedDecorators){
+ //If there is no provider only apply set values
+ if(background != null) {
+ control.setBackground(background);
+ }
+
+ if(foreground != null) {
+ control.setForeground(foreground);
+ }
+ }
+ }
+ else{
+ //Always set the value if there is a provider
+ control.setBackground(background);
+ control.setForeground(foreground);
+ }
+
+ if(fontProvider == null){
+ if(usedDecorators && font != null) {
+ control.setFont(font);
+ }
+ } else {
+ control.setFont(font);
+ }
+
+ clear();
+ }
+
+
}
/**
@@ -370,6 +404,29 @@
}
/**
+ * Apply the fonts and colors to the control if
+ * required.
+ * @param control
+ */
+ public void applyFontsAndColors(TableTreeItem control) {
+ if(usedDecorators){
+ //If there is no provider only apply set values
+ if(background != null) {
+ control.setBackground(background);
+ }
+
+ if(foreground != null) {
+ control.setForeground(foreground);
+ }
+
+ if(font != null) {
+ control.setFont(font);
+ }
+ }
+ clear();
+ }
+
+ /**
* Set the background color.
* @param background
*/
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableTreeViewer.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableTreeViewer.java
new file mode 100644
index 0000000..239f469
--- /dev/null
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableTreeViewer.java
@@ -0,0 +1,800 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2014 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
+ * Tom Schindl <tom.schindl@bestsolution.at> - bug 153993
+ *******************************************************************************/
+
+package org.eclipse.jface.viewers;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableTree;
+import org.eclipse.swt.custom.TableTreeEditor;
+import org.eclipse.swt.custom.TableTreeItem;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.FocusListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.TreeListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Item;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Widget;
+
+/**
+ * A concrete viewer based on a SWT <code>TableTree</code> control.
+ * <p>
+ * This class is not intended to be subclassed outside the viewer framework. It
+ * is designed to be instantiated with a pre-existing SWT table tree control and
+ * configured with a domain-specific content provider, label provider, element
+ * filter (optional), and element sorter (optional).
+ * </p>
+ * <p>
+ * Content providers for table tree viewers must implement the
+ * <code>ITreeContentProvider</code> interface.
+ * </p>
+ * <p>
+ * Label providers for table tree viewers must implement either the
+ * <code>ITableLabelProvider</code> or the <code>ILabelProvider</code>
+ * interface (see <code>TableTreeViewer.setLabelProvider</code> for more
+ * details).
+ * </p>
+ *
+ * @deprecated As of 3.1 use {@link TreeViewer} instead
+ * @noextend This class is not intended to be subclassed by clients.
+ */
+@Deprecated
+public class TableTreeViewer extends AbstractTreeViewer {
+ /**
+ * Internal table viewer implementation.
+ */
+ private TableTreeEditorImpl tableEditorImpl;
+
+ /**
+ * This viewer's table tree control.
+ */
+ private TableTree tableTree;
+
+ /**
+ * This viewer's table tree editor.
+ */
+ private TableTreeEditor tableTreeEditor;
+
+ /**
+ * Copied from original TableEditorImpl and moved here since refactoring
+ * completely wiped out the original implementation in 3.3
+ *
+ * @since 3.1
+ */
+ class TableTreeEditorImpl {
+
+ private CellEditor cellEditor;
+
+ private CellEditor[] cellEditors;
+
+ private ICellModifier cellModifier;
+
+ private String[] columnProperties;
+
+ private Item tableItem;
+
+ private int columnNumber;
+
+ private ICellEditorListener cellEditorListener;
+
+ private FocusListener focusListener;
+
+ private MouseListener mouseListener;
+
+ private int doubleClickExpirationTime;
+
+ private ColumnViewer viewer;
+
+ private TableTreeEditorImpl(ColumnViewer viewer) {
+ this.viewer = viewer;
+ initCellEditorListener();
+ }
+
+ /**
+ * Returns this <code>TableViewerImpl</code> viewer
+ *
+ * @return the viewer
+ */
+ public ColumnViewer getViewer() {
+ return viewer;
+ }
+
+ private void activateCellEditor() {
+ if( cellEditors != null ) {
+ if( cellEditors[columnNumber] != null && cellModifier != null ) {
+ Object element = tableItem.getData();
+ String property = columnProperties[columnNumber];
+
+ if( cellModifier.canModify(element, property) ) {
+ cellEditor = cellEditors[columnNumber];
+
+ cellEditor.addListener(cellEditorListener);
+
+ Object value = cellModifier.getValue(element, property);
+ cellEditor.setValue(value);
+ // Tricky flow of control here:
+ // activate() can trigger callback to cellEditorListener
+ // which will clear cellEditor
+ // so must get control first, but must still call activate()
+ // even if there is no control.
+ final Control control = cellEditor.getControl();
+ cellEditor.activate();
+ if (control == null) {
+ return;
+ }
+ setLayoutData(cellEditor.getLayoutData());
+ setEditor(control, tableItem, columnNumber);
+ cellEditor.setFocus();
+ if (focusListener == null) {
+ focusListener = new FocusAdapter() {
+ @Override
+ public void focusLost(FocusEvent e) {
+ applyEditorValue();
+ }
+ };
+ }
+ control.addFocusListener(focusListener);
+ mouseListener = new MouseAdapter() {
+ @Override
+ public void mouseDown(MouseEvent e) {
+ // time wrap?
+ // check for expiration of doubleClickTime
+ if (e.time <= doubleClickExpirationTime) {
+ control.removeMouseListener(mouseListener);
+ cancelEditing();
+ handleDoubleClickEvent();
+ } else if (mouseListener != null) {
+ control.removeMouseListener(mouseListener);
+ }
+ }
+ };
+ control.addMouseListener(mouseListener);
+ }
+ }
+ }
+ }
+
+ /**
+ * Activate a cell editor for the given mouse position.
+ */
+ private void activateCellEditor(MouseEvent event) {
+ if (tableItem == null || tableItem.isDisposed()) {
+ // item no longer exists
+ return;
+ }
+ int columnToEdit;
+ int columns = getColumnCount();
+ if (columns == 0) {
+ // If no TableColumn, Table acts as if it has a single column
+ // which takes the whole width.
+ columnToEdit = 0;
+ } else {
+ columnToEdit = -1;
+ for (int i = 0; i < columns; i++) {
+ Rectangle bounds = getBounds(tableItem, i);
+ if (bounds.contains(event.x, event.y)) {
+ columnToEdit = i;
+ break;
+ }
+ }
+ if (columnToEdit == -1) {
+ return;
+ }
+ }
+
+ columnNumber = columnToEdit;
+ activateCellEditor();
+ }
+
+ /**
+ * Deactivates the currently active cell editor.
+ */
+ public void applyEditorValue() {
+ CellEditor c = this.cellEditor;
+ if (c != null) {
+ // null out cell editor before calling save
+ // in case save results in applyEditorValue being re-entered
+ // see 1GAHI8Z: ITPUI:ALL - How to code event notification when
+ // using cell editor ?
+ this.cellEditor = null;
+ Item t = this.tableItem;
+ // don't null out table item -- same item is still selected
+ if (t != null && !t.isDisposed()) {
+ saveEditorValue(c, t);
+ }
+ setEditor(null, null, 0);
+ c.removeListener(cellEditorListener);
+ Control control = c.getControl();
+ if (control != null) {
+ if (mouseListener != null) {
+ control.removeMouseListener(mouseListener);
+ }
+ if (focusListener != null) {
+ control.removeFocusListener(focusListener);
+ }
+ }
+ c.deactivate();
+ }
+ }
+
+ /**
+ * Cancels the active cell editor, without saving the value back to the
+ * domain model.
+ */
+ public void cancelEditing() {
+ if (cellEditor != null) {
+ setEditor(null, null, 0);
+ cellEditor.removeListener(cellEditorListener);
+ CellEditor oldEditor = cellEditor;
+ cellEditor = null;
+ oldEditor.deactivate();
+ }
+ }
+
+ /**
+ * Start editing the given element.
+ *
+ * @param element
+ * @param column
+ */
+ public void editElement(Object element, int column) {
+ if (cellEditor != null) {
+ applyEditorValue();
+ }
+
+ setSelection(new StructuredSelection(element), true);
+ Item[] selection = getSelection();
+ if (selection.length != 1) {
+ return;
+ }
+
+ tableItem = selection[0];
+
+ // Make sure selection is visible
+ showSelection();
+ columnNumber = column;
+ activateCellEditor();
+
+ }
+
+ /**
+ * Return the array of CellEditors used in the viewer
+ *
+ * @return the cell editors
+ */
+ public CellEditor[] getCellEditors() {
+ return cellEditors;
+ }
+
+ /**
+ * Get the cell modifier
+ *
+ * @return the cell modifier
+ */
+ public ICellModifier getCellModifier() {
+ return cellModifier;
+ }
+
+ /**
+ * Return the properties for the column
+ *
+ * @return the array of column properties
+ */
+ public Object[] getColumnProperties() {
+ return columnProperties;
+ }
+
+ /**
+ * Handles the mouse down event; activates the cell editor.
+ *
+ * @param event
+ * the mouse event that should be handled
+ */
+ public void handleMouseDown(MouseEvent event) {
+ if (event.button != 1) {
+ return;
+ }
+
+ if (cellEditor != null) {
+ applyEditorValue();
+ }
+
+ // activate the cell editor immediately. If a second mouseDown
+ // is received prior to the expiration of the doubleClick time then
+ // the cell editor will be deactivated and a doubleClick event will
+ // be processed.
+ //
+ doubleClickExpirationTime = event.time
+ + Display.getCurrent().getDoubleClickTime();
+
+ Item[] items = getSelection();
+ // Do not edit if more than one row is selected.
+ if (items.length != 1) {
+ tableItem = null;
+ return;
+ }
+ tableItem = items[0];
+
+ activateCellEditor(event);
+ }
+
+ private void initCellEditorListener() {
+ cellEditorListener = new ICellEditorListener() {
+ @Override
+ public void editorValueChanged(boolean oldValidState,
+ boolean newValidState) {
+ // Ignore.
+ }
+
+ @Override
+ public void cancelEditor() {
+ TableTreeEditorImpl.this.cancelEditing();
+ }
+
+ @Override
+ public void applyEditorValue() {
+ TableTreeEditorImpl.this.applyEditorValue();
+ }
+ };
+ }
+
+ /**
+ * Return whether there is an active cell editor.
+ *
+ * @return <code>true</code> if there is an active cell editor;
+ * otherwise <code>false</code> is returned.
+ */
+ public boolean isCellEditorActive() {
+ return cellEditor != null;
+ }
+
+ /**
+ * Saves the value of the currently active cell editor, by delegating to
+ * the cell modifier.
+ */
+ private void saveEditorValue(CellEditor cellEditor, Item tableItem) {
+ if( cellModifier != null ) {
+ if( ! cellEditor.isValueValid() ) {
+ // Do what????
+ }
+ }
+ String property = null;
+
+ if( columnProperties != null && columnNumber < columnProperties.length ) {
+ property = columnProperties[columnNumber];
+ }
+ cellModifier.modify(tableItem, property, cellEditor.getValue());
+ }
+
+ /**
+ * Set the cell editors
+ *
+ * @param editors
+ */
+ public void setCellEditors(CellEditor[] editors) {
+ this.cellEditors = editors;
+ }
+
+ /**
+ * Set the cell modifier
+ *
+ * @param modifier
+ */
+ public void setCellModifier(ICellModifier modifier) {
+ this.cellModifier = modifier;
+ }
+
+ /**
+ * Set the column properties
+ *
+ * @param columnProperties
+ */
+ public void setColumnProperties(String[] columnProperties) {
+ this.columnProperties = columnProperties;
+ }
+
+ Rectangle getBounds(Item item, int columnNumber) {
+ return ((TableTreeItem) item).getBounds(columnNumber);
+ }
+
+ int getColumnCount() {
+ // getColumnCount() should be a API in TableTree.
+ return getTableTree().getTable().getColumnCount();
+ }
+
+ Item[] getSelection() {
+ return getTableTree().getSelection();
+ }
+
+ void setEditor(Control w, Item item, int columnNumber) {
+ tableTreeEditor.setEditor(w, (TableTreeItem) item, columnNumber);
+ }
+
+ void setSelection(StructuredSelection selection, boolean b) {
+ TableTreeViewer.this.setSelection(selection, b);
+ }
+
+ void showSelection() {
+ getTableTree().showSelection();
+ }
+
+ void setLayoutData(CellEditor.LayoutData layoutData) {
+ tableTreeEditor.horizontalAlignment = layoutData.horizontalAlignment;
+ tableTreeEditor.grabHorizontal = layoutData.grabHorizontal;
+ tableTreeEditor.minimumWidth = layoutData.minimumWidth;
+ }
+
+ void handleDoubleClickEvent() {
+ Viewer viewer = getViewer();
+ fireDoubleClick(new DoubleClickEvent(viewer, viewer.getSelection()));
+ fireOpen(new OpenEvent(viewer, viewer.getSelection()));
+ }
+ }
+
+ /**
+ * Creates a table tree viewer on the given table tree control. The viewer
+ * has no input, no content provider, a default label provider, no sorter,
+ * and no filters.
+ *
+ * @param tree
+ * the table tree control
+ */
+ @Deprecated
+ public TableTreeViewer(TableTree tree) {
+ super();
+ tableTree = tree;
+ hookControl(tree);
+ tableTreeEditor = new TableTreeEditor(tableTree);
+ tableEditorImpl = new TableTreeEditorImpl(this);
+ }
+
+ /**
+ * Creates a table tree viewer on a newly-created table tree control under
+ * the given parent. The table tree control is created using the SWT style
+ * bits <code>MULTI, H_SCROLL, V_SCROLL, and BORDER</code>. The viewer
+ * has no input, no content provider, a default label provider, no sorter,
+ * and no filters.
+ *
+ * @param parent
+ * the parent control
+ */
+ @Deprecated
+ public TableTreeViewer(Composite parent) {
+ this(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
+ }
+
+ /**
+ * Creates a table tree viewer on a newly-created table tree control under
+ * the given parent. The table tree control is created using the given SWT
+ * style bits. The viewer has no input, no content provider, a default label
+ * provider, no sorter, and no filters.
+ *
+ * @param parent
+ * the parent control
+ * @param style
+ * the SWT style bits
+ */
+ @Deprecated
+ public TableTreeViewer(Composite parent, int style) {
+ this(new TableTree(parent, style));
+ }
+
+ @Override
+ protected void addTreeListener(Control c, TreeListener listener) {
+ ((TableTree) c).addTreeListener(listener);
+ }
+
+ @Override
+ @Deprecated
+ public void cancelEditing() {
+ tableEditorImpl.cancelEditing();
+ }
+
+ @Override
+ protected void doUpdateItem(Item item, Object element) {
+ // update icon and label
+ // Similar code in TableTreeViewer.doUpdateItem()
+ IBaseLabelProvider prov = getLabelProvider();
+ ITableLabelProvider tprov = null;
+
+ if (prov instanceof ITableLabelProvider) {
+ tprov = (ITableLabelProvider) prov;
+ }
+
+ int columnCount = tableTree.getTable().getColumnCount();
+ TableTreeItem ti = (TableTreeItem) item;
+ // Also enter loop if no columns added. See 1G9WWGZ: JFUIF:WINNT -
+ // TableViewer with 0 columns does not work
+ for (int column = 0; column < columnCount || column == 0; column++) {
+ String text = "";//$NON-NLS-1$
+ Image image = null;
+ if (tprov != null) {
+ text = tprov.getColumnText(element, column);
+ image = tprov.getColumnImage(element, column);
+ } else {
+ if (column == 0) {
+ ViewerLabel updateLabel = new ViewerLabel(item.getText(),
+ item.getImage());
+ buildLabel(updateLabel, element);
+
+ // As it is possible for user code to run the event
+ // loop check here.
+ if (item.isDisposed()) {
+ unmapElement(element, item);
+ return;
+ }
+
+ text = updateLabel.getText();
+ image = updateLabel.getImage();
+ }
+ }
+
+ // Avoid setting text to null
+ if (text == null) {
+ text = ""; //$NON-NLS-1$
+ }
+
+ ti.setText(column, text);
+ // Apparently a problem to setImage to null if already null
+ if (ti.getImage(column) != image) {
+ ti.setImage(column, image);
+ }
+
+ getColorAndFontCollector().setFontsAndColors(element);
+ getColorAndFontCollector().applyFontsAndColors(ti);
+ }
+
+ }
+
+ @Override
+ @Deprecated
+ public void editElement(Object element, int column) {
+ tableEditorImpl.editElement(element, column);
+ }
+
+ @Override
+ @Deprecated
+ public CellEditor[] getCellEditors() {
+ return tableEditorImpl.getCellEditors();
+ }
+
+ @Override
+ @Deprecated
+ public ICellModifier getCellModifier() {
+ return tableEditorImpl.getCellModifier();
+ }
+
+ @Override
+ protected Item[] getChildren(Widget o) {
+ if (o instanceof TableTreeItem) {
+ return ((TableTreeItem) o).getItems();
+ }
+ if (o instanceof TableTree) {
+ return ((TableTree) o).getItems();
+ }
+ return null;
+ }
+
+ @Override
+ protected Item getChild(Widget widget, int index) {
+ if (widget instanceof TableTreeItem) {
+ return ((TableTreeItem) widget).getItem(index);
+ }
+ if (widget instanceof TableTree) {
+ return ((TableTree) widget).getItem(index);
+ }
+ return null;
+ }
+
+ @Override
+ @Deprecated
+ public Object[] getColumnProperties() {
+ return tableEditorImpl.getColumnProperties();
+ }
+
+ @Override
+ @Deprecated
+ public Control getControl() {
+ return tableTree;
+ }
+
+ /**
+ * Returns the element with the given index from this viewer. Returns
+ * <code>null</code> if the index is out of range.
+ * <p>
+ * This method is internal to the framework.
+ * </p>
+ *
+ * @param index
+ * the zero-based index
+ * @return the element at the given index, or <code>null</code> if the
+ * index is out of range
+ */
+ @Deprecated
+ public Object getElementAt(int index) {
+ // XXX: Workaround for 1GBCSB1: SWT:WIN2000 - TableTree should have
+ // getItem(int index)
+ TableTreeItem i = tableTree.getItems()[index];
+ if (i != null) {
+ return i.getData();
+ }
+ return null;
+ }
+
+ @Override
+ protected boolean getExpanded(Item item) {
+ return ((TableTreeItem) item).getExpanded();
+ }
+
+ @Override
+ protected Item getItemAt(Point p) {
+ return getTableTree().getTable().getItem(p);
+ }
+
+ @Override
+ protected int getItemCount(Control widget) {
+ return ((TableTree) widget).getItemCount();
+ }
+
+ @Override
+ protected int getItemCount(Item item) {
+ return ((TableTreeItem) item).getItemCount();
+ }
+
+ @Override
+ protected org.eclipse.swt.widgets.Item[] getItems(
+ org.eclipse.swt.widgets.Item item) {
+ return ((TableTreeItem) item).getItems();
+ }
+
+ /**
+ * The table tree viewer implementation of this <code>Viewer</code>
+ * framework method returns the label provider, which in the case of table
+ * tree viewers will be an instance of either
+ * <code>ITableLabelProvider</code> or <code>ILabelProvider</code>. If
+ * it is an <code>ITableLabelProvider</code>, then it provides a separate
+ * label text and image for each column. If it is an
+ * <code>ILabelProvider</code>, then it provides only the label text and
+ * image for the first column, and any remaining columns are blank.
+ */
+ @Override
+ @Deprecated
+ public IBaseLabelProvider getLabelProvider() {
+ return super.getLabelProvider();
+ }
+
+ @Override
+ protected Item getParentItem(Item item) {
+ return ((TableTreeItem) item).getParentItem();
+ }
+
+ @Override
+ protected Item[] getSelection(Control widget) {
+ return ((TableTree) widget).getSelection();
+ }
+
+ /**
+ * Returns this table tree viewer's table tree control.
+ *
+ * @return the table tree control
+ */
+ @Deprecated
+ public TableTree getTableTree() {
+ return tableTree;
+ }
+
+ @Override
+ protected void hookControl(Control control) {
+ super.hookControl(control);
+ tableTree.getTable().addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseDown(MouseEvent e) {
+ /*
+ * If user clicked on the [+] or [-], do not activate
+ * CellEditor.
+ */
+ // XXX: This code should not be here. SWT should either have
+ // support to see
+ // if the user clicked on the [+]/[-] or manage the table editor
+ // activation
+ org.eclipse.swt.widgets.TableItem[] items = tableTree
+ .getTable().getItems();
+ for (TableItem item : items) {
+ Rectangle rect = item.getImageBounds(0);
+ if (rect.contains(e.x, e.y)) {
+ return;
+ }
+ }
+
+ tableEditorImpl.handleMouseDown(e);
+ }
+ });
+ }
+
+ @Override
+ @Deprecated
+ public boolean isCellEditorActive() {
+ return tableEditorImpl.isCellEditorActive();
+ }
+
+ @Override
+ protected Item newItem(Widget parent, int flags, int ix) {
+ TableTreeItem item;
+ if (ix >= 0) {
+ if (parent instanceof TableTreeItem) {
+ item = new TableTreeItem((TableTreeItem) parent, flags, ix);
+ } else {
+ item = new TableTreeItem((TableTree) parent, flags, ix);
+ }
+ } else {
+ if (parent instanceof TableTreeItem) {
+ item = new TableTreeItem((TableTreeItem) parent, flags);
+ } else {
+ item = new TableTreeItem((TableTree) parent, flags);
+ }
+ }
+ return item;
+ }
+
+ @Override
+ protected void removeAll(Control widget) {
+ ((TableTree) widget).removeAll();
+ }
+
+ @Override
+ @Deprecated
+ public void setCellEditors(CellEditor[] editors) {
+ tableEditorImpl.setCellEditors(editors);
+ }
+
+ @Override
+ @Deprecated
+ public void setCellModifier(ICellModifier modifier) {
+ tableEditorImpl.setCellModifier(modifier);
+ }
+
+ @Override
+ @Deprecated
+ public void setColumnProperties(String[] columnProperties) {
+ tableEditorImpl.setColumnProperties(columnProperties);
+ }
+
+ @Override
+ @Deprecated
+ protected void setExpanded(Item node, boolean expand) {
+ ((TableTreeItem) node).setExpanded(expand);
+ }
+
+ @Override
+ @Deprecated
+ protected void setSelection(List items) {
+ TableTreeItem[] newItems = new TableTreeItem[items.size()];
+ items.toArray(newItems);
+ getTableTree().setSelection(newItems);
+ }
+
+ @Override
+ @Deprecated
+ protected void showItem(Item item) {
+ getTableTree().showItem((TableTreeItem) item);
+ }
+}
diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/package.html b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/package.html
index 1e5c6d5..b2608b4 100644
--- a/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/package.html
+++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/package.html
@@ -34,7 +34,7 @@
<tt>AbstractTreeViewer</tt>) together with concrete viewer classes (<tt>ListViewer</tt>,
<tt>TreeViewer</tt>,
<tt>TableViewer</tt>,
-<tt>CheckboxTreeViewer</tt>,
+<tt>TableTreeViewer</tt>, <tt>CheckboxTreeViewer</tt>,
and <tt>CheckboxTableViewer</tt>),
and various lesser support classes. The concrete structured viewer classes
are ready-to-use and have built-in support for drag-and-drop, filtering
diff --git a/bundles/org.eclipse.ui/.settings/.api_filters b/bundles/org.eclipse.ui/.settings/.api_filters
deleted file mode 100644
index 5feb39f..0000000
--- a/bundles/org.eclipse.ui/.settings/.api_filters
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<component id="org.eclipse.ui" version="2">
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.jface.viewers.TableTreeViewer">
- <filter comment="Bug 436505: Delete TableTreeViewer and related classes / methods" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.jface.viewers.TableTreeViewer"/>
- <message_argument value="org.eclipse.ui_3.107.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTree">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTree"/>
- <message_argument value="org.eclipse.ui_3.107.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTreeEditor">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTreeEditor"/>
- <message_argument value="org.eclipse.ui_3.107.0"/>
- </message_arguments>
- </filter>
- </resource>
- <resource path="META-INF/MANIFEST.MF" type="org.eclipse.swt.custom.TableTreeItem">
- <filter comment="Bug 475833: Delete TableTree and related items" id="305422471">
- <message_arguments>
- <message_argument value="org.eclipse.swt.custom.TableTreeItem"/>
- <message_argument value="org.eclipse.ui_3.107.0"/>
- </message_arguments>
- </filter>
- </resource>
-</component>
diff --git a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/AllTests.java b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/AllTests.java
index 5ed5c87..72043a7 100644
--- a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/AllTests.java
+++ b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/AllTests.java
@@ -37,6 +37,7 @@
addTestSuite(TreeViewerColumnTest.class);
addTestSuite(VirtualTableViewerTest.class);
addTestSuite(VirtualLazyTableViewerTest.class);
+ addTestSuite(TableTreeViewerTest.class);
addTestSuite(TableColorProviderTest.class);
addTestSuite(TableFontProviderTest.class);
addTestSuite(ListViewerTest.class);
diff --git a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/StructuredViewerTest.java b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/StructuredViewerTest.java
index 5575466..1ad9052 100644
--- a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/StructuredViewerTest.java
+++ b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/StructuredViewerTest.java
@@ -19,6 +19,7 @@
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.LabelProviderChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableTreeViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerFilter;
@@ -377,6 +378,9 @@
}
public void testLabelProvider() {
+ // BUG: non-polymorphic behaviour
+ // if (fViewer instanceof TableViewer || fViewer instanceof TableTreeViewer)
+ // return;
fViewer.setLabelProvider(getTestLabelProvider());
TestElement first = fRootElement.getFirstChild();
String newLabel = providedString(first);
@@ -391,6 +395,9 @@
}
public void testLabelProviderStateChange() {
+ // BUG: non-polymorphic behaviour
+ // if (fViewer instanceof TableViewer || fViewer instanceof TableTreeViewer)
+ // return;
TestLabelProvider provider = new TestLabelProvider();
fViewer.setLabelProvider(provider);
provider.setSuffix("added suffix");
@@ -420,7 +427,8 @@
}
public void testRenameWithLabelProvider() {
- if (fViewer instanceof TableViewer) {
+ if (fViewer instanceof TableViewer
+ || fViewer instanceof TableTreeViewer) {
return;
}
fViewer.setLabelProvider(new TestLabelProvider());
diff --git a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TableTreeViewerTest.java b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TableTreeViewerTest.java
new file mode 100644
index 0000000..4e2b5a4
--- /dev/null
+++ b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TableTreeViewerTest.java
@@ -0,0 +1,144 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.jface.tests.viewers;
+
+import org.eclipse.jface.viewers.ColumnLayoutData;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableTreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.TableTree;
+import org.eclipse.swt.custom.TableTreeItem;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TableColumn;
+
+public class TableTreeViewerTest extends AbstractTreeViewerTest {
+
+ public static class TableTreeTestLabelProvider extends TestLabelProvider
+ implements ITableLabelProvider {
+ public boolean fExtended = false;
+
+ @Override
+ public String getText(Object element) {
+ if (fExtended) {
+ return providedString((String) element);
+ }
+
+ return element.toString();
+ }
+
+ @Override
+ public String getColumnText(Object element, int index) {
+ if (fExtended) {
+ return providedString((TestElement) element);
+ }
+ return element.toString();
+ }
+
+ @Override
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+ }
+
+ public TableTreeViewerTest(String name) {
+ super(name);
+ }
+
+ @Override
+ protected StructuredViewer createViewer(Composite parent) {
+ TableTreeViewer viewer = new TableTreeViewer(parent);
+ viewer.setContentProvider(new TestModelContentProvider());
+ viewer.setLabelProvider(new TableTreeTestLabelProvider());
+ viewer.getTableTree().getTable().setLinesVisible(true);
+
+ TableLayout layout = new TableLayout();
+ viewer.getTableTree().getTable().setLayout(layout);
+ viewer.getTableTree().getTable().setHeaderVisible(true);
+ String headers[] = { "column 1 header", "column 2 header" };
+
+ ColumnLayoutData layouts[] = { new ColumnWeightData(100),
+ new ColumnWeightData(100) };
+
+ final TableColumn columns[] = new TableColumn[headers.length];
+
+ for (int i = 0; i < headers.length; i++) {
+ layout.addColumnData(layouts[i]);
+ TableColumn tc = new TableColumn(viewer.getTableTree().getTable(),
+ SWT.NONE, i);
+ tc.setResizable(layouts[i].resizable);
+ tc.setText(headers[i]);
+ columns[i] = tc;
+ }
+ fTreeViewer = viewer;
+ return viewer;
+ }
+
+ @Override
+ protected int getItemCount() {
+ TestElement first = fRootElement.getFirstChild();
+ TableTreeItem ti = (TableTreeItem) fViewer.testFindItem(first);
+ TableTree table = ti.getParent();
+ return table.getItemCount();
+ }
+
+ @Override
+ protected int getItemCount(TestElement element) {
+ TableTreeItem ti = (TableTreeItem) fViewer.testFindItem(element);
+ return ti.getItemCount();
+ }
+
+ @Override
+ protected String getItemText(int at) {
+ TableTree table = (TableTree) fViewer.getControl();
+ return table.getItems()[at].getText();
+ }
+
+ public static void main(String args[]) {
+ junit.textui.TestRunner.run(TableTreeViewerTest.class);
+ }
+
+ @Override
+ public void testLabelProvider() {
+ TableTreeViewer viewer = (TableTreeViewer) fViewer;
+ TableTreeTestLabelProvider provider = (TableTreeTestLabelProvider) viewer
+ .getLabelProvider();
+ provider.fExtended = true;
+ // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
+ fViewer.refresh();
+ TestElement first = fRootElement.getFirstChild();
+ String newLabel = providedString(first);
+ assertEquals("rendered label", newLabel, getItemText(0));
+ provider.fExtended = false;
+ // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
+ fViewer.refresh();
+ }
+
+ @Override
+ public void testLabelProviderStateChange() {
+ TableTreeViewer viewer = (TableTreeViewer) fViewer;
+ TableTreeTestLabelProvider provider = (TableTreeTestLabelProvider) viewer
+ .getLabelProvider();
+ provider.fExtended = true;
+ provider.setSuffix("added suffix");
+ // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
+ fViewer.refresh();
+ TestElement first = fRootElement.getFirstChild();
+ String newLabel = providedString(first);
+ assertEquals("rendered label", newLabel, getItemText(0));
+ provider.fExtended = false;
+ // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
+ fViewer.refresh();
+ }
+}
diff --git a/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/interactive/TestTableTree.java b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/interactive/TestTableTree.java
new file mode 100644
index 0000000..0a58972
--- /dev/null
+++ b/tests/org.eclipse.ui.tests/Eclipse JFace Tests/org/eclipse/jface/tests/viewers/interactive/TestTableTree.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2000, 2006 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.jface.tests.viewers.interactive;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.tests.viewers.TestElement;
+import org.eclipse.jface.tests.viewers.TestModelContentProvider;
+import org.eclipse.jface.viewers.ColumnLayoutData;
+import org.eclipse.jface.viewers.ColumnWeightData;
+import org.eclipse.jface.viewers.TableLayout;
+import org.eclipse.jface.viewers.TableTreeViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.TableColumn;
+
+public class TestTableTree extends TestBrowser {
+
+ TableTreeViewer fViewer;
+
+ Action fExpandAllAction;
+
+ public TestTableTree() {
+ super();
+ fExpandAllAction = new ExpandAllAction("Expand All", this);
+ }
+
+ @Override
+ public Viewer createViewer(Composite parent) {
+ TableTreeViewer viewer = new TableTreeViewer(parent);
+ viewer.setContentProvider(new TestModelContentProvider());
+ viewer.setLabelProvider(new TestTableTreeLabelProvider());
+ viewer.getTableTree().getTable().setLinesVisible(true);
+
+ TableLayout layout = new TableLayout();
+ viewer.getTableTree().getTable().setLayout(layout);
+ viewer.getTableTree().getTable().setHeaderVisible(true);
+ String headers[] = { "First Column", "Second Column" };
+
+ ColumnLayoutData layouts[] = { new ColumnWeightData(100),
+ new ColumnWeightData(100) };
+
+ final TableColumn columns[] = new TableColumn[headers.length];
+
+ for (int i = 0; i < headers.length; i++) {
+ layout.addColumnData(layouts[i]);
+ TableColumn tc = new TableColumn(viewer.getTableTree().getTable(),
+ SWT.NONE, i);
+ tc.setResizable(layouts[i].resizable);
+ tc.setText(headers[i]);
+ columns[i] = tc;
+ }
+ if (fViewer == null) {
+ fViewer = viewer;
+ }
+
+ return viewer;
+ }
+
+ public static void main(String[] args) {
+ TestBrowser browser = new TestTableTree();
+ if (args.length > 0 && args[0].equals("-twopanes")) {
+ browser.show2Panes();
+ }
+ browser.setBlockOnOpen(true);
+ browser.open(TestElement.createModel(3, 10));
+ }
+
+ /**
+ * Adds the expand all action to the tests menu.
+ */
+ @Override
+ protected void viewerFillMenuBar(MenuManager mgr) {
+ MenuManager testMenu = (MenuManager) (mgr.findMenuUsingPath("tests"));
+ testMenu.add(new Separator());
+ testMenu.add(fExpandAllAction);
+ }
+}
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeTest.java
new file mode 100644
index 0000000..75e2ef0
--- /dev/null
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeTest.java
@@ -0,0 +1,61 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2006 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.ui.tests.decorators;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.swt.custom.TableTreeItem;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+
+/**
+ * The DecoratorTableTreeTest is the test for table
+ * trees.
+ */
+public class DecoratorTableTreeTest extends DecoratorViewerTest {
+
+ /**
+ * Create a new instance of the receiver.
+ * @param testName
+ */
+ public DecoratorTableTreeTest(String testName) {
+ super(testName);
+ }
+ @Override
+ protected void backgroundCheck(IViewPart view) {
+ TableTreeItem first = ((DecoratorTableTreeView) view).viewer.getTableTree().getItems()[0];
+ Assert.isTrue(first.getBackground().getRGB()
+ .equals(BackgroundColorDecorator.color.getRGB()));
+
+ }
+
+ @Override
+ protected void foregroundCheck(IViewPart view) {
+ TableTreeItem first = ((DecoratorTableTreeView) view).viewer.getTableTree().getItems()[0];
+ Assert.isTrue(first.getForeground().getRGB()
+ .equals(ForegroundColorDecorator.color.getRGB()));
+
+ }
+
+ @Override
+ protected IViewPart openView(IWorkbenchPage page) throws PartInitException {
+ return page.showView("org.eclipse.ui.tests.decorator.TableTreeTest");
+ }
+
+ @Override
+ protected void fontCheck(IViewPart view) {
+ TableTreeItem first = ((DecoratorTableTreeView) view).viewer.getTableTree().getItems()[0];
+ Assert.isTrue(first.getFont().getFontData()[0]
+ .equals(FontDecorator.font.getFontData()[0]));
+
+ }
+
+}
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeView.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeView.java
new file mode 100644
index 0000000..e7b3003
--- /dev/null
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/decorators/DecoratorTableTreeView.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2005 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.ui.tests.decorators;
+
+import org.eclipse.jface.viewers.TableTreeViewer;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * The DecoratorTableTreeView is the view that tests decorators
+ * for table trees.
+ */
+public class DecoratorTableTreeView extends DecoratorTestPart {
+
+ TableTreeViewer viewer;
+
+ /**
+ * Create a new instance of the receiver.
+ */
+ public DecoratorTableTreeView() {
+ super();
+ }
+
+ @Override
+ public void createPartControl(Composite parent) {
+ viewer = new TableTreeViewer(parent);
+
+ viewer.setLabelProvider(getLabelProvider());
+
+ viewer.setContentProvider(new TestTreeContentProvider());
+ viewer.setInput(this);
+
+ GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL
+ | GridData.FILL_BOTH);
+
+ viewer.getControl().setLayoutData(data);
+
+ }
+
+ @Override
+ public void setFocus() {
+ // XXX Auto-generated method stub
+
+ }
+
+}
diff --git a/tests/org.eclipse.ui.tests/plugin.xml b/tests/org.eclipse.ui.tests/plugin.xml
index 727562e..7378dbf 100644
--- a/tests/org.eclipse.ui.tests/plugin.xml
+++ b/tests/org.eclipse.ui.tests/plugin.xml
@@ -401,6 +401,11 @@
name="Table View Test"
id="org.eclipse.ui.tests.decorator.TableViewTest"/>
<view
+ class="org.eclipse.ui.tests.decorators.DecoratorTableTreeView"
+ category="org.eclipse.ui.tests.decoratorCategory"
+ name="Table Tree Test"
+ id="org.eclipse.ui.tests.decorator.TableTreeTest"/>
+ <view
class="org.eclipse.jface.tests.viewers.interactive.VirtualTableView"
category="org.eclipse.ui.tests.tableViewerViews"
name="Virtual Table View test"