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

(-)Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TableViewerTest.java (-3 / +18 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
	}
61
	
52
	public TableViewerTest(String name) {
62
	public TableViewerTest(String name) {
53
		super(name);
63
		super(name);
54
	}
64
	}
Lines 183-188 Link Here
183
193
184
	}
194
	}
185
195
186
	
196
	public void testViewerLabelProvider() {
197
		TableViewer tableviewer = (TableViewer) fViewer;
198
		tableviewer.setLabelProvider(new TableTestViewerLabelProvider());
199
		assertTrue(getItemText(0).startsWith("ViewerLabelProvider-"));
200
		tableviewer.setLabelProvider(new TableTestLabelProvider());
201
	}
187
202
188
}
203
}
(-)Eclipse JFace Tests/org/eclipse/jface/tests/viewers/TreeViewerColumnTest.java (-1 / +35 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
	}
62
    
63
    public static class TableTreeTestTreeLabelprovider extends TableTreeTestLabelProvider implements ITreePathLabelProvider {
64
65
		public void updateLabel(ViewerLabel label, TreePath elementPath) {
66
			label.setText("TreePath-" + elementPath.getSegmentCount());
67
		}
68
    	
69
    }
70
    
51
    public TreeViewerColumnTest(String name) {
71
    public TreeViewerColumnTest(String name) {
52
        super(name);
72
        super(name);
53
    }
73
    }
Lines 142-145 Link Here
142
        // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
162
        // BUG 1FZ5SDC: JFUIF:WINNT - TableViewerColumn should listen for LabelProvider changes
143
        fViewer.refresh();
163
        fViewer.refresh();
144
    }
164
    }
165
    
166
    public void testViewerLabelProvider() {
167
		TreeViewer tableviewer = (TreeViewer) fViewer;
168
		tableviewer.setLabelProvider(new TableTreeTestViewerLabelProvider());
169
		assertTrue(getItemText(0).startsWith("ViewerLabelProvider-"));
170
		tableviewer.setLabelProvider(new TableTreeTestLabelProvider());
171
	}
172
    
173
    public void testTreeLabelProvider() {
174
		TreeViewer tableviewer = (TreeViewer) fViewer;
175
		tableviewer.setLabelProvider(new TableTreeTestTreeLabelprovider());
176
		assertTrue(getItemText(0).startsWith("TreePath-1"));
177
		tableviewer.setLabelProvider(new TableTreeTestLabelProvider());
178
	}
145
}
179
}
(-)src/org/eclipse/jface/viewers/TableViewerRow.java (+5 lines)
Lines 181-184 Link Here
181
		return null;
181
		return null;
182
	}
182
	}
183
183
184
	public TreePath getTreePath() {
185
		// Tables don't support paths
186
		return null;
187
	}
188
184
}
189
}
(-)src/org/eclipse/jface/viewers/ColumnLabelProvider.java (-7 / +21 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Tom Schindl <tom.schindl@bestsolution.at> - Fix for bug 174355
10
 ******************************************************************************/
11
 ******************************************************************************/
11
12
12
package org.eclipse.jface.viewers;
13
package org.eclipse.jface.viewers;
Lines 32-45 Link Here
32
	 * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
33
	 * @see org.eclipse.jface.viewers.CellLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
33
	 */
34
	 */
34
	public void update(ViewerCell cell) {
35
	public void update(ViewerCell cell) {
35
		cell.setText(getText(cell.getElement()));
36
		update(cell, buildLabel(cell));
36
		cell.setImage(getImage(cell.getElement()));
37
		cell.setBackground(getBackground(cell.getElement()));
38
		cell.setForeground(getForeground(cell.getElement()));
39
		cell.setFont(getFont(cell.getElement()));
40
41
	}
37
	}
42
38
	
39
	/**
40
	 * @param cell the cell the label is built for
41
	 * @return the newly created label
42
	 */
43
	protected ViewerLabel buildLabel(ViewerCell cell) {
44
		Object element = cell.getElement();
45
		ViewerLabel label = new ViewerLabel(cell.getText(),cell.getImage());
46
47
		// Set up the initial settings from the label provider
48
		label.setBackground(getBackground(element));
49
		label.setForeground(getForeground(element));
50
		label.setFont(getFont(element));
51
		label.setText(getText(element));
52
		label.setImage(getImage(element));
53
		
54
		return label;
55
	}
56
	
43
	/* (non-Javadoc)
57
	/* (non-Javadoc)
44
	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
58
	 * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object)
45
	 */
59
	 */
(-)src/org/eclipse/jface/viewers/DecoratingLabelProvider.java (-10 / +2 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Tom Schindl <tom.schindl@bestsolution.at> - Fix for bug 174355
10
 *******************************************************************************/
11
 *******************************************************************************/
11
package org.eclipse.jface.viewers;
12
package org.eclipse.jface.viewers;
12
13
Lines 471-485 Link Here
471
		label.setFont(getFont(cell.getElement()));
472
		label.setFont(getFont(cell.getElement()));
472
473
473
		updateLabel(label, cell.getElement());
474
		updateLabel(label, cell.getElement());
474
475
		update(cell, label);
475
		cell.setBackground(label.getBackground());
476
		cell.setForeground(label.getForeground());
477
		cell.setFont(label.getFont());
478
479
		if (label.hasNewText())
480
			cell.setText(label.getText());
481
482
		if (label.hasNewImage())
483
			cell.setImage(label.getImage());
484
	}
476
	}
