Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 174355 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/jface/viewers/WrappedViewerLabelProvider.java (+94 lines)
Lines 11-19 Link Here
11
11
12
package org.eclipse.jface.viewers;
12
package org.eclipse.jface.viewers;
13
13
14
import java.util.LinkedList;
15
16
import org.eclipse.core.runtime.Assert;
14
import org.eclipse.swt.graphics.Color;
17
import org.eclipse.swt.graphics.Color;
15
import org.eclipse.swt.graphics.Font;
18
import org.eclipse.swt.graphics.Font;
16
import org.eclipse.swt.graphics.Image;
19
import org.eclipse.swt.graphics.Image;
20
import org.eclipse.swt.widgets.TreeItem;
17
21
18
/**
22
/**
19
 * The WrappedViewerLabelProvider is a label provider that
23
 * The WrappedViewerLabelProvider is a label provider that
Lines 33-38 Link Here
33
37
34
	private IFontProvider fontProvider;
38
	private IFontProvider fontProvider;
35
39
40
	private IViewerLabelProvider viewerLabelProvider;
41
42
	private ITreePathLabelProvider treePathLabelProvider;
43
	
36
	/**
44
	/**
37
	 * Create a new instance of the receiver based on labelProvider.
45
	 * Create a new instance of the receiver based on labelProvider.
38
	 * 
46
	 * 
Lines 50-55 Link Here
50
	 *            {@link Object}
58
	 *            {@link Object}
51
	 */
59
	 */
52
	public void setProviders(Object provider) {
60
	public void setProviders(Object provider) {
61
		if (provider instanceof ITreePathLabelProvider)
62
			treePathLabelProvider = ((ITreePathLabelProvider) provider);
63
64
		if (provider instanceof IViewerLabelProvider)
65
			viewerLabelProvider = ((IViewerLabelProvider) provider);
66
		
53
		if (provider instanceof ILabelProvider)
67
		if (provider instanceof ILabelProvider)
54
			labelProvider = ((ILabelProvider) provider);
68
			labelProvider = ((ILabelProvider) provider);
55
69
Lines 138-141 Link Here
138
	IFontProvider getFontProvider() {
152
	IFontProvider getFontProvider() {
139
		return fontProvider;
153
		return fontProvider;
140
	}
154
	}
155
	
156
	void updateFromViewerLabelProvider(ViewerCell cell, ViewerLabel label) {
157
		if (viewerLabelProvider != null) {
158
			viewerLabelProvider.updateLabel(label, cell.getElement());
159
		}
160
	}
161
	
162
	void updateFromTreePathLabelProvider(ViewerCell cell, ViewerLabel label) {
163
		if (treePathLabelProvider != null && cell.getItem() instanceof TreeItem) {
164
			TreePath treePath;
165
			{
166
				// inlined copy of AbstractTreeViewer.getTreePathFromItem
167
				TreeItem item = (TreeItem) cell.getItem();
168
				LinkedList segments = new LinkedList();
169
				while (item != null) {
170
					Object segment = item.getData();
171
					Assert.isNotNull(segment);
172
					segments.addFirst(segment);
173
					item = item.getParentItem();
174
				}
175
				treePath = new TreePath(segments.toArray());
176
			}
177
			treePathLabelProvider.updateLabel(label, treePath);
178
		}
179
	}
180
	
181
	private void updateFromLabelProvider(ViewerLabel label, Object element) {
182
		String t = getText(element);
183
		
184
		if( t != null)
185
			label.setText(t);
186
		
187
		Image i = getImage(element);
188
		
189
		if( i != null )
190
			label.setImage(i);
191
		
192
		Font f = getFont(element);
193
		if( f != null )
194
			label.setFont(f);
195
		
196
		Color c = getForeground(element);
197
		if( c != null )
198
			label.setForeground(c);
199
		
200
		c = getBackground(element);
201
		if( c != null )
202
			label.setBackground(c);
203
		
204
	}
205
	
206
	public void update(ViewerCell cell) {
207
		if( viewerLabelProvider == null && treePathLabelProvider == null ) {
208
			super.update(cell);
209
		} else {
210
			ViewerLabel label = new ViewerLabel(cell.getText(), cell.getImage());
211
			updateFromTreePathLabelProvider(cell,label);
212
			updateFromViewerLabelProvider(cell, label);
213
			updateFromLabelProvider(label,cell.getElement());
214
			applyViewerLabel(cell, label);
215
		}
216
	}
217
	
218
	void applyViewerLabel(ViewerCell cell, ViewerLabel label) {
219
		if (label.hasNewText()) {
220
			cell.setText(label.getText());
221
		}
222
		if (label.hasNewImage()) {
223
			cell.setImage(label.getImage());
224
		}
225
		if (label.hasNewBackground()) {
226
			cell.setBackground(label.getBackground());
227
		}
228
		if (label.hasNewForeground()) {
229
			cell.setForeground(label.getForeground());
230
		}
231
		if (label.hasNewFont()) {
232
			cell.setFont(label.getFont());
233
		}
234
	}
141
}
235
}
(-)src/org/eclipse/jface/viewers/TableColumnViewerLabelProvider.java (-22 / +46 lines)
Lines 12-17 Link Here
12
12
13
package org.eclipse.jface.viewers;
13
package org.eclipse.jface.viewers;
14
14
15
import org.eclipse.swt.graphics.Color;
16
import org.eclipse.swt.graphics.Font;
17
import org.eclipse.swt.graphics.Image;
18
19
15
20
16
/**
21
/**
17
 * TableColumnViewerLabelProvider is the mapping from the table based providers
22
 * TableColumnViewerLabelProvider is the mapping from the table based providers
Lines 28-34 Link Here
28
 * 
33
 * 
29
 */
