1 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 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 element, String property) { 51 return true; 52 } 53 54 public void removeListener(ILabelProviderListener listener) { 55 listeners.remove(listener); 56 } 57 58 private void fireLabelsChanged(Object [] elements) { 59 LabelProviderChangedEvent event = new LabelProviderChangedEvent( 60 this, elements); 61 Object [] 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 element) { 69 Object 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 element) { 84 Object 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 getText(Object element) { 94 Object 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 ""; } 104 } 105 106 } 107 108 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 [] 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 element) { 132 ((AbstractListViewer) getViewer()).add(element); 133 } 134 135 protected void addToViewer(Object [] elements) { 136 ((AbstractListViewer) getViewer()).add(elements); 137 } 138 139 protected void removeFromViewer(Object element) { 140 ((AbstractListViewer) getViewer()).remove(element); 141 } 142 143 protected void removeFromViewer(Object [] elements) { 144 ((AbstractListViewer) getViewer()).remove(elements); 145 } 146 147 protected void addToViewer(int index, Object element) { 148 getViewer().refresh(); 150 } 151 152 155 public void setModelToTargetConverters(IConverter[] converters) { 156 this.modelToTargetConverters = converters; 157 } 158 } 159 | Popular Tags |