1 11 12 package org.eclipse.jface.databinding.viewers; 13 14 import java.util.Iterator ; 15 16 import org.eclipse.core.databinding.observable.set.IObservableSet; 17 import org.eclipse.core.databinding.observable.set.ISetChangeListener; 18 import org.eclipse.core.databinding.observable.set.SetChangeEvent; 19 import org.eclipse.jface.internal.databinding.provisional.viewers.ViewerLabelProvider; 20 21 25 public abstract class ListeningLabelProvider extends ViewerLabelProvider { 26 27 private ISetChangeListener listener = new ISetChangeListener() { 28 public void handleSetChange(SetChangeEvent event) { 29 for (Iterator it = event.diff.getAdditions().iterator(); it.hasNext();) { 30 addListenerTo(it.next()); 31 } 32 for (Iterator it = event.diff.getRemovals().iterator(); it.hasNext();) { 33 removeListenerFrom(it.next()); 34 } 35 } 36 }; 37 38 private IObservableSet items; 39 40 43 public ListeningLabelProvider(IObservableSet itemsThatNeedLabels) { 44 this.items = itemsThatNeedLabels; 45 items.addSetChangeListener(listener); 46 for (Iterator it = items.iterator(); it.hasNext();) { 47 addListenerTo(it.next()); 48 } 49 } 50 51 54 protected abstract void removeListenerFrom(Object next); 55 56 59 protected abstract void addListenerTo(Object next); 60 61 public void dispose() { 62 for (Iterator iter = items.iterator(); iter.hasNext();) { 63 removeListenerFrom(iter.next()); 64 } 65 items.removeSetChangeListener(listener); 66 super.dispose(); 67 } 68 } 69 | Popular Tags |