34
 */
30
class TableColumnViewerLabelProvider extends WrappedViewerLabelProvider {
35
class TableColumnViewerLabelProvider extends WrappedViewerLabelProvider {
31
32
	private ITableLabelProvider tableLabelProvider;
36
	private ITableLabelProvider tableLabelProvider;
33
37
34
	private ITableColorProvider tableColorProvider;
38
	private ITableColorProvider tableColorProvider;
Lines 58-100 Link Here
58
	}
62
	}
59
63
60
64
61
62
	/* (non-Javadoc)
63
	 * @see org.eclipse.jface.viewers.WrappedViewerLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
64
	 */
65
	public void update(ViewerCell cell) {
65
	public void update(ViewerCell cell) {
66
		ViewerLabel label = new ViewerLabel(cell.getText(), cell.getImage());
67
		updateFromTreePathLabelProvider(cell,label);
68
		updateFromViewerLabelProvider(cell, label);
69
		updateFromLabelProvider(label,cell.getElement(),cell.getColumnIndex());
70
		applyViewerLabel(cell, label);
71
	}
66
72
67
		Object element = cell.getElement();
73
	private void updateFromLabelProvider(ViewerLabel label, Object element, int index) {
68
		int index = cell.getColumnIndex();
74
		String t;
69
75
		Image i;
76
		
70
		if (tableLabelProvider == null) {
77
		if (tableLabelProvider == null) {
71
			cell.setText(getLabelProvider().getText(element));
78
			t = getLabelProvider().getText(element);
72
			cell.setImage(getLabelProvider().getImage(element));
79
			i = getLabelProvider().getImage(element);
73
		} else {
80
		} else {
74
			cell.setText(tableLabelProvider.getColumnText(element, index));
81
			t = tableLabelProvider.getColumnText(element, index);
75
			cell.setImage(tableLabelProvider.getColumnImage(element, index));
82
			i = tableLabelProvider.getColumnImage(element, index);
76
		}
83
		}
77
84
		
85
		if( t != null )
86
			label.setText(t);
87
		
88
		if( i != null )
89
			label.setImage(i);
90
			
91
		
92
		Color bg = null;
93
		Color fg = null;
78
		if (tableColorProvider == null) {
94
		if (tableColorProvider == null) {
79
			if (getColorProvider() != null) {
95
			if (getColorProvider() != null) {
80
				cell.setBackground(getColorProvider().getBackground(element));
96
				bg = getColorProvider().getBackground(element);
81
				cell.setForeground(getColorProvider().getForeground(element));
97
				fg = getColorProvider().getForeground(element);
82
			}
98
			}
83
99
84
		} else {
100
		} else {
85
			cell.setBackground(tableColorProvider
101
			bg = tableColorProvider
86
					.getBackground(element, index));
102
			.getBackground(element, index);
87
			cell.setForeground(tableColorProvider
103
			fg = tableColorProvider
88
					.getForeground(element, index));
104
			.getForeground(element, index);
89
90
		}
105
		}
106
		
107
		if( bg != null )
108
			label.setBackground(bg);
109
		
110
		if( fg != null )
111
			label.setForeground(fg);
91
112
113
		Font f = null;
92
		if (tableFontProvider == null) {
114
		if (tableFontProvider == null) {
93
			if (getFontProvider() != null)
115
			if (getFontProvider() != null)
94
				cell.setFont(getFontProvider().getFont(element));
116
				f = getFontProvider().getFont(element);
95
		} else
117
		} else
96
			cell.setFont(tableFontProvider.getFont(element, index));
118
			f = tableFontProvider.getFont(element, index);
97
119
120
		if( f != null )
121
			label.setFont(f);
98
	}
122
	}
