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