1 /******************************************************************************* 2 * Copyright (c) 2005, 2018 IBM Corporation and others. 3 * 4 * This program and the accompanying materials 5 * are made available under the terms of the Eclipse Public License 2.0 6 * which accompanies this distribution, and is available at 7 * https://www.eclipse.org/legal/epl-2.0/ 8 * 9 * SPDX-License-Identifier: EPL-2.0 10 * 11 * Contributors: 12 * IBM Corporation - initial API and implementation 13 *******************************************************************************/ 14 package org.eclipse.jface.tests.viewers; 15 16 import java.lang.reflect.Method; 17 18 import org.eclipse.jface.viewers.ColumnViewer; 19 import org.eclipse.jface.viewers.ITableLabelProvider; 20 import org.eclipse.jface.viewers.StructuredViewer; 21 import org.eclipse.jface.viewers.TreeViewer; 22 import org.eclipse.jface.viewers.ViewerColumn; 23 import org.eclipse.swt.SWT; 24 import org.eclipse.swt.graphics.Image; 25 import org.eclipse.swt.widgets.Composite; 26 import org.eclipse.swt.widgets.Tree; 27 import org.eclipse.swt.widgets.TreeColumn; 28 import org.eclipse.swt.widgets.TreeItem; 29 30 public class TreeViewerColumnTest extends AbstractTreeViewerTest { 31 32 public static class TableTreeTestLabelProvider extends TestLabelProvider implements ITableLabelProvider { 33 public boolean fExtended = false; 34 35 @Override getText(Object element)36 public String getText(Object element) { 37 if (fExtended) { 38 return providedString((String) element); 39 } 40 41 return element.toString(); 42 } 43 44 @Override getColumnText(Object element, int index)45 public String getColumnText(Object element, int index) { 46 if (fExtended) { 47 return providedString((TestElement) element); 48 } 49 return element.toString(); 50 } 51 52 @Override getColumnImage(Object element, int columnIndex)53 public Image getColumnImage(Object element, int columnIndex) { 54 return null; 55 } 56 } 57 TreeViewerColumnTest(String name)58 public TreeViewerColumnTest(String name) { 59 super(name); 60 } 61 62 @Override createViewer(Composite parent)63 protected StructuredViewer createViewer(Composite parent) { 64 TreeViewer viewer = new TreeViewer(parent); 65 viewer.setContentProvider(new TestModelContentProvider()); 66 viewer.setLabelProvider(new TableTreeTestLabelProvider()); 67 viewer.getTree().setLinesVisible(true); 68 69 viewer.getTree().setHeaderVisible(true); 70 String headers[] = { "column 1 header", "column 2 header" }; 71 72 final TreeColumn columns[] = new TreeColumn[headers.length]; 73 74 for (int i = 0; i < headers.length; i++) { 75 TreeColumn tc = new TreeColumn(viewer.getTree(), SWT.NONE, i); 76 tc.setResizable(true); 77 tc.setText(headers[i]); 78 tc.setWidth(25); 79 columns[i] = tc; 80 } 81 fTreeViewer = viewer; 82 return viewer; 83 } 84 85 @Override getItemCount()86 protected int getItemCount() { 87 TestElement first = fRootElement.getFirstChild(); 88 TreeItem ti = (TreeItem) fViewer.testFindItem(first); 89 return ti.getParent().getItemCount(); 90 } 91 92 @Override getItemCount(TestElement element)93 protected int getItemCount(TestElement element) { 94 TreeItem ti = (TreeItem) fViewer.testFindItem(element); 95 return ti.getItemCount(); 96 } 97 98 @Override getItemText(int at)99 protected String getItemText(int at) { 100 return ((Tree) fViewer.getControl()).getItems()[at].getText(); 101 } 102 main(String args[])103 public static void main(String args[]) { 104 junit.textui.TestRunner.run(TreeViewerColumnTest.class); 105 } 106 getViewerColumn(ColumnViewer viewer, int index)107 private static ViewerColumn getViewerColumn(ColumnViewer viewer, int index) { 108 Method method; 109 try { 110 method = ColumnViewer.class.getDeclaredMethod("getViewerColumn", new Class[] { int.class }); 111 method.setAccessible(true); 112 return (ViewerColumn) method.invoke(viewer, Integer.valueOf(index)); 113 } catch (Exception e) { 114 throw new RuntimeException(e); 115 } 116 } 117 testViewerColumn()118 public void testViewerColumn() { 119 assertNull(getViewerColumn((TreeViewer) fViewer, -1)); 120 assertNotNull(getViewerColumn((TreeViewer) fViewer, 0)); 121 assertNotNull(getViewerColumn((TreeViewer) fViewer, 1)); 122 assertNull(getViewerColumn((TreeViewer) fViewer, 2)); 123 } 124 125 @Override testLabelProvider()126 public void testLabelProvider() { 127 TreeViewer viewer = (TreeViewer) fViewer; 128 TableTreeTestLabelProvider provider = (TableTreeTestLabelProvider) viewer.getLabelProvider(); 129 provider.fExtended = true; 130 // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider 131 // changes 132 fViewer.refresh(); 133 TestElement first = fRootElement.getFirstChild(); 134 String newLabel = providedString(first); 135 assertEquals("rendered label", newLabel, getItemText(0)); 136 provider.fExtended = false; 137 // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider 138 // changes 139 fViewer.refresh(); 140 } 141 142 @Override testLabelProviderStateChange()143 public void testLabelProviderStateChange() { 144 TreeViewer viewer = (TreeViewer) fViewer; 145 TableTreeTestLabelProvider provider = (TableTreeTestLabelProvider) viewer.getLabelProvider(); 146 provider.fExtended = true; 147 provider.setSuffix("added suffix"); 148 // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider 149 // changes 150 fViewer.refresh(); 151 TestElement first = fRootElement.getFirstChild(); 152 String newLabel = providedString(first); 153 assertEquals("rendered label", newLabel, getItemText(0)); 154 provider.fExtended = false; 155 // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider 156 // changes 157 fViewer.refresh(); 158 } 159 } 160