99
123
100
124
(-)Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TableViewerTest.java (-3 / +25 lines)
Lines 16-25 Link Here
16
import org.eclipse.jface.viewers.ColumnViewer;
16
import org.eclipse.jface.viewers.ColumnViewer;
17
import org.eclipse.jface.viewers.ColumnWeightData;
17
import org.eclipse.jface.viewers.ColumnWeightData;
18
import org.eclipse.jface.viewers.ITableLabelProvider;
18
import org.eclipse.jface.viewers.ITableLabelProvider;
19
import org.eclipse.jface.viewers.IViewerLabelProvider;
19
import org.eclipse.jface.viewers.StructuredViewer;
20
import org.eclipse.jface.viewers.StructuredViewer;
20
import org.eclipse.jface.viewers.TableLayout;
21
import org.eclipse.jface.viewers.TableLayout;
21
import org.eclipse.jface.viewers.TableViewer;
22
import org.eclipse.jface.viewers.TableViewer;
22
import org.eclipse.jface.viewers.ViewerColumn;
23
import org.eclipse.jface.viewers.ViewerColumn;
24
import org.eclipse.jface.viewers.ViewerLabel;
23
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.graphics.Image;
26
import org.eclipse.swt.graphics.Image;
25
import org.eclipse.swt.widgets.Composite;
27
import org.eclipse.swt.widgets.Composite;
Lines 34-40 Link Here
34
36
35
		public String getText(Object element) {
37
		public String getText(Object element) {
36
			if (fExtended)
38
			if (fExtended)
37
				return providedString((String) element);
39
				return providedString((TestElement) element);
38
			return element.toString();
40
			return element.toString();
39
		}
41
		}
40
42
Lines 49-54 Link Here
49
		}
51
		}
50
	}
52
	}
51
53
54
	public static class TableTestViewerLabelProvider extends TableTestLabelProvider implements IViewerLabelProvider {
55
56
		public void updateLabel(ViewerLabel label, Object element) {
57
			label.setText("ViewerLabelProvider-"+label.getText());
58
		}
59
		
60
		public String getText(Object element) {
61
			return null;
62
		}
63
		
64
		public String getColumnText(Object element, int index) {
65
			return null;
66
		}
67
	}
68
	
52
	public TableViewerTest(String name) {
69
	public TableViewerTest(String name) {
53
		super(name);
70
		super(name);
54
	}
71
	}
Lines 183-188 Link Here
183
200
184
	}
201
	}
185
202
186
	
203
	public void testViewerLabelProvider() {
204
		TableViewer tableviewer = (TableViewer) fViewer;
205
		tableviewer.setLabelProvider(new TableTestViewerLabelProvider());
206
		assertTrue(getItemText(0).startsWith("ViewerLabelProvider-"));
207
		tableviewer.setLabelProvider(new TableTestLabelProvider());
208
	}
