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