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.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 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 getColumnValue(Object element, int columnIndex) { 47 Object object = labelMapping.getMappingValues(element, 48 new int[] { columnIndex })[0]; 49 return convertColumnValue(object, columnIndex); 50 } 51 52 57 private Object convertColumnValue(Object 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 ("A converter was not specified for column index " + columnIndex); } 71 return object; 72 } 73 74 private ViewerLabel getColumnValueAsViewerLabel(Object element, 75 int columnIndex) { 76 Object columnValue = getColumnValue(element, columnIndex); 77 if (columnValue instanceof ViewerLabel) { 78 return (ViewerLabel) columnValue; 79 } 80 return null; 81 } 82 83 public Image getColumnImage(Object element, int columnIndex) { 84 ViewerLabel columnValue = getColumnValueAsViewerLabel(element, 85 columnIndex); 86 return columnValue == null ? null : columnValue.getImage(); 87 } 88 89 public String getColumnText(Object element, int columnIndex) { 90 Object 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 ""; } 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 element, String property) { 108 return true; 109 } 110 111 public void removeListener(ILabelProviderListener listener) { 112 listeners.remove(listener); 113 } 114 115 private void fireLabelsChanged(Object [] elements) { 116 LabelProviderChangedEvent event = new LabelProviderChangedEvent( 117 this, elements); 118 Object [] 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 element, int columnIndex) { 126 ViewerLabel columnValue = getColumnValueAsViewerLabel(element, 127 columnIndex); 128 return columnValue == null ? null : columnValue.getForeground(); 129 } 130 131 public Color getBackground(Object element, int columnIndex) { 132 ViewerLabel columnValue = getColumnValueAsViewerLabel(element, 133 columnIndex); 134 return columnValue == null ? null : columnValue.getBackground(); 135 } 136 137 public Font getFont(Object element, int columnIndex) { 138 ViewerLabel columnValue = getColumnValueAsViewerLabel(element, 139 columnIndex); 140 return columnValue == null ? null : columnValue.getFont(); 141 } 142 143 } 144 145 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 [] 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 element) { 168 ((TableViewer) getViewer()).add(element); 169 } 170 171 protected void addToViewer(Object [] elements) { 172 ((TableViewer) getViewer()).add(elements); 173 } 174 175 protected void removeFromViewer(Object element) { 176 ((TableViewer) getViewer()).remove(element); 177 } 178 179 protected void removeFromViewer(Object [] elements) { 180 ((TableViewer) getViewer()).remove(elements); 181 } 182 183 protected void addToViewer(int index, Object element) { 184 ((TableViewer) getViewer()).insert(element, index); 185 } 186 187 190 public void setModelToTargetConverters(IConverter[] converters) { 191 this.modelToTargetConverters = converters; 192 } 193 } 194 | Popular Tags |