187
209
188
}
210
}
(-)Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TreeViewerColumnTest.java (-1 / +50 lines)
Lines 14-22 Link Here
14
14
15
import org.eclipse.jface.viewers.ColumnViewer;
15
import org.eclipse.jface.viewers.ColumnViewer;
16
import org.eclipse.jface.viewers.ITableLabelProvider;
16
import org.eclipse.jface.viewers.ITableLabelProvider;
17
import org.eclipse.jface.viewers.ITreePathLabelProvider;
18
import org.eclipse.jface.viewers.IViewerLabelProvider;
17
import org.eclipse.jface.viewers.StructuredViewer;
19
import org.eclipse.jface.viewers.StructuredViewer;
20
import org.eclipse.jface.viewers.TreePath;
18
import org.eclipse.jface.viewers.TreeViewer;
21
import org.eclipse.jface.viewers.TreeViewer;
19
import org.eclipse.jface.viewers.ViewerColumn;
22
import org.eclipse.jface.viewers.ViewerColumn;
23
import org.eclipse.jface.viewers.ViewerLabel;
20
import org.eclipse.swt.SWT;
24
import org.eclipse.swt.SWT;
21
import org.eclipse.swt.graphics.Image;
25
import org.eclipse.swt.graphics.Image;
22
import org.eclipse.swt.widgets.Composite;
26
import org.eclipse.swt.widgets.Composite;
Lines 32-38 Link Here
32
36
33
        public String getText(Object element) {
37
        public String getText(Object element) {
34
            if (fExtended)
38
            if (fExtended)
35
                return providedString((String) element);
39
                return providedString((TestElement) element);
36
40
37
            return element.toString();
41
            return element.toString();
38
        }
42
        }
Lines 48-53 Link Here
48
        }
52
        }
49
    }
53
    }
50
54
55
    public static class TableTreeTestViewerLabelProvider extends TableTreeTestLabelProvider implements IViewerLabelProvider {
56
57
		public void updateLabel(ViewerLabel label, Object element) {
58
			label.setText("ViewerLabelProvider-"+label.getText());
59
		}
60
		
61
		public String getText(Object element) {
62
			return null;
63
		}
64
		
65
		public String getColumnText(Object element, int index) {
66
			return null;
67
		}
68
	}
69
    
70
    public static class TableTreeTestTreeLabelprovider extends TableTreeTestLabelProvider implements ITreePathLabelProvider {
71
72
		public void updateLabel(ViewerLabel label, TreePath elementPath) {
73
			label.setText("TreePath-" + elementPath.getSegmentCount());
74
		}
75
    	
76
		public String getText(Object element) {
77
			return null;
78
		}
79
		
80
		public String getColumnText(Object element, int index) {
81
			return null;
82
		}
83
    }
84
    
51
    public TreeViewerColumnTest(String name) {
85
    public TreeViewerColumnTest(String name) {
52
        super(name);
86
        super(name);
53
    }
87
    }
Lines 142-145 Link Here
142
        // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
176
        // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
143
        fViewer.refresh();
177
        fViewer.refresh();
144
    }
178
    }
179
    
180
    public void testViewerLabelProvider() {
181
		TreeViewer tableviewer = (TreeViewer) fViewer;
182
		tableviewer.setLabelProvider(new TableTreeTestViewerLabelProvider());
183
		System.err.println(getItemText(0));
184
		assertTrue(getItemText(0).startsWith("ViewerLabelProvider-"));
185
		tableviewer.setLabelProvider(new TableTreeTestLabelProvider());
186
	}
187
    
188
    public void testTreeLabelProvider() {
189
		TreeViewer tableviewer = (TreeViewer) fViewer;
190
		tableviewer.setLabelProvider(new TableTreeTestTreeLabelprovider());
191
		assertTrue(getItemText(0).startsWith("TreePath-1"));
192
		tableviewer.setLabelProvider(new TableTreeTestLabelProvider());
193
	}
145
}
194
}

Return to bug 174355