KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jface > internal > databinding > internal > viewers > TableViewerObservableCollectionWithLabels


1 /*******************************************************************************
2  * Copyright (c) 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  ******************************************************************************/

11
12 package org.eclipse.jface.internal.databinding.internal.viewers;
13
14 import org.eclipse.jface.internal.databinding.provisional.conversion.IConverter;
15 import org.eclipse.jface.internal.databinding.provisional.observable.mapping.IMultiMapping;
16 import org.eclipse.jface.util.ListenerList;
17 import org.eclipse.jface.viewers.ILabelProviderListener;
18 import org.eclipse.jface.viewers.ITableColorProvider;
19 import org.eclipse.jface.viewers.ITableFontProvider;
20 import org.eclipse.jface.viewers.ITableLabelProvider;
21 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
22 import org.eclipse.jface.viewers.TableViewer;
23 import org.eclipse.jface.viewers.ViewerLabel;
24 import org.eclipse.swt.graphics.Color;
25 import org.eclipse.swt.graphics.Font;
26 import org.eclipse.swt.graphics.Image;
27
28 /**
29  * @since 3.2
30  *
31  */

32 public class TableViewerObservableCollectionWithLabels extends
33         StructuredViewerObservableCollectionWithLabels {
34
35     private TabelLabelProvider labelProvider = new TabelLabelProvider();
36
37     private IMultiMapping labelMapping;
38     
39     private IConverter[] modelToTargetConverters;
40
41     private class TabelLabelProvider implements ITableLabelProvider,
42             ITableColorProvider, ITableFontProvider {
43
44         ListenerList listeners = new ListenerList();
45
46         private Object JavaDoc getColumnValue(Object JavaDoc element, int columnIndex) {
47             Object JavaDoc object = labelMapping.getMappingValues(element,
48                     new int[] { columnIndex })[0];
49             return convertColumnValue(object, columnIndex);
50         }
51         
52         /**
53          * @param object
54          * @param columnIndex
55          * @return converted value
56          */

57         private Object JavaDoc convertColumnValue(Object JavaDoc object, int columnIndex) {
58             if (modelToTargetConverters[0] != null) {
59                 if (modelToTargetConverters.length == 1) {
60                     return modelToTargetConverters[0].convert(object);
61                 }
62
63                 if (modelToTargetConverters.length >= columnIndex) {
64                     if (modelToTargetConverters[columnIndex] != null) {
65                         return modelToTargetConverters[columnIndex].convert(object);
66                     }
67                     return object;
68                 }
69                 throw new IllegalStateException JavaDoc("A converter was not specified for column index " + columnIndex); //$NON-NLS-1$
70
}
71             return object;
72         }
73
74         private ViewerLabel getColumnValueAsViewerLabel(Object JavaDoc element,
75                 int columnIndex) {
76             Object JavaDoc columnValue = getColumnValue(element, columnIndex);
77             if (columnValue instanceof ViewerLabel) {
78                 return (ViewerLabel) columnValue;
79             }
80             return null;
81         }
82
83         public Image getColumnImage(Object JavaDoc element, int columnIndex) {
84             ViewerLabel columnValue = getColumnValueAsViewerLabel(element,
85                     columnIndex);
86             return columnValue == null ? null : columnValue.getImage();
87         }
88
89         public String JavaDoc getColumnText(Object JavaDoc element, int columnIndex) {
90             Object JavaDoc columnValue = getColumnValue(element, columnIndex);
91             if (columnValue instanceof ViewerLabel) {
92                 return ((ViewerLabel) columnValue).getText();
93             } else if (columnValue != null) {
94                 return columnValue.toString();
95             }
96             return ""; //$NON-NLS-1$
97
}
98
99         public void addListener(ILabelProviderListener listener) {
100             listeners.add(listener);
101         }
102
103         public void dispose() {
104             listeners.clear();
105         }
106
107         public boolean isLabelProperty(Object JavaDoc element, String JavaDoc property) {
108             return true;
109         }
110
111         public void removeListener(ILabelProviderListener listener) {
112             listeners.remove(listener);
113         }
114
115         private void fireLabelsChanged(Object JavaDoc[] elements) {
116             LabelProviderChangedEvent event = new LabelProviderChangedEvent(
117                     this, elements);
118             Object JavaDoc[] listenerArray = listeners.getListeners();
119             for (int i = 0; i < listenerArray.length; i++) {
120                 ILabelProviderListener listener = (ILabelProviderListener) listenerArray[i];
121                 listener.labelProviderChanged(event);
122             }
123         }
124
125         public Color getForeground(Object JavaDoc element, int columnIndex) {
126             ViewerLabel columnValue = getColumnValueAsViewerLabel(element,
127                     columnIndex);
128             return columnValue == null ? null : columnValue.getForeground();
129         }
130
131         public Color getBackground(Object JavaDoc element, int columnIndex) {
132             ViewerLabel columnValue = getColumnValueAsViewerLabel(element,
133                     columnIndex);
134             return columnValue == null ? null : columnValue.getBackground();
135         }
136
137         public Font getFont(Object JavaDoc element, int columnIndex) {
138             ViewerLabel columnValue = getColumnValueAsViewerLabel(element,
139                     columnIndex);
140             return columnValue == null ? null : columnValue.getFont();
141         }
142
143     }
144
145     /**
146      * @param tableViewer
147      */

148     public TableViewerObservableCollectionWithLabels(TableViewer tableViewer) {
149         super(tableViewer);
150     }
151
152     public void init(IMultiMapping labelMapping) {
153         this.labelMapping = labelMapping;
154         getViewer().setLabelProvider(labelProvider);
155     }
156
157     public void updateElements(Object JavaDoc[] elements) {
158         labelProvider.fireLabelsChanged(elements);
159     }
160
161     public void dispose() {
162         super.dispose();
163         labelProvider = null;
164         labelMapping = null;
165     }
166
167     protected void addToViewer(Object JavaDoc element) {
168         ((TableViewer) getViewer()).add(element);
169     }
170
171     protected void addToViewer(Object JavaDoc[] elements) {
172         ((TableViewer) getViewer()).add(elements);
173     }
174
175     protected void removeFromViewer(Object JavaDoc element) {
176         ((TableViewer) getViewer()).remove(element);
177     }
178
179     protected void removeFromViewer(Object JavaDoc[] elements) {
180         ((TableViewer) getViewer()).remove(elements);
181     }
182
183     protected void addToViewer(int index, Object JavaDoc element) {
184         ((TableViewer) getViewer()).insert(element, index);
185     }
186
187     /**
188      * @param converters
189      */

190     public void setModelToTargetConverters(IConverter[] converters) {
191         this.modelToTargetConverters = converters;
192     }
193 }
194
Popular Tags