KickJava   Java API By Example, From Geeks To Geeks.

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


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.AbstractListViewer;
18 import org.eclipse.jface.viewers.ILabelProvider;
19 import org.eclipse.jface.viewers.ILabelProviderListener;
20 import org.eclipse.jface.viewers.IViewerLabelProvider;
21 import org.eclipse.jface.viewers.LabelProviderChangedEvent;
22 import org.eclipse.jface.viewers.ViewerLabel;
23 import org.eclipse.swt.graphics.Image;
24
25 /**
26  * @since 3.2
27  *
28  */

29 public class AbstractListViewerObservableCollectionWithLabels extends
30         StructuredViewerObservableCollectionWithLabels {
31
32     private LabelProvider labelProvider = new LabelProvider();
33
34     private IMultiMapping labelMapping;
35     
36     protected IConverter[] modelToTargetConverters;
37
38     private class LabelProvider implements IViewerLabelProvider, ILabelProvider {
39
40         ListenerList listeners = new ListenerList();
41
42         public void addListener(ILabelProviderListener listener) {
43             listeners.add(listener);
44         }
45
46         public void dispose() {
47             listeners.clear();
48         }
49
50         public boolean isLabelProperty(Object JavaDoc element, String JavaDoc property) {
51             return true;
52         }
53
54         public void removeListener(ILabelProviderListener listener) {
55             listeners.remove(listener);
56         }
57
58         private void fireLabelsChanged(Object JavaDoc[] elements) {
59             LabelProviderChangedEvent event = new LabelProviderChangedEvent(
60                     this, elements);
61             Object JavaDoc[] listenerArray = listeners.getListeners();
62             for (int i = 0; i < listenerArray.length; i++) {
63                 ILabelProviderListener listener = (ILabelProviderListener) listenerArray[i];
64                 listener.labelProviderChanged(event);
65             }
66         }
67
68         public void updateLabel(ViewerLabel label, Object JavaDoc element) {
69             Object JavaDoc mapping = labelMapping.getMappingValues(element,
70                     new int[] { 0 })[0];
71             if (mapping instanceof ViewerLabel) {
72                 ViewerLabel viewerLabel = (ViewerLabel) mapping;
73                 label.setBackground(viewerLabel.getBackground());
74                 label.setForeground(viewerLabel.getForeground());
75                 label.setFont(viewerLabel.getFont());
76                 label.setImage(viewerLabel.getImage());
77                 label.setText(viewerLabel.getText());
78             } else if (mapping != null) {
79                 label.setText(mapping.toString());
80             }
81         }
82
83         public Image getImage(Object JavaDoc element) {
84             Object JavaDoc mapping = labelMapping.getMappingValues(element,
85                     new int[] { 0 })[0];
86             if (mapping instanceof ViewerLabel) {
87                 ViewerLabel viewerLabel = (ViewerLabel) mapping;
88                 return viewerLabel.getImage();
89             }
90             return null;
91         }
92
93         public String JavaDoc getText(Object JavaDoc element) {
94             Object JavaDoc mapping = labelMapping.getMappingValues(element,
95                     new int[] { 0 })[0];
96             if (mapping instanceof ViewerLabel) {
97                 ViewerLabel viewerLabel = (ViewerLabel) mapping;
98                 return viewerLabel.getText();
99             } else if (mapping != null) {
100                 return mapping.toString();
101             } else {
102                 return ""; //$NON-NLS-1$
103
}
104         }
105
106     }
107
108     /**
109      * @param abstractListViewer
110      */

111     public AbstractListViewerObservableCollectionWithLabels(
112             AbstractListViewer abstractListViewer) {
113         super(abstractListViewer);
114     }
115
116     public void init(IMultiMapping labelMapping) {
117         this.labelMapping = labelMapping;
118         getViewer().setLabelProvider(labelProvider);
119     }
120
121     public void updateElements(Object JavaDoc[] elements) {
122         labelProvider.fireLabelsChanged(elements);
123     }
124
125     public void dispose() {
126         super.dispose();
127         labelProvider = null;
128         labelMapping = null;
129     }
130
131     protected void addToViewer(Object JavaDoc element) {
132         ((AbstractListViewer) getViewer()).add(element);
133     }
134
135     protected void addToViewer(Object JavaDoc[] elements) {
136         ((AbstractListViewer) getViewer()).add(elements);
137     }
138
139     protected void removeFromViewer(Object JavaDoc element) {
140         ((AbstractListViewer) getViewer()).remove(element);
141     }
142
143     protected void removeFromViewer(Object JavaDoc[] elements) {
144         ((AbstractListViewer) getViewer()).remove(elements);
145     }
146
147     protected void addToViewer(int index, Object JavaDoc element) {
148         // since there is no insert(index, element), we need to refresh
149
getViewer().refresh();
150     }
151
152     /* (non-Javadoc)
153      * @see org.eclipse.jface.internal.databinding.provisional.viewers.IObservableCollectionWithLabels#setModelToTargetConverters(org.eclipse.jface.internal.databinding.provisional.conversion.IConverter[])
154      */

155     public void setModelToTargetConverters(IConverter[] converters) {
156         this.modelToTargetConverters = converters;
157     }
158 }
159
Popular Tags