public void handleListChange(ListChangeEvent event) { ListDiffEntry[] differences = event.diff.getDifferences(); for (int i = 0; i < differences.length; i++) { ListDiffEntry entry = differences[i]; if (entry.isAddition()) { listenerSupport.hookListener(entry.getElement()); } else { listenerSupport.unhookListener(entry.getElement()); } } }
/** * * (non-Javadoc) * * @see * org.eclipse.jface.databinding.viewers.ObservableListContentProvider#inputChanged * (org.eclipse.jface.viewers.Viewer, * java.lang.Object, java.lang.Object) */ @SuppressWarnings("unchecked") @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { listenerSupport.unhookAllTargets(); if (observableList != null) { observableList.removeListChangeListener(listener); observableList = null; } super.inputChanged(viewer, oldInput, newInput); this.viewer = (StructuredViewer) viewer; observableList = (ObservableList) newInput; if (observableList != null) { observableList.addListChangeListener(listener); for (Iterator iterator = observableList.iterator(); iterator.hasNext(); ) { listenerSupport.hookListener(iterator.next()); } } }
protected void firstListenerAdded() { PropertyChangeListener listener = new PropertyChangeListener() { public void propertyChange(java.beans.PropertyChangeEvent event) { if (!updating) { final ValueDiff diff = Diffs.createValueDiff(event.getOldValue(), event.getNewValue()); getRealm() .exec( new Runnable() { public void run() { fireValueChange(diff); } }); } } }; if (listenerSupport == null) { listenerSupport = new ListenerSupport(listener, propertyDescriptor.getName()); } listenerSupport.hookListener(object); }
private void unhookListener() { if (listenerSupport != null) { listenerSupport.dispose(); } }