485
}
477
}
(-)src/org/eclipse/jface/viewers/WrappedViewerLabelProvider.java (+25 lines)
Lines 7-12 Link Here
7
 *
7
 *
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Tom Schindl <tom.schindl@bestsolution.at> - Fix for bug 174355
10
 ******************************************************************************/
11
 ******************************************************************************/
11
12
12
package org.eclipse.jface.viewers;
13
package org.eclipse.jface.viewers;
Lines 33-38 Link Here
33
34
34
	private IFontProvider fontProvider;
35
	private IFontProvider fontProvider;
35
36
37
	private IViewerLabelProvider viewerLabelProvider;
38
	
39
	private ITreePathLabelProvider treePathLabelProvider;
40
	
36
	/**
41
	/**
37
	 * Create a new instance of the receiver based on labelProvider.
42
	 * Create a new instance of the receiver based on labelProvider.
38
	 * 
43
	 * 
Lines 59-64 Link Here
59
		if (provider instanceof IFontProvider)
64
		if (provider instanceof IFontProvider)
60
			fontProvider = (IFontProvider) provider;
65
			fontProvider = (IFontProvider) provider;
61
66
67
		if(provider instanceof IViewerLabelProvider)
68
			viewerLabelProvider = (IViewerLabelProvider) provider;
69
		
70
		if(provider instanceof ITreePathLabelProvider)
71
			treePathLabelProvider = (ITreePathLabelProvider) provider;
62
	}
72
	}
63
73
64
	/*
74
	/*
Lines 115-120 Link Here
115
		return colorProvider.getForeground(element);
125
		return colorProvider.getForeground(element);
116
	}
126
	}
117
127
128
	public void update(ViewerCell cell, ViewerLabel label) {
129
		if( treePathLabelProvider != null ) {
130
			TreePath path = cell.getViewerRow().getTreePath();
131
			if( path != null ) {
132
				treePathLabelProvider.updateLabel(label, path);
133
			}
134
		}
135
136
		if( viewerLabelProvider != null ) {
137
			viewerLabelProvider.updateLabel(label, cell.getElement());
138
		}
139
				
140
		super.update(cell,label);
141
	}
142
		
118
	/**
143
	/**
119
	 * Get the lable provider
144
	 * Get the lable provider
120
	 * @return {@link ILabelProvider}
145
	 * @return {@link ILabelProvider}
(-)src/org/eclipse/jface/viewers/TreeViewerRow.java (-3 / +16 lines)
Lines 12-17 Link Here
12
12
13
package org.eclipse.jface.viewers;
13
package org.eclipse.jface.viewers;
14
14
15
import java.util.ArrayList;
16
15
import org.eclipse.swt.graphics.Color;
17
import org.eclipse.swt.graphics.Color;
16
import org.eclipse.swt.graphics.Font;
18
import org.eclipse.swt.graphics.Font;
17
import org.eclipse.swt.graphics.Image;
19
import org.eclipse.swt.graphics.Image;
Lines 293-298 Link Here
293
		
295
		
294
		return rv;
296
		return rv;
295
	}
297
	}
296
	
298
297
	
299
	public TreePath getTreePath() {
298
}
300
		ArrayList path = new ArrayList();
301
		path.add(item.getData());
302
		
303
		TreeItem parent = item;
304
		
305
		while( (parent = parent.getParentItem()) != null ) {
306
			path.add(0,parent.getData());
307
		}
308
		
309
		return new TreePath(path.toArray());
310
	}
311
}
(-)src/org/eclipse/jface/viewers/TableColumnViewerLabelProvider.java (-22 / +12 lines)
Lines 63-100 Link Here
63
	 * @see org.eclipse.jface.viewers.WrappedViewerLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
63
	 * @see org.eclipse.jface.viewers.WrappedViewerLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
64
	 */
64
	 */
65
	public void update(ViewerCell cell) {
65
	public void update(ViewerCell cell) {
66
66
		ViewerLabel label = buildLabel(cell);
67
		
67
		Object element = cell.getElement();
68
		Object element = cell.getElement();
68
		int index = cell.getColumnIndex();
69
		int index = cell.getColumnIndex();
69
70
70
		if (tableLabelProvider == null) {
71
		if (tableLabelProvider != null) {
71
			cell.setText(getLabelProvider().getText(element));
72
			label.setText(tableLabelProvider.getColumnText(element, index));
72
			cell.setImage(getLabelProvider().getImage(element));
73
			label.setImage(tableLabelProvider.getColumnImage(element, index));
73
		} else {
74
			cell.setText(tableLabelProvider.getColumnText(element, index));
75
			cell.setImage(tableLabelProvider.getColumnImage(element, index));
76
		}
74
		}
77
75
78
		if (tableColorProvider == null) {
76
		if (tableColorProvider != null) {
79
			if (getColorProvider() != null) {
77
			label.setBackground(tableColorProvider
80
				cell.setBackground(getColorProvider().getBackground(element));
81
				cell.setForeground(getColorProvider().getForeground(element));
82
			}
83
84
		} else {
85
			cell.setBackground(tableColorProvider
86
					.getBackground(element, index));
78
					.getBackground(element, index));
87
			cell.setForeground(tableColorProvider
79
			label.setForeground(tableColorProvider
88
					.getForeground(element, index));
80
					.getForeground(element, index));
89
90
		}
81
		}
91
82
92
		if (tableFontProvider == null) {
83
		if (tableFontProvider != null) {
93
			if (getFontProvider() != null)
84
			label.setFont(tableFontProvider.getFont(element, index));
94
				cell.setFont(getFontProvider().getFont(element));
85
		}
95
		} else
96
			cell.setFont(tableFontProvider.getFont(element, index));
97
86
87
		update(cell, label);
98
	}
88
	}
99
89
100
90
(-)src/org/eclipse/jface/viewers/ViewerRow.java (-4 / +10 lines)
Lines 40-51 Link Here
40
40
41
	/**
41
	/**
42
	 * Constant denoting the row above the current one (value is 1).
42
	 * Constant denoting the row above the current one (value is 1).
43
	 * 
43
	 * @see #getNeighbor(int, boolean)
44
	 * @see #getNeighbor(int, boolean)
44
	 */
45
	 */
45
	public static final int ABOVE = 1;
46
	public static final int ABOVE = 1;
46
47
47
	/**
48
	/**
48
	 * Constant denoting the row below the current one (value is 2).
49
	 * Constant denoting the row below the current one (value is 2).
50
	 * 
49
	 * @see #getNeighbor(int, boolean)
51
	 * @see #getNeighbor(int, boolean)
50
	 */
52
	 */
51
	public static final int BELOW = 2;
53
	public static final int BELOW = 2;
Lines 224-233 Link Here
224
	public abstract Control getControl();
226
	public abstract Control getControl();
225
227
226
	/**
228
	/**
227
	 * Returns a neighboring row, or <code>null</code> if no
229
	 * Returns a neighboring row, or <code>null</code> if no neighbor exists
228
	 * neighbor exists in the given direction. If <code>sameLevel</code> is
230
	 * in the given direction. If <code>sameLevel</code> is <code>true</code>,
229
	 * <code>true</code>, only sibling rows (under the same parent) will be
231
	 * only sibling rows (under the same parent) will be considered.
230
	 * considered.
231
	 * 
232
	 * 
232
	 * @param direction
233
	 * @param direction
233
	 *            the direction {@link #BELOW} or {@link #ABOVE}
234
	 *            the direction {@link #BELOW} or {@link #ABOVE}
Lines 238-241 Link Here
238
	 */
239
	 */
239
	public abstract ViewerRow getNeighbor(int direction, boolean sameLevel);
240
	public abstract ViewerRow getNeighbor(int direction, boolean sameLevel);
240
241
242
	/**
243
	 * The tree path used to identify an element by the unique path
244
	 * @return the path or <code>null</code> if no path exists
245
	 */
246
	public abstract TreePath getTreePath();
241
}
247
}
(-)src/org/eclipse/jface/viewers/CellLabelProvider.java (-4 / +37 lines)
Lines 8-13 Link Here
8
 * Contributors:
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
9
 *     IBM Corporation - initial API and implementation
10
 *     Tom Shindl <tom.schindl@bestsolution.at> - initial API and implementation
10
 *     Tom Shindl <tom.schindl@bestsolution.at> - initial API and implementation
11
 *     											- Fix for bug 174355
11
 ******************************************************************************/
12
 ******************************************************************************/
12
13
13
package org.eclipse.jface.viewers;
14
package org.eclipse.jface.viewers;
Lines 29-36 Link Here
29
 *        Platform/UI team.
30
 *        Platform/UI team.
30
 */
31
 */
31
public abstract class CellLabelProvider extends BaseLabelProvider  {
32
public abstract class CellLabelProvider extends BaseLabelProvider  {
32
33
		
33
34
	/**
34
	/**
35
	 * Create a new instance of the receiver.
35
	 * Create a new instance of the receiver.
36
	 */
36
	 */
Lines 52-59 Link Here
52
				|| labelProvider instanceof ITableColorProvider
52
				|| labelProvider instanceof ITableColorProvider
53
				|| labelProvider instanceof ITableFontProvider)
53
				|| labelProvider instanceof ITableFontProvider)
54
			return new TableColumnViewerLabelProvider(labelProvider);
54
			return new TableColumnViewerLabelProvider(labelProvider);
55
		if (labelProvider instanceof CellLabelProvider)
55
		
56
		if (labelProvider instanceof CellLabelProvider) {
56
			return (CellLabelProvider) labelProvider;
57
			return (CellLabelProvider) labelProvider;
58
		}
59
		
57
		return new WrappedViewerLabelProvider(labelProvider);
60
		return new WrappedViewerLabelProvider(labelProvider);
58
61
59
	}
62
	}
Lines 193-196 Link Here
193
	 */
196
	 */
194
	public abstract void update(ViewerCell cell);
197
	public abstract void update(ViewerCell cell);
195
198
196
}
199
	/**
200
	 * update the cell using the informations provided by {@link ViewerLabel} 
201
	 * @param cell the cell
202
	 * @param label the label holding informations
203
	 */
204
	void update(ViewerCell cell, ViewerLabel label) {
205
		
206
		//FIXME Should we deprecate the usage of those 2 interfaces and describe how this can 
207
		//be achieved by subclassing and overloading buildLabel() => WrappedViewerLabelProvider does that
208
		if( this instanceof ITreePathLabelProvider ) {
209
			TreePath path = cell.getViewerRow().getTreePath();
210
			if( path != null ) {
211
				((ITreePathLabelProvider)this).updateLabel(label, path);
212
			}
213
		}
214
215
		if( this instanceof IViewerLabelProvider ) {
216
			((IViewerLabelProvider)this).updateLabel(label, cell.getElement());
217
		}
218
				
219
		cell.setBackground(label.getBackground());
220
		cell.setForeground(label.getForeground());
221
		cell.setFont(label.getFont());
222
223
		if (label.hasNewText())
224
			cell.setText(label.getText());
225
226
		if (label.hasNewImage())
227
			cell.setImage(label.getImage());
228
	}
229
}

Return to bug 174355