Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 113163 Details for
Bug 248174
[DataBinding] Retrofit ViewersObservables to use IProperty API
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Patch
clipboard.txt (text/plain), 96.37 KB, created by
Matthew Hall
on 2008-09-22 13:15:59 EDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Matthew Hall
Created:
2008-09-22 13:15:59 EDT
Size:
96.37 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jface.tests.databinding >Index: src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java,v >retrieving revision 1.1 >diff -u -r1.1 ViewerInputObservableValueTest.java >--- src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java 19 Mar 2008 23:03:19 -0000 1.1 >+++ src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java 22 Sep 2008 17:15:34 -0000 >@@ -18,10 +18,12 @@ > import org.eclipse.core.databinding.observable.Realm; > import org.eclipse.core.databinding.observable.value.IObservableValue; > import org.eclipse.core.databinding.observable.value.ValueChangeEvent; >+import org.eclipse.core.databinding.property.PropertyObservables; > import org.eclipse.jface.databinding.conformance.MutableObservableValueContractTest; > import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate; > import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker; >-import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue; >+import org.eclipse.jface.databinding.viewers.ViewerProperties; >+import org.eclipse.jface.databinding.viewers.ViewersObservables; > import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; > import org.eclipse.jface.viewers.IStructuredContentProvider; > import org.eclipse.jface.viewers.TableViewer; >@@ -55,16 +57,16 @@ > > public void testConstructor_IllegalArgumentException() { > try { >- new ViewerInputObservableValue(Realm.getDefault(), null); >+ ViewersObservables.observeInput(null); > fail("Expected IllegalArgumentException for null argument"); > } catch (IllegalArgumentException expected) { > } > } > > public void testSetInputOnViewer_FiresNoChangeEvents() { >- IObservableValue observable = new ViewerInputObservableValue(Realm >- .getDefault(), viewer); >- ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable); >+ IObservableValue observable = ViewersObservables.observeInput(viewer); >+ ValueChangeEventTracker listener = ValueChangeEventTracker >+ .observe(observable); > > assertNull(viewer.getInput()); > assertEquals(0, listener.count); >@@ -81,8 +83,7 @@ > } > > public void testGetSetValue_FiresChangeEvents() { >- IObservableValue observable = new ViewerInputObservableValue(Realm >- .getDefault(), viewer); >+ IObservableValue observable = ViewersObservables.observeInput(viewer); > ValueChangeEventTracker listener = new ValueChangeEventTracker(); > observable.addValueChangeListener(listener); > >@@ -103,14 +104,12 @@ > } > > public void testGetValueType_AlwaysNull() throws Exception { >- IObservableValue observable = new ViewerInputObservableValue(Realm >- .getDefault(), viewer); >+ IObservableValue observable = ViewersObservables.observeInput(viewer); > assertEquals(null, observable.getValueType()); > } > > public void testDispose() throws Exception { >- IObservableValue observable = new ViewerInputObservableValue(Realm >- .getDefault(), viewer); >+ IObservableValue observable = ViewersObservables.observeInput(viewer); > observable.dispose(); > assertNull(observable.getRealm()); > try { >@@ -141,7 +140,8 @@ > } > > public static Test suite() { >- TestSuite suite = new TestSuite(ViewerInputObservableValueTest.class.getName()); >+ TestSuite suite = new TestSuite(ViewerInputObservableValueTest.class >+ .getName()); > suite.addTestSuite(ViewerInputObservableValueTest.class); > suite.addTest(MutableObservableValueContractTest.suite(new Delegate())); > return suite; >@@ -165,11 +165,12 @@ > } > > public IObservableValue createObservableValue(Realm realm) { >- return new ViewerInputObservableValue(realm, viewer); >+ return PropertyObservables.observeValue(realm, viewer, >+ ViewerProperties.input()); > } > > public void change(IObservable observable) { >- IObservableValue value = (IObservableValue)observable; >+ IObservableValue value = (IObservableValue) observable; > value.setValue(createValue(value)); > } > >Index: src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java,v >retrieving revision 1.1 >diff -u -r1.1 SelectionProviderSingleSelectionObservableValueTest.java >--- src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java 19 Mar 2008 23:03:19 -0000 1.1 >+++ src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java 22 Sep 2008 17:15:34 -0000 >@@ -14,16 +14,15 @@ > > import junit.framework.TestCase; > >+import org.eclipse.core.databinding.observable.value.IObservableValue; > import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker; >-import org.eclipse.jface.databinding.swt.SWTObservables; >-import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValue; >+import org.eclipse.jface.databinding.viewers.ViewersObservables; > import org.eclipse.jface.viewers.ISelectionProvider; > import org.eclipse.jface.viewers.IStructuredContentProvider; > import org.eclipse.jface.viewers.StructuredSelection; > import org.eclipse.jface.viewers.TableViewer; > import org.eclipse.jface.viewers.Viewer; > import org.eclipse.swt.SWT; >-import org.eclipse.swt.widgets.Display; > import org.eclipse.swt.widgets.Shell; > > /** >@@ -41,7 +40,7 @@ > > /* > * (non-Javadoc) >- * >+ * > * @see junit.framework.TestCase#setUp() > */ > protected void setUp() throws Exception { >@@ -54,7 +53,7 @@ > > /* > * (non-Javadoc) >- * >+ * > * @see junit.framework.TestCase#tearDown() > */ > protected void tearDown() throws Exception { >@@ -65,8 +64,7 @@ > > public void testConstructorIllegalArgumentException() { > try { >- new SelectionProviderSingleSelectionObservableValue(SWTObservables >- .getRealm(Display.getDefault()), null); >+ ViewersObservables.observeSingleSelection(null); > fail(); > } catch (IllegalArgumentException e) { > } >@@ -80,9 +78,8 @@ > * </ul> > */ > public void testGetSetValue() { >- SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue( >- SWTObservables.getRealm(Display.getDefault()), >- selectionProvider); >+ IObservableValue observable = ViewersObservables >+ .observeSingleSelection(selectionProvider); > ValueChangeEventTracker listener = new ValueChangeEventTracker(); > observable.addValueChangeListener(listener); > assertNull(observable.getValue()); >@@ -110,9 +107,8 @@ > } > > public void testDispose() throws Exception { >- SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue( >- SWTObservables.getRealm(Display.getDefault()), >- selectionProvider); >+ IObservableValue observable = ViewersObservables >+ .observeSingleSelection(selectionProvider); > ValueChangeEventTracker listener = new ValueChangeEventTracker(); > observable.addValueChangeListener(listener); > >Index: src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java,v >retrieving revision 1.1 >diff -u -r1.1 SelectionProviderMultiSelectionObservableListTest.java >--- src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java 19 Mar 2008 23:03:19 -0000 1.1 >+++ src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java 22 Sep 2008 17:15:34 -0000 >@@ -13,10 +13,10 @@ > > import junit.framework.TestCase; > >+import org.eclipse.core.databinding.observable.list.IObservableList; > import org.eclipse.core.databinding.observable.list.ListDiffEntry; > import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker; >-import org.eclipse.jface.databinding.swt.SWTObservables; >-import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionObservableList; >+import org.eclipse.jface.databinding.viewers.ViewersObservables; > import org.eclipse.jface.viewers.ISelectionProvider; > import org.eclipse.jface.viewers.IStructuredContentProvider; > import org.eclipse.jface.viewers.IStructuredSelection; >@@ -24,7 +24,6 @@ > import org.eclipse.jface.viewers.TableViewer; > import org.eclipse.jface.viewers.Viewer; > import org.eclipse.swt.SWT; >-import org.eclipse.swt.widgets.Display; > import org.eclipse.swt.widgets.Shell; > > /** >@@ -37,7 +36,7 @@ > > private TableViewer viewer; > >- private static String[] model = new String[] { "0", "1", "2", "3" }; >+ private static String[] model = new String[] { "element0", "element1", "element2", "element3" }; > > protected void setUp() throws Exception { > Shell shell = new Shell(); >@@ -55,8 +54,7 @@ > > public void testConstructorIllegalArgumentException() { > try { >- new SelectionProviderMultipleSelectionObservableList(SWTObservables >- .getRealm(Display.getDefault()), null, Object.class); >+ ViewersObservables.observeMultiSelection(null); > fail(); > } catch (IllegalArgumentException e) { > } >@@ -70,9 +68,8 @@ > * </ul> > */ > public void testAddRemove() { >- SelectionProviderMultipleSelectionObservableList observable = new SelectionProviderMultipleSelectionObservableList( >- SWTObservables.getRealm(Display.getDefault()), >- selectionProvider, Object.class); >+ IObservableList observable = ViewersObservables >+ .observeMultiSelection(selectionProvider); > ListChangeEventTracker listener = new ListChangeEventTracker(); > observable.addListChangeListener(listener); > assertEquals(0, observable.size()); >@@ -80,7 +77,8 @@ > selectionProvider.setSelection(new StructuredSelection(model[0])); > assertEquals(1, listener.count); > assertEquals(1, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[0], true); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[0], >+ true); > assertEquals(observable, listener.event.getObservableList()); > assertEquals(1, observable.size()); > assertEquals(model[0], observable.get(0)); >@@ -88,56 +86,70 @@ > selectionProvider.setSelection(new StructuredSelection(model[1])); > assertEquals(2, listener.count); > assertEquals(2, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], true); >- assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[0], false); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], >+ true); >+ assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[0], >+ false); > assertEquals(observable, listener.event.getObservableList()); > assertEquals(1, observable.size()); > assertEquals(model[1], observable.get(0)); > >- selectionProvider.setSelection(new StructuredSelection(new Object[]{model[2],model[3]})); >+ selectionProvider.setSelection(new StructuredSelection(new Object[] { >+ model[2], model[3] })); > assertEquals(3, listener.count); > assertEquals(3, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2], true); >- assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[3], true); >- assertDiffEntry(listener.event.diff.getDifferences()[2], 2, model[1], false); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2], >+ true); >+ assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[3], >+ true); >+ assertDiffEntry(listener.event.diff.getDifferences()[2], 2, model[1], >+ false); > assertEquals(observable, listener.event.getObservableList()); > assertEquals(2, observable.size()); > assertEquals(model[2], observable.get(0)); > assertEquals(model[3], observable.get(1)); >- >+ > selectionProvider.setSelection(StructuredSelection.EMPTY); > assertEquals(4, listener.count); > assertEquals(2, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[3], false); >- assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2], false); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[3], >+ false); >+ assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2], >+ false); > assertEquals(observable, listener.event.getObservableList()); > assertEquals(0, observable.size()); >- >+ > observable.add(model[1]); > assertEquals(5, listener.count); > assertEquals(1, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], true); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], >+ true); > assertEquals(observable, listener.event.getObservableList()); >- assertEquals(1, ((IStructuredSelection)viewer.getSelection()).size()); >+ assertEquals(1, ((IStructuredSelection) viewer.getSelection()).size()); > > observable.add(0, model[2]); > assertEquals(6, listener.count); > assertEquals(1, listener.event.diff.getDifferences().length); >- // This is a bit surprising (we added at index 0 but the event says index 1). >- // It is to the fact that the observable list tracks the underlying selection >+ // This is a bit surprising (we added at index 0 but the event says >+ // index 1). >+ // It is to the fact that the observable list tracks the underlying >+ // selection > // provider's notion of which element is at which index. >- assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[2], true); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2], >+ true); > assertEquals(observable, listener.event.getObservableList()); >- assertEquals(2, ((IStructuredSelection)viewer.getSelection()).size()); >+ assertEquals(2, ((IStructuredSelection) viewer.getSelection()).size()); > > observable.clear(); > assertEquals(7, listener.count); > assertEquals(2, listener.event.diff.getDifferences().length); >- assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[2], false); >- assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[1], false); >+ assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], >+ false); >+ assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2], >+ false); > assertEquals(observable, listener.event.getObservableList()); >- assertEquals(0, ((IStructuredSelection)viewer.getSelection()).size()); >-} >+ assertEquals(0, ((IStructuredSelection) viewer.getSelection()).size()); >+ } > > /** > * @param diffEntry >Index: src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.tests.databinding/src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java,v >retrieving revision 1.2 >diff -u -r1.2 ViewersObservablesTest.java >--- src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java 19 Mar 2008 23:03:20 -0000 1.2 >+++ src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java 22 Sep 2008 17:15:34 -0000 >@@ -11,11 +11,13 @@ > > package org.eclipse.jface.tests.databinding.viewers; > >+import org.eclipse.core.databinding.observable.IDecoratingObservable; > import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.value.IObservableValue; >+import org.eclipse.core.databinding.property.IPropertyObservable; > import org.eclipse.jface.databinding.swt.SWTObservables; >+import org.eclipse.jface.databinding.viewers.IViewerObservableValue; > import org.eclipse.jface.databinding.viewers.ViewersObservables; >-import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue; >+import org.eclipse.jface.internal.databinding.viewers.ViewerInputProperty; > import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase; > import org.eclipse.jface.viewers.TableViewer; > import org.eclipse.swt.SWT; >@@ -48,7 +50,11 @@ > } > > public void testObserveInput_InstanceOfViewerInputObservableValue() { >- IObservableValue observable = ViewersObservables.observeInput(viewer); >- assertTrue(observable instanceof ViewerInputObservableValue); >+ IViewerObservableValue observable = (IViewerObservableValue) ViewersObservables >+ .observeInput(viewer); >+ assertTrue(observable.getViewer() == viewer); >+ IPropertyObservable propertyObservable = (IPropertyObservable) ((IDecoratingObservable) observable) >+ .getDecorated(); >+ assertTrue(propertyObservable.getProperty() instanceof ViewerInputProperty); > } > } >#P org.eclipse.jface.databinding >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerInputObservableValue.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerInputObservableValue.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerInputObservableValue.java >--- src/org/eclipse/jface/internal/databinding/viewers/ViewerInputObservableValue.java 19 Mar 2008 23:03:24 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,73 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2007 Matthew Hall and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * Matthew Hall - initial API and implementation (bug 206839) >- *******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import org.eclipse.core.databinding.observable.Diffs; >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.value.AbstractObservableValue; >-import org.eclipse.jface.util.Util; >-import org.eclipse.jface.viewers.Viewer; >- >-/** >- * Observes the input of a <code>Viewer</code>. >- * <p> >- * This observer is blind to changes in the viewer's input unless its >- * {@link #setValue(Object)} method is called directly. >- * >- * @since 1.2 >- */ >-public class ViewerInputObservableValue extends AbstractObservableValue { >- >- private final Viewer viewer; >- >- /** >- * Constructs a new instance associated with the provided <code>viewer</code>. >- * >- * @param realm >- * @param viewer >- */ >- public ViewerInputObservableValue( Realm realm, Viewer viewer ) { >- super( realm ); >- if ( viewer == null ) { >- throw new IllegalArgumentException( "The 'viewer' parameter is null." ); //$NON-NLS-1$ >- } >- >- this.viewer = viewer; >- } >- >- /** >- * Sets the input to the provided <code>value</code>. Value change events are >- * fired after input is set in the viewer. >- * >- * @param value object to set as input >- */ >- protected void doSetValue( final Object value ) { >- Object oldValue = doGetValue(); >- viewer.setInput( value ); >- if ( !Util.equals( oldValue, value ) ) { >- fireValueChange( Diffs.createValueDiff( oldValue, value ) ); >- } >- } >- >- /** >- * Retrieves the current input. >- * >- * @return the current input >- */ >- protected Object doGetValue() { >- return viewer.getInput(); >- } >- >- public Object getValueType() { >- return null; >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerSingleSelectionObservableValue.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerSingleSelectionObservableValue.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerSingleSelectionObservableValue.java >--- src/org/eclipse/jface/internal/databinding/viewers/ViewerSingleSelectionObservableValue.java 24 Mar 2008 19:13:53 -0000 1.2 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,45 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2005, 2008 IBM Corporation and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * IBM Corporation - initial API and implementation >- * Brad Reynolds - bug 137877 >- * Brad Reynolds - bug 164653 >- * Brad Reynolds - bug 147515 >- * Ashley Cambrell - bug 198906 >- *******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.jface.databinding.viewers.IViewerObservableValue; >-import org.eclipse.jface.viewers.Viewer; >- >-/** >- * Observes single selection of a <code>Viewer</code>. >- * >- * @since 1.2 >- */ >-public class ViewerSingleSelectionObservableValue extends >- SelectionProviderSingleSelectionObservableValue implements >- IViewerObservableValue { >- >- private Viewer viewer; >- >- /** >- * @param realm >- * @param viewer >- */ >- public ViewerSingleSelectionObservableValue(Realm realm, Viewer viewer) { >- super(realm, viewer); >- this.viewer = viewer; >- } >- >- public Viewer getViewer() { >- return viewer; >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerMultipleSelectionObservableList.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerMultipleSelectionObservableList.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerMultipleSelectionObservableList.java >--- src/org/eclipse/jface/internal/databinding/viewers/ViewerMultipleSelectionObservableList.java 24 Mar 2008 19:13:53 -0000 1.2 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,47 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2005, 2008 IBM Corporation and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * IBM Corporation - initial API and implementation >- * Brad Reynolds - bug 137877 >- * Brad Reynolds - bug 164653 >- * Brad Reynolds - bug 147515 >- * Ashley Cambrell - bug 198906 >- *******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.jface.databinding.viewers.IViewerObservableList; >-import org.eclipse.jface.viewers.Viewer; >- >-/** >- * Observes single selection of a <code>Viewer</code>. >- * >- * @since 1.2 >- */ >-public class ViewerMultipleSelectionObservableList extends >- SelectionProviderMultipleSelectionObservableList implements >- IViewerObservableList { >- >- private Viewer viewer; >- >- /** >- * @param realm >- * @param viewer >- * @param elementType >- */ >- public ViewerMultipleSelectionObservableList(Realm realm, Viewer viewer, >- Object elementType) { >- super(realm, viewer, elementType); >- this.viewer = viewer; >- } >- >- public Viewer getViewer() { >- return viewer; >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/CheckboxViewerCheckedElementsObservableSet.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/CheckboxViewerCheckedElementsObservableSet.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/CheckboxViewerCheckedElementsObservableSet.java >--- src/org/eclipse/jface/internal/databinding/viewers/CheckboxViewerCheckedElementsObservableSet.java 19 Mar 2008 23:27:05 -0000 1.2 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,90 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2008 Matthew Hall and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * Matthew Hall - initial API and implementation (bug 124684) >- ******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import java.util.Arrays; >-import java.util.Set; >- >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.jface.databinding.viewers.IViewerObservableSet; >-import org.eclipse.jface.viewers.CheckboxTableViewer; >-import org.eclipse.jface.viewers.CheckboxTreeViewer; >-import org.eclipse.jface.viewers.StructuredViewer; >-import org.eclipse.jface.viewers.Viewer; >- >-/** >- * An observable set that tracks the checked elements in a CheckboxTableViewer >- * or CheckboxTreeViewer >- * >- * @since 1.2 >- */ >-public class CheckboxViewerCheckedElementsObservableSet extends >- CheckableCheckedElementsObservableSet implements IViewerObservableSet { >- private StructuredViewer viewer; >- >- /** >- * Constructs a new instance on the given realm and checkable. >- * >- * @param realm >- * the observable's realm >- * @param viewer >- * the CheckboxTableViewer viewer to track. >- * @param elementType >- * type of elements in the set >- */ >- public CheckboxViewerCheckedElementsObservableSet(Realm realm, >- CheckboxTableViewer viewer, Object elementType) { >- super(realm, viewer, elementType, createElementSet(viewer)); >- this.viewer = viewer; >- } >- >- /** >- * Constructs a new instance on the given realm and checkable. >- * >- * @param realm >- * the observable's realm >- * @param viewer >- * the CheckboxTreeViewer viewer to track. >- * @param elementType >- * type of elements in the set >- */ >- public CheckboxViewerCheckedElementsObservableSet(Realm realm, >- CheckboxTreeViewer viewer, Object elementType) { >- super(realm, viewer, elementType, createElementSet(viewer)); >- this.viewer = viewer; >- } >- >- Set createDiffSet() { >- return ViewerElementSet.withComparer(viewer.getComparer()); >- } >- >- private static Set createElementSet(CheckboxTableViewer viewer) { >- Set set = ViewerElementSet.withComparer(viewer.getComparer()); >- set.addAll(Arrays.asList(viewer.getCheckedElements())); >- return set; >- } >- >- private static Set createElementSet(CheckboxTreeViewer viewer) { >- Set set = ViewerElementSet.withComparer(viewer.getComparer()); >- set.addAll(Arrays.asList(viewer.getCheckedElements())); >- return set; >- } >- >- public Viewer getViewer() { >- return viewer; >- } >- >- public synchronized void dispose() { >- viewer = null; >- super.dispose(); >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValue.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValue.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValue.java >--- src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValue.java 24 Mar 2008 19:13:53 -0000 1.2 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,147 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2005, 2008 IBM Corporation and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * IBM Corporation - initial API and implementation >- * Brad Reynolds - bug 137877 >- * Brad Reynolds - bug 164653 >- * Brad Reynolds - bug 147515 >- * Ashley Cambrell - bug 198906 >- *******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import org.eclipse.core.databinding.observable.Diffs; >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.value.AbstractObservableValue; >-import org.eclipse.jface.util.Util; >-import org.eclipse.jface.viewers.ISelection; >-import org.eclipse.jface.viewers.ISelectionChangedListener; >-import org.eclipse.jface.viewers.ISelectionProvider; >-import org.eclipse.jface.viewers.IStructuredSelection; >-import org.eclipse.jface.viewers.SelectionChangedEvent; >-import org.eclipse.jface.viewers.StructuredSelection; >- >-/** >- * Observes single selection of an <code>ISelectionProvider</code>. >- * >- * @since 1.1 >- */ >-public class SelectionProviderSingleSelectionObservableValue extends >- AbstractObservableValue { >- >- private final ISelectionProvider selectionProvider; >- >- private boolean updating = false; >- >- private Object currentSelection; >- >- private ISelectionChangedListener selectionChangedListener; >- >- /** >- * Constructs a new instance associated with the provided >- * <code>selectionProvider</code>. In order to initialize itself properly >- * the constructor invokes {@link #doGetValue()}. This could be dangerous >- * for subclasses, see {@link #doGetValue()} for an explanation. >- * >- * @param realm >- * >- * @param selectionProvider >- * @see #doGetValue() >- */ >- public SelectionProviderSingleSelectionObservableValue(Realm realm, >- ISelectionProvider selectionProvider) { >- super(realm); >- if (selectionProvider == null) { >- throw new IllegalArgumentException( >- "The 'selectionProvider' parameter is null."); //$NON-NLS-1$ >- } >- >- this.selectionProvider = selectionProvider; >- this.currentSelection = doGetValue(); >- >- selectionChangedListener = new ISelectionChangedListener() { >- public void selectionChanged(SelectionChangedEvent event) { >- if (!updating) { >- Object oldSelection = currentSelection; >- currentSelection = doGetValue(); >- fireValueChange(Diffs.createValueDiff(oldSelection, >- currentSelection)); >- } >- } >- }; >- selectionProvider.addSelectionChangedListener(selectionChangedListener); >- } >- >- /** >- * Sets the selection to the provided <code>value</code>. Value change >- * events are fired after selection is set in the selection provider. >- * >- * @param value >- * object to set as selected, <code>null</code> if wanting to >- * remove selection >- */ >- public void doSetValue(final Object value) { >- try { >- updating = true; >- >- Object oldSelection = currentSelection; >- selectionProvider >- .setSelection(value == null ? StructuredSelection.EMPTY >- : new StructuredSelection(value)); >- currentSelection = doGetValue(); >- if (!Util.equals(oldSelection, currentSelection)) { >- fireValueChange(Diffs.createValueDiff(oldSelection, >- currentSelection)); >- } >- } finally { >- updating = false; >- } >- } >- >- /** >- * Retrieves the current selection. >- * <p> >- * If a subclass overrides this method it must not depend upon the subclass >- * to have been fully initialized before this method is invoked. >- * <code>doGetValue()</code> is invoked by the >- * {@link #SelectionProviderSingleSelectionObservableValue(Realm, ISelectionProvider) constructor} >- * which means the subclass's constructor will not have fully executed >- * before this method is invoked. >- * </p> >- * >- * @return selection will be an instance of >- * <code>IStructuredSelection</code> if a selection exists, >- * <code>null</code> if no selection >- * @see #SelectionProviderSingleSelectionObservableValue(Realm, >- * ISelectionProvider) >- */ >- protected Object doGetValue() { >- ISelection selection = selectionProvider.getSelection(); >- if (selection instanceof IStructuredSelection) { >- IStructuredSelection sel = (IStructuredSelection) selection; >- return sel.getFirstElement(); >- } >- >- return null; >- } >- >- public Object getValueType() { >- return null; >- } >- >- /* >- * (non-Javadoc) >- * >- * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#dispose() >- */ >- public synchronized void dispose() { >- selectionProvider >- .removeSelectionChangedListener(selectionChangedListener); >- super.dispose(); >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsObservableSet.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsObservableSet.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsObservableSet.java >--- src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsObservableSet.java 19 Mar 2008 23:03:24 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,219 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2008 Matthew Hall and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * Matthew Hall - initial API and implementation (bug 124684) >- ******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import java.util.Collection; >-import java.util.Collections; >-import java.util.HashSet; >-import java.util.Iterator; >-import java.util.Set; >- >-import org.eclipse.core.databinding.observable.Diffs; >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.set.AbstractObservableSet; >-import org.eclipse.core.runtime.Assert; >-import org.eclipse.jface.viewers.CheckStateChangedEvent; >-import org.eclipse.jface.viewers.ICheckStateListener; >-import org.eclipse.jface.viewers.ICheckable; >- >-/** >- * >- * @since 1.2 >- */ >-public class CheckableCheckedElementsObservableSet extends >- AbstractObservableSet { >- private ICheckable checkable; >- private Set wrappedSet; >- private Object elementType; >- private ICheckStateListener listener; >- >- /** >- * Constructs a new instance on the given realm and checkable. >- * >- * @param realm >- * the observable's realm >- * @param checkable >- * the ICheckable to track >- * @param elementType >- * type of elements in the set >- */ >- public CheckableCheckedElementsObservableSet(Realm realm, >- ICheckable checkable, Object elementType) { >- this(realm, checkable, elementType, new HashSet()); >- } >- >- /** >- * Constructs a new instance of the given realm, and checkable, >- * >- * @param realm >- * the observable's realm >- * @param checkable >- * the ICheckable to track >- * @param elementType >- * type of elements in the set >- * @param wrappedSet >- * the set being wrapped >- */ >- public CheckableCheckedElementsObservableSet(Realm realm, >- ICheckable checkable, Object elementType, final Set wrappedSet) { >- super(realm); >- Assert.isNotNull(checkable, "Checkable cannot be null"); //$NON-NLS-1$ >- Assert.isNotNull(wrappedSet, "Wrapped set cannot be null"); //$NON-NLS-1$ >- this.checkable = checkable; >- this.wrappedSet = wrappedSet; >- this.elementType = elementType; >- >- listener = new ICheckStateListener() { >- public void checkStateChanged(CheckStateChangedEvent event) { >- Object element = event.getElement(); >- if (event.getChecked()) { >- if (wrappedSet.add(element)) >- fireSetChange(Diffs.createSetDiff(Collections >- .singleton(element), Collections.EMPTY_SET)); >- } else { >- if (wrappedSet.remove(element)) >- fireSetChange(Diffs.createSetDiff( >- Collections.EMPTY_SET, Collections >- .singleton(element))); >- } >- } >- }; >- checkable.addCheckStateListener(listener); >- } >- >- protected Set getWrappedSet() { >- return wrappedSet; >- } >- >- Set createDiffSet() { >- return new HashSet(); >- } >- >- public Object getElementType() { >- return elementType; >- } >- >- public boolean add(Object o) { >- getterCalled(); >- boolean added = wrappedSet.add(o); >- if (added) { >- checkable.setChecked(o, true); >- fireSetChange(Diffs.createSetDiff(Collections.singleton(o), >- Collections.EMPTY_SET)); >- } >- return added; >- } >- >- public boolean remove(Object o) { >- getterCalled(); >- boolean removed = wrappedSet.remove(o); >- if (removed) { >- checkable.setChecked(o, false); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, >- Collections.singleton(o))); >- } >- return removed; >- } >- >- public boolean addAll(Collection c) { >- getterCalled(); >- Set additions = createDiffSet(); >- for (Iterator iterator = c.iterator(); iterator.hasNext();) { >- Object element = iterator.next(); >- if (wrappedSet.add(element)) { >- checkable.setChecked(element, true); >- additions.add(element); >- } >- } >- boolean changed = !additions.isEmpty(); >- if (changed) >- fireSetChange(Diffs.createSetDiff(additions, Collections.EMPTY_SET)); >- return changed; >- } >- >- public boolean removeAll(Collection c) { >- getterCalled(); >- Set removals = createDiffSet(); >- for (Iterator iterator = c.iterator(); iterator.hasNext();) { >- Object element = iterator.next(); >- if (wrappedSet.remove(element)) { >- checkable.setChecked(element, false); >- removals.add(element); >- } >- } >- boolean changed = !removals.isEmpty(); >- if (changed) >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removals)); >- return changed; >- } >- >- public boolean retainAll(Collection c) { >- getterCalled(); >- >- // To ensure that elements are compared correctly, e.g. ViewerElementSet >- Set toRetain = createDiffSet(); >- toRetain.addAll(c); >- >- Set removals = createDiffSet(); >- for (Iterator iterator = wrappedSet.iterator(); iterator.hasNext();) { >- Object element = iterator.next(); >- if (!toRetain.contains(element)) { >- iterator.remove(); >- checkable.setChecked(element, false); >- removals.add(element); >- } >- } >- boolean changed = !removals.isEmpty(); >- if (changed) >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removals)); >- return changed; >- } >- >- public void clear() { >- removeAll(wrappedSet); >- } >- >- public Iterator iterator() { >- getterCalled(); >- final Iterator wrappedIterator = wrappedSet.iterator(); >- return new Iterator() { >- private Object last = null; >- >- public boolean hasNext() { >- getterCalled(); >- return wrappedIterator.hasNext(); >- } >- >- public Object next() { >- getterCalled(); >- return last = wrappedIterator.next(); >- } >- >- public void remove() { >- getterCalled(); >- wrappedIterator.remove(); >- checkable.setChecked(last, false); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, >- Collections.singleton(last))); >- } >- }; >- } >- >- public synchronized void dispose() { >- if (checkable != null) { >- checkable.removeCheckStateListener(listener); >- checkable = null; >- listener = null; >- } >- super.dispose(); >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerFiltersObservableSet.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerFiltersObservableSet.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerFiltersObservableSet.java >--- src/org/eclipse/jface/internal/databinding/viewers/ViewerFiltersObservableSet.java 10 Jul 2008 05:08:26 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,174 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2005, 2008 Matthew Hall and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * Matthew Hall - initial API and implementation (bug 239302) >- *******************************************************************************/ >- >-package org.eclipse.jface.internal.databinding.viewers; >- >-import java.util.Arrays; >-import java.util.Collection; >-import java.util.Collections; >-import java.util.HashSet; >-import java.util.Iterator; >-import java.util.Set; >- >-import org.eclipse.core.databinding.observable.Diffs; >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.set.ObservableSet; >-import org.eclipse.jface.databinding.viewers.IViewerObservableSet; >-import org.eclipse.jface.viewers.StructuredViewer; >-import org.eclipse.jface.viewers.Viewer; >-import org.eclipse.jface.viewers.ViewerFilter; >- >-/** >- * An observable set that tracks the filters of the given viewer. Note that this >- * set will not track changes that are made using direct API on StructuredViewer >- * (by calling >- * {@link StructuredViewer#addFilter(org.eclipse.jface.viewers.ViewerFilter) >- * addFilter()}, >- * {@link StructuredViewer#removeFilter(org.eclipse.jface.viewers.ViewerFilter) >- * removeFilter()}, or >- * {@link StructuredViewer#setFilters(org.eclipse.jface.viewers.ViewerFilter[]) >- * setFilters()}) -- it is assumed that filters are only changed through the >- * set. >- * >- * @since 1.2 >- */ >-public class ViewerFiltersObservableSet extends ObservableSet implements >- IViewerObservableSet { >- >- private StructuredViewer viewer; >- >- /** >- * @param realm >- * @param viewer >- */ >- public ViewerFiltersObservableSet(Realm realm, StructuredViewer viewer) { >- super(realm, new HashSet(Arrays.asList(viewer.getFilters())), >- ViewerFilter.class); >- this.viewer = viewer; >- } >- >- public Viewer getViewer() { >- return viewer; >- } >- >- private void replaceFilters() { >- viewer.getControl().setRedraw(false); >- try { >- viewer.setFilters((ViewerFilter[]) wrappedSet >- .toArray(new ViewerFilter[wrappedSet.size()])); >- } finally { >- viewer.getControl().setRedraw(true); >- } >- } >- >- private void addFilter(ViewerFilter filter) { >- viewer.getControl().setRedraw(false); >- try { >- viewer.addFilter(filter); >- } finally { >- viewer.getControl().setRedraw(true); >- } >- } >- >- private void removeFilter(ViewerFilter filter) { >- viewer.getControl().setRedraw(false); >- try { >- viewer.removeFilter(filter); >- } finally { >- viewer.getControl().setRedraw(true); >- } >- } >- >- public boolean add(Object element) { >- checkRealm(); >- boolean added = wrappedSet.add(element); >- if (added) { >- addFilter((ViewerFilter) element); >- fireSetChange(Diffs.createSetDiff(Collections.singleton(element), >- Collections.EMPTY_SET)); >- } >- return added; >- } >- >- public boolean addAll(Collection c) { >- getterCalled(); >- Set additions = new HashSet(); >- Iterator it = c.iterator(); >- while (it.hasNext()) { >- Object element = it.next(); >- if (wrappedSet.add(element)) { >- additions.add(element); >- } >- } >- if (additions.size() > 0) { >- replaceFilters(); >- fireSetChange(Diffs.createSetDiff(additions, Collections.EMPTY_SET)); >- return true; >- } >- return false; >- } >- >- public void clear() { >- getterCalled(); >- Set removes = new HashSet(wrappedSet); >- wrappedSet.clear(); >- replaceFilters(); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes)); >- } >- >- public boolean remove(Object o) { >- getterCalled(); >- boolean removed = wrappedSet.remove(o); >- if (removed) { >- removeFilter((ViewerFilter) o); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, >- Collections.singleton(o))); >- } >- return removed; >- } >- >- public boolean removeAll(Collection c) { >- getterCalled(); >- Set removes = new HashSet(); >- Iterator it = c.iterator(); >- while (it.hasNext()) { >- Object element = it.next(); >- if (wrappedSet.remove(element)) { >- removes.add(element); >- } >- } >- if (removes.size() > 0) { >- replaceFilters(); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes)); >- return true; >- } >- return false; >- } >- >- public boolean retainAll(Collection c) { >- getterCalled(); >- Set removes = new HashSet(); >- Iterator it = wrappedSet.iterator(); >- while (it.hasNext()) { >- Object element = it.next(); >- if (!c.contains(element)) { >- it.remove(); >- removes.add(element); >- } >- } >- if (removes.size() > 0) { >- replaceFilters(); >- fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes)); >- return true; >- } >- return false; >- } >-} >Index: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionObservableList.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionObservableList.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionObservableList.java >--- src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionObservableList.java 19 Mar 2008 23:03:24 -0000 1.1 >+++ /dev/null 1 Jan 1970 00:00:00 -0000 >@@ -1,111 +0,0 @@ >-/******************************************************************************* >- * Copyright (c) 2007 Peter Centgraf and others. >- * All rights reserved. This program and the accompanying materials >- * are made available under the terms of the Eclipse Public License v1.0 >- * which accompanies this distribution, and is available at >- * http://www.eclipse.org/legal/epl-v10.html >- * >- * Contributors: >- * Peter Centgraf - initial API and implementation, bug 124683 >- * Boris Bokowski, IBM Corporation - initial API and implementation >- *******************************************************************************/ >-package org.eclipse.jface.internal.databinding.viewers; >- >-import java.util.ArrayList; >-import java.util.Collections; >-import java.util.List; >- >-import org.eclipse.core.databinding.observable.Diffs; >-import org.eclipse.core.databinding.observable.Realm; >-import org.eclipse.core.databinding.observable.list.ListDiff; >-import org.eclipse.core.databinding.observable.list.WritableList; >-import org.eclipse.jface.viewers.ISelection; >-import org.eclipse.jface.viewers.ISelectionChangedListener; >-import org.eclipse.jface.viewers.ISelectionProvider; >-import org.eclipse.jface.viewers.IStructuredSelection; >-import org.eclipse.jface.viewers.SelectionChangedEvent; >-import org.eclipse.jface.viewers.StructuredSelection; >- >-/** >- * Observes multiple-selection of an {@link ISelectionProvider}. >- * >- * @since 1.2 >- */ >-public class SelectionProviderMultipleSelectionObservableList extends >- WritableList { >- >- protected ISelectionProvider selectionProvider; >- protected boolean handlingSelection; >- protected boolean updating; >- protected SelectionListener selectionListener = new SelectionListener(); >- >- class SelectionListener implements ISelectionChangedListener { >- public void selectionChanged(SelectionChangedEvent event) { >- if (updating) { >- return; >- } >- handlingSelection = true; >- try { >- updateWrappedList(new ArrayList(getSelectionList(event.getSelection()))); >- } finally { >- handlingSelection = false; >- } >- } >- } >- >- /** >- * Create a new observable list based on the current selection of the given >- * selection provider. Assumes that the selection provider provides >- * structured selections. >- * >- * @param realm >- * @param selectionProvider >- * @param elementType >- */ >- public SelectionProviderMultipleSelectionObservableList(Realm realm, >- ISelectionProvider selectionProvider, Object elementType) { >- super(realm, new ArrayList(getSelectionList(selectionProvider)), elementType); >- this.selectionProvider = selectionProvider; >- selectionProvider.addSelectionChangedListener(selectionListener); >- } >- >- protected void fireListChange(ListDiff diff) { >- if (handlingSelection) { >- super.fireListChange(diff); >- } else { >- // this is a bit of a hack - we are changing the diff to match the order >- // of elements returned by the selection provider after we've set the >- // selection. >- updating = true; >- try { >- List oldList = getSelectionList(selectionProvider); >- selectionProvider >- .setSelection(new StructuredSelection(wrappedList)); >- wrappedList = new ArrayList(getSelectionList(selectionProvider)); >- super.fireListChange(Diffs.computeListDiff(oldList, wrappedList)); >- } finally { >- updating = false; >- } >- } >- } >- >- protected static List getSelectionList(ISelectionProvider selectionProvider) { >- if (selectionProvider == null) { >- throw new IllegalArgumentException(); >- } >- return getSelectionList(selectionProvider.getSelection()); >- } >- >- protected static List getSelectionList(ISelection sel) { >- if (sel instanceof IStructuredSelection) { >- return ((IStructuredSelection) sel).toList(); >- } >- return Collections.EMPTY_LIST; >- } >- >- public synchronized void dispose() { >- selectionProvider.removeSelectionChangedListener(selectionListener); >- selectionProvider = null; >- super.dispose(); >- } >-} >Index: src/org/eclipse/jface/databinding/viewers/ViewersObservables.java >=================================================================== >RCS file: /cvsroot/eclipse/org.eclipse.jface.databinding/src/org/eclipse/jface/databinding/viewers/ViewersObservables.java,v >retrieving revision 1.12 >diff -u -r1.12 ViewersObservables.java >--- src/org/eclipse/jface/databinding/viewers/ViewersObservables.java 10 Jul 2008 05:08:26 -0000 1.12 >+++ src/org/eclipse/jface/databinding/viewers/ViewersObservables.java 22 Sep 2008 17:15:36 -0000 >@@ -12,18 +12,18 @@ > > package org.eclipse.jface.databinding.viewers; > >+import org.eclipse.core.databinding.observable.Realm; > import org.eclipse.core.databinding.observable.list.IObservableList; > import org.eclipse.core.databinding.observable.set.IObservableSet; > import org.eclipse.core.databinding.observable.value.IObservableValue; >+import org.eclipse.core.databinding.property.IListProperty; >+import org.eclipse.core.databinding.property.ISetProperty; >+import org.eclipse.core.databinding.property.IValueProperty; >+import org.eclipse.core.databinding.property.PropertyObservables; > import org.eclipse.jface.databinding.swt.SWTObservables; >-import org.eclipse.jface.internal.databinding.viewers.CheckableCheckedElementsObservableSet; >-import org.eclipse.jface.internal.databinding.viewers.CheckboxViewerCheckedElementsObservableSet; >-import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionObservableList; >-import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValue; >-import org.eclipse.jface.internal.databinding.viewers.ViewerFiltersObservableSet; >-import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue; >-import org.eclipse.jface.internal.databinding.viewers.ViewerMultipleSelectionObservableList; >-import org.eclipse.jface.internal.databinding.viewers.ViewerSingleSelectionObservableValue; >+import org.eclipse.jface.internal.databinding.viewers.ViewerObservableListDecorator; >+import org.eclipse.jface.internal.databinding.viewers.ViewerObservableSetDecorator; >+import org.eclipse.jface.internal.databinding.viewers.ViewerObservableValueDecorator; > import org.eclipse.jface.viewers.CheckboxTableViewer; > import org.eclipse.jface.viewers.CheckboxTreeViewer; > import org.eclipse.jface.viewers.ICheckable; >@@ -39,6 +39,70 @@ > * @since 1.1 > */ > public class ViewersObservables { >+ private static Realm getDefaultRealm() { >+ return SWTObservables.getRealm(Display.getDefault()); >+ } >+ >+ private static Realm getRealm(Viewer viewer) { >+ return SWTObservables.getRealm(viewer.getControl().getDisplay()); >+ } >+ >+ private static void checkNull(Object obj) { >+ if (obj == null) >+ throw new IllegalArgumentException(); >+ } >+ >+ private static IObservableValue observeProperty(Object source, >+ IValueProperty property) { >+ checkNull(source); >+ if (source instanceof Viewer) { >+ return observeViewerProperty((Viewer) source, property); >+ } >+ return PropertyObservables.observeValue(getDefaultRealm(), source, >+ property); >+ } >+ >+ private static IViewerObservableValue observeViewerProperty(Viewer viewer, >+ IValueProperty property) { >+ checkNull(viewer); >+ return new ViewerObservableValueDecorator(PropertyObservables >+ .observeValue(getRealm(viewer), viewer, property), viewer); >+ } >+ >+ private static IObservableSet observeProperty(Object source, >+ ISetProperty property) { >+ checkNull(source); >+ if (source instanceof Viewer) { >+ return observeViewerProperty((Viewer) source, property); >+ } >+ return PropertyObservables.observeSet(getDefaultRealm(), source, >+ property); >+ } >+ >+ private static IViewerObservableSet observeViewerProperty(Viewer viewer, >+ ISetProperty property) { >+ checkNull(viewer); >+ return new ViewerObservableSetDecorator(PropertyObservables.observeSet( >+ getRealm(viewer), viewer, property), viewer); >+ } >+ >+ private static IObservableList observeProperty(Object source, >+ IListProperty property) { >+ checkNull(source); >+ if (source instanceof Viewer) { >+ return observeViewerProperty((Viewer) source, property); >+ } >+ Realm realm = getDefaultRealm(); >+ return PropertyObservables.observeList(realm, source, property); >+ } >+ >+ private static IViewerObservableList observeViewerProperty(Viewer viewer, >+ IListProperty property) { >+ checkNull(viewer); >+ Realm realm = getRealm(viewer); >+ return new ViewerObservableListDecorator(PropertyObservables >+ .observeList(realm, viewer, property), viewer); >+ } > > /** > * Returns an observable value that tracks the current selection of the >@@ -53,12 +117,8 @@ > */ > public static IObservableValue observeSingleSelection( > ISelectionProvider selectionProvider) { >- if (selectionProvider instanceof Viewer) { >- return observeSingleSelection((Viewer) selectionProvider); >- } >- return new SelectionProviderSingleSelectionObservableValue( >- SWTObservables.getRealm(Display.getDefault()), >- selectionProvider); >+ return observeProperty(selectionProvider, SelectionProviderProperties >+ .singleSelection()); > } > > /** >@@ -82,12 +142,8 @@ > */ > public static IObservableList observeMultiSelection( > ISelectionProvider selectionProvider) { >- if (selectionProvider instanceof Viewer) { >- return observeMultiSelection((Viewer) selectionProvider); >- } >- return new SelectionProviderMultipleSelectionObservableList( >- SWTObservables.getRealm(Display.getDefault()), >- selectionProvider, Object.class); >+ return observeProperty(selectionProvider, SelectionProviderProperties >+ .multipleSelection()); > } > > /** >@@ -104,9 +160,8 @@ > * @since 1.2 > */ > public static IViewerObservableValue observeSingleSelection(Viewer viewer) { >- return new ViewerSingleSelectionObservableValue( >- SWTObservables.getRealm(Display.getDefault()), >- viewer); >+ return observeViewerProperty(viewer, SelectionProviderProperties >+ .singleSelection()); > } > > /** >@@ -128,11 +183,9 @@ > * > * @since 1.2 > */ >- public static IViewerObservableList observeMultiSelection( >- Viewer viewer) { >- return new ViewerMultipleSelectionObservableList( >- SWTObservables.getRealm(Display.getDefault()), >- viewer, Object.class); >+ public static IViewerObservableList observeMultiSelection(Viewer viewer) { >+ return observeViewerProperty(viewer, SelectionProviderProperties >+ .multipleSelection()); > } > > /** >@@ -147,8 +200,7 @@ > * @since 1.2 > */ > public static IObservableValue observeInput(Viewer viewer) { >- return new ViewerInputObservableValue(SWTObservables.getRealm(viewer >- .getControl().getDisplay()), viewer); >+ return observeViewerProperty(viewer, ViewerProperties.input()); > } > > /** >@@ -173,8 +225,8 @@ > return observeCheckedElements((CheckboxTreeViewer) checkable, > elementType); > } >- return new CheckableCheckedElementsObservableSet(SWTObservables >- .getRealm(Display.getDefault()), checkable, elementType); >+ return observeProperty(checkable, CheckableProperties >+ .checkedElements(elementType)); > } > > /** >@@ -192,9 +244,8 @@ > */ > public static IViewerObservableSet observeCheckedElements( > CheckboxTableViewer viewer, Object elementType) { >- return new CheckboxViewerCheckedElementsObservableSet(SWTObservables >- .getRealm(viewer.getControl().getDisplay()), viewer, >- elementType); >+ return observeViewerProperty(viewer, CheckboxTableViewerProperties >+ .checkedElements(elementType)); > } > > /** >@@ -212,9 +263,8 @@ > */ > public static IViewerObservableSet observeCheckedElements( > CheckboxTreeViewer viewer, Object elementType) { >- return new CheckboxViewerCheckedElementsObservableSet(SWTObservables >- .getRealm(viewer.getControl().getDisplay()), viewer, >- elementType); >+ return observeViewerProperty(viewer, CheckboxTreeViewerProperties >+ .checkedElements(elementType)); > } > > /** >@@ -235,7 +285,7 @@ > * @since 1.3 > */ > public static IViewerObservableSet observeFilters(StructuredViewer viewer) { >- return new ViewerFiltersObservableSet(SWTObservables.getRealm(viewer >- .getControl().getDisplay()), viewer); >+ return observeViewerProperty(viewer, StructuredViewerProperties >+ .filters()); > } > } >Index: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,76 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.Collections; >+import java.util.HashMap; >+import java.util.List; >+import java.util.Map; >+ >+import org.eclipse.core.databinding.observable.Diffs; >+import org.eclipse.core.databinding.property.BasicListProperty; >+import org.eclipse.jface.util.Util; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.ISelectionChangedListener; >+import org.eclipse.jface.viewers.ISelectionProvider; >+import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.SelectionChangedEvent; >+import org.eclipse.jface.viewers.StructuredSelection; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class SelectionProviderMultipleSelectionProperty extends BasicListProperty >+ implements ISelectionChangedListener { >+ private Map sourceToList = new HashMap(); >+ >+ protected void addListenerTo(Object source) { >+ ((ISelectionProvider) source).addSelectionChangedListener(this); >+ sourceToList.put(source, getList(source)); >+ } >+ >+ protected void removeListenerFrom(Object source) { >+ ((ISelectionProvider) source).removeSelectionChangedListener(this); >+ sourceToList.remove(source); >+ } >+ >+ public void selectionChanged(SelectionChangedEvent event) { >+ Object source = event.getSelectionProvider(); >+ if (!isUpdating(source)) { >+ List oldList = (List) sourceToList.get(source); >+ List newList = getList(source); >+ sourceToList.put(source, newList); >+ if (!Util.equals(oldList, newList)) { >+ fireListChange(source, Diffs.computeListDiff(oldList, newList)); >+ } >+ } >+ } >+ >+ public List getList(Object source) { >+ ISelection selection = ((ISelectionProvider) source).getSelection(); >+ if (selection instanceof IStructuredSelection) { >+ return ((IStructuredSelection) selection).toList(); >+ } >+ return Collections.EMPTY_LIST; >+ } >+ >+ protected void doSetList(Object source, List list) { >+ ((ISelectionProvider) source) >+ .setSelection(new StructuredSelection(list)); >+ sourceToList.put(source, list); >+ } >+ >+ public Object getElementType() { >+ return Object.class; >+ } >+} >Index: src/org/eclipse/jface/databinding/viewers/StructuredViewerProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/StructuredViewerProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/StructuredViewerProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/StructuredViewerProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,31 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.ISetProperty; >+import org.eclipse.jface.internal.databinding.viewers.StructuredViewerFiltersProperty; >+ >+/** >+ * A factory for creating properties of JFace StructuredViewers >+ * >+ * @since 1.3 >+ */ >+public class StructuredViewerProperties { >+ /** >+ * Returns a value property for the input of a JFace StructuredViewer. >+ * >+ * @return a value property for the input of a JFace StructuredViewer. >+ */ >+ public static ISetProperty filters() { >+ return new StructuredViewerFiltersProperty(); >+ } >+} >Index: src/org/eclipse/jface/databinding/viewers/CheckboxTableViewerProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/CheckboxTableViewerProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/CheckboxTableViewerProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/CheckboxTableViewerProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,36 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.ISetProperty; >+import org.eclipse.jface.internal.databinding.viewers.CheckboxTableViewerCheckedElementsProperty; >+ >+/** >+ * A factory for creating properties of JFace CheckboxTableViewer >+ * >+ * @since 1.3 >+ */ >+public class CheckboxTableViewerProperties { >+ /** >+ * Returns a set property for the checked elements of a JFace >+ * CheckboxTableViewer. >+ * >+ * @param elementType >+ * the element type of the returned property >+ * >+ * @return a set property for the checked elements of a JFace >+ * CheckboxTableViewer. >+ */ >+ public static ISetProperty checkedElements(Object elementType) { >+ return new CheckboxTableViewerCheckedElementsProperty(elementType); >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableSetDecorator.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableSetDecorator.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableSetDecorator.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableSetDecorator.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,40 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import org.eclipse.core.databinding.observable.set.DecoratingObservableSet; >+import org.eclipse.core.databinding.observable.set.IObservableSet; >+import org.eclipse.jface.databinding.viewers.IViewerObservableSet; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class ViewerObservableSetDecorator extends DecoratingObservableSet >+ implements IViewerObservableSet { >+ private final Viewer viewer; >+ >+ /** >+ * @param decorated >+ * @param viewer >+ */ >+ public ViewerObservableSetDecorator(IObservableSet decorated, Viewer viewer) { >+ super(decorated, true); >+ this.viewer = viewer; >+ } >+ >+ public Viewer getViewer() { >+ return viewer; >+ } >+ >+} >Index: src/org/eclipse/jface/databinding/viewers/CheckableProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/CheckableProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/CheckableProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/CheckableProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,34 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.ISetProperty; >+import org.eclipse.jface.internal.databinding.viewers.CheckableCheckedElementsProperty; >+ >+/** >+ * A factory for creating properties of JFace ICheckables >+ * >+ * @since 1.3 >+ */ >+public class CheckableProperties { >+ /** >+ * Returns a set property for the checked elements of a JFace ICheckable. >+ * >+ * @param elementType >+ * the element type of the returned property >+ * >+ * @return a set property for the checked elements of a JFace ICheckable. >+ */ >+ public static ISetProperty checkedElements(Object elementType) { >+ return new CheckableCheckedElementsProperty(elementType); >+ } >+} >Index: src/org/eclipse/jface/databinding/viewers/SelectionProviderProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/SelectionProviderProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/SelectionProviderProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/SelectionProviderProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,46 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.IListProperty; >+import org.eclipse.core.databinding.property.IValueProperty; >+import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionProperty; >+import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionProperty; >+ >+/** >+ * A factory for creating properties of JFace ISelectionProviders >+ * >+ * @since 1.3 >+ */ >+public class SelectionProviderProperties { >+ /** >+ * Returns a value property for the single selection of a JFace >+ * ISelectionProvider. >+ * >+ * @return a value property for the single selection of a JFace >+ * ISelectionProvider. >+ */ >+ public static IValueProperty singleSelection() { >+ return new SelectionProviderSingleSelectionProperty(); >+ } >+ >+ /** >+ * Returns a list property for the multiple selection of a JFace >+ * ISelectionProvider. >+ * >+ * @return a list property for the multiple selection of a JFace >+ * ISelectionProvider. >+ */ >+ public static IListProperty multipleSelection() { >+ return new SelectionProviderMultipleSelectionProperty(); >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,217 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.Collection; >+import java.util.Collections; >+import java.util.HashMap; >+import java.util.HashSet; >+import java.util.Iterator; >+import java.util.Map; >+import java.util.Set; >+ >+import org.eclipse.core.databinding.observable.Diffs; >+import org.eclipse.core.databinding.property.SetProperty; >+import org.eclipse.jface.viewers.CheckStateChangedEvent; >+import org.eclipse.jface.viewers.ICheckStateListener; >+import org.eclipse.jface.viewers.ICheckable; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class CheckableCheckedElementsProperty extends SetProperty implements >+ ICheckStateListener { >+ private Object elementType; >+ >+ private Map sourceToSet = new HashMap(); >+ >+ /** >+ * @param elementType >+ */ >+ public CheckableCheckedElementsProperty(Object elementType) { >+ this.elementType = elementType; >+ >+ } >+ >+ protected void addListenerTo(Object source) { >+ ((ICheckable) source).addCheckStateListener(this); >+ sourceToSet.put(source, getSet(source)); >+ } >+ >+ protected void removeListenerFrom(Object source) { >+ ((ICheckable) source).removeCheckStateListener(this); >+ sourceToSet.remove(source); >+ } >+ >+ public void checkStateChanged(CheckStateChangedEvent event) { >+ // ICheckable is documented to not fire events when setChecked() is >+ // called, so no need to check whether the element is being updated. >+ >+ Object source = event.getCheckable(); >+ Set set = (Set) sourceToSet.get(source); >+ >+ Object element = event.getElement(); >+ if (event.getChecked()) { >+ if (set.add(element)) { >+ fireSetChange(source, Diffs.createSetDiff(Collections >+ .singleton(element), Collections.EMPTY_SET)); >+ } >+ } else { >+ if (set.remove(element)) { >+ fireSetChange(source, Diffs.createSetDiff( >+ Collections.EMPTY_SET, Collections.singleton(element))); >+ } >+ } >+ } >+ >+ public Object getElementType() { >+ return elementType; >+ } >+ >+ public final Set getSet(Object source) { >+ ICheckable checkable = (ICheckable) source; >+ >+ Set set = doGetSet(checkable); >+ if (set == null) { >+ set = (Set) sourceToSet.get(source); >+ } >+ if (set == null) { >+ set = createElementSet(checkable); >+ } >+ sourceToSet.put(source, set); >+ >+ return set; >+ } >+ >+ protected Set doGetSet(ICheckable checkable) { >+ return null; >+ } >+ >+ protected Set createElementSet(ICheckable checkable) { >+ return new HashSet(); >+ } >+ >+ public boolean add(Object source, Object o) { >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ >+ boolean added = set.add(source); >+ if (added) { >+ checkable.setChecked(o, true); >+ if (hasListeners(source)) { >+ fireSetChange(source, Diffs.createSetDiff(Collections >+ .singleton(o), Collections.EMPTY_SET)); >+ } >+ } >+ return added; >+ } >+ >+ public boolean addAll(Object source, Collection c) { >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ Set additions = createElementSet(checkable); >+ >+ for (Iterator it = c.iterator(); it.hasNext();) { >+ Object element = it.next(); >+ if (set.add(element)) { >+ checkable.setChecked(element, true); >+ additions.add(element); >+ } >+ } >+ >+ boolean changed = !additions.isEmpty(); >+ if (changed && hasListeners(source)) >+ fireSetChange(source, Diffs.createSetDiff(additions, >+ Collections.EMPTY_SET)); >+ >+ return changed; >+ } >+ >+ public void clear(Object source) { >+ if (isEmpty(source)) >+ return; >+ >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ >+ for (Iterator it = set.iterator(); it.hasNext();) { >+ checkable.setChecked(it.next(), false); >+ } >+ >+ sourceToSet.put(source, createElementSet(checkable)); >+ >+ if (hasListeners(source)) { >+ fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET, >+ set)); >+ } >+ } >+ >+ public boolean remove(Object source, Object o) { >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ >+ boolean removed = set.remove(o); >+ if (removed) { >+ checkable.setChecked(o, false); >+ if (hasListeners(source)) { >+ fireSetChange(source, Diffs.createSetDiff( >+ Collections.EMPTY_SET, Collections.singleton(o))); >+ } >+ } >+ return removed; >+ } >+ >+ public boolean removeAll(Object source, Collection c) { >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ Set removals = createElementSet(checkable); >+ >+ for (Iterator it = set.iterator(); it.hasNext();) { >+ Object element = it.next(); >+ if (c.contains(element)) { >+ it.remove(); >+ checkable.setChecked(element, false); >+ removals.add(element); >+ } >+ } >+ >+ boolean changed = !removals.isEmpty(); >+ if (changed && hasListeners(source)) >+ fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET, >+ removals)); >+ >+ return changed; >+ } >+ >+ public boolean retainAll(Object source, Collection c) { >+ ICheckable checkable = (ICheckable) source; >+ Set set = getSet(source); >+ Set removals = createElementSet(checkable); >+ >+ for (Iterator it = set.iterator(); it.hasNext();) { >+ Object element = it.next(); >+ if (!c.contains(element)) { >+ it.remove(); >+ checkable.setChecked(element, false); >+ removals.add(element); >+ } >+ } >+ >+ boolean changed = !removals.isEmpty(); >+ if (changed && hasListeners(source)) >+ fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET, >+ removals)); >+ >+ return changed; >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/CheckboxTableViewerCheckedElementsProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/CheckboxTableViewerCheckedElementsProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/CheckboxTableViewerCheckedElementsProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/CheckboxTableViewerCheckedElementsProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,44 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.Arrays; >+import java.util.Set; >+ >+import org.eclipse.jface.viewers.CheckboxTableViewer; >+import org.eclipse.jface.viewers.ICheckable; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class CheckboxTableViewerCheckedElementsProperty extends >+ CheckableCheckedElementsProperty { >+ /** >+ * @param elementType >+ */ >+ public CheckboxTableViewerCheckedElementsProperty(Object elementType) { >+ super(elementType); >+ } >+ >+ protected Set createElementSet(ICheckable checkable) { >+ return ViewerElementSet.withComparer(((CheckboxTableViewer) checkable) >+ .getComparer()); >+ } >+ >+ protected Set doGetSet(ICheckable checkable) { >+ CheckboxTableViewer viewer = (CheckboxTableViewer) checkable; >+ Set set = createElementSet(viewer); >+ set.addAll(Arrays.asList(viewer.getCheckedElements())); >+ return set; >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableListDecorator.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableListDecorator.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableListDecorator.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableListDecorator.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import org.eclipse.core.databinding.observable.list.DecoratingObservableList; >+import org.eclipse.core.databinding.observable.list.IObservableList; >+import org.eclipse.jface.databinding.viewers.IViewerObservableList; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class ViewerObservableListDecorator extends DecoratingObservableList >+ implements IViewerObservableList { >+ private final Viewer viewer; >+ >+ /** >+ * @param decorated >+ * @param viewer >+ */ >+ public ViewerObservableListDecorator(IObservableList decorated, >+ Viewer viewer) { >+ super(decorated, true); >+ this.viewer = viewer; >+ } >+ >+ public Viewer getViewer() { >+ return viewer; >+ } >+ >+} >Index: src/org/eclipse/jface/databinding/viewers/ViewerProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/ViewerProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/ViewerProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/ViewerProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,31 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.IValueProperty; >+import org.eclipse.jface.internal.databinding.viewers.ViewerInputProperty; >+ >+/** >+ * A factory for creating properties of JFace Viewers >+ * >+ * @since 1.3 >+ */ >+public class ViewerProperties { >+ /** >+ * Returns a value property for the input of a JFace Viewer. >+ * >+ * @return a value property for the input of a JFace Viewer. >+ */ >+ public static IValueProperty input() { >+ return new ViewerInputProperty(); >+ } >+} >Index: src/org/eclipse/jface/databinding/viewers/CheckboxTreeViewerProperties.java >=================================================================== >RCS file: src/org/eclipse/jface/databinding/viewers/CheckboxTreeViewerProperties.java >diff -N src/org/eclipse/jface/databinding/viewers/CheckboxTreeViewerProperties.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/databinding/viewers/CheckboxTreeViewerProperties.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,36 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.ISetProperty; >+import org.eclipse.jface.internal.databinding.viewers.CheckboxTreeViewerCheckedElementsProperty; >+ >+/** >+ * A factory for creating properties of JFace CheckboxTreeViewer >+ * >+ * @since 1.3 >+ */ >+public class CheckboxTreeViewerProperties { >+ /** >+ * Returns a set property for the checked elements of a JFace >+ * CheckboxTreeViewer. >+ * >+ * @param elementType >+ * the element type of the returned property >+ * >+ * @return a set property for the checked elements of a JFace >+ * CheckboxTreeViewer. >+ */ >+ public static ISetProperty checkedElements(Object elementType) { >+ return new CheckboxTreeViewerCheckedElementsProperty(elementType); >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerInputProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerInputProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerInputProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/ViewerInputProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,41 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import org.eclipse.core.databinding.property.BasicValueProperty; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class ViewerInputProperty extends BasicValueProperty { >+ protected void addListenerTo(Object source) { >+ // no listener API >+ } >+ >+ protected void removeListenerFrom(Object source) { >+ // no listener API >+ } >+ >+ public Object getValueType() { >+ return null; >+ } >+ >+ public Object getValue(Object source) { >+ return ((Viewer) source).getInput(); >+ } >+ >+ protected void doSetValue(Object source, Object value) { >+ ((Viewer) source).setInput(value); >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,77 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.HashMap; >+import java.util.Map; >+ >+import org.eclipse.core.databinding.observable.Diffs; >+import org.eclipse.core.databinding.property.BasicValueProperty; >+import org.eclipse.jface.util.Util; >+import org.eclipse.jface.viewers.ISelection; >+import org.eclipse.jface.viewers.ISelectionChangedListener; >+import org.eclipse.jface.viewers.ISelectionProvider; >+import org.eclipse.jface.viewers.IStructuredSelection; >+import org.eclipse.jface.viewers.SelectionChangedEvent; >+import org.eclipse.jface.viewers.StructuredSelection; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class SelectionProviderSingleSelectionProperty extends >+ BasicValueProperty implements ISelectionChangedListener { >+ private Map sourceToValue = new HashMap(); >+ >+ protected void addListenerTo(Object source) { >+ ((ISelectionProvider) source).addSelectionChangedListener(this); >+ sourceToValue.put(source, getValue(source)); >+ } >+ >+ protected void removeListenerFrom(Object source) { >+ ((ISelectionProvider) source).removeSelectionChangedListener(this); >+ sourceToValue.remove(source); >+ } >+ >+ public void selectionChanged(SelectionChangedEvent event) { >+ Object source = event.getSelectionProvider(); >+ if (!isUpdating(source)) { >+ Object oldValue = sourceToValue.get(source); >+ Object newValue = getValue(source); >+ sourceToValue.put(source, newValue); >+ if (!Util.equals(oldValue, newValue)) { >+ fireValueChange(source, Diffs.createValueDiff(oldValue, >+ newValue)); >+ } >+ } >+ >+ } >+ >+ public Object getValueType() { >+ return null; >+ } >+ >+ public Object getValue(Object source) { >+ ISelection selection = ((ISelectionProvider) source).getSelection(); >+ if (selection instanceof IStructuredSelection) { >+ return ((IStructuredSelection) selection).getFirstElement(); >+ } >+ return null; >+ } >+ >+ protected void doSetValue(Object source, Object value) { >+ ((ISelectionProvider) source) >+ .setSelection(value == null ? StructuredSelection.EMPTY >+ : new StructuredSelection(value)); >+ sourceToValue.put(source, value); >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/CheckboxTreeViewerCheckedElementsProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/CheckboxTreeViewerCheckedElementsProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/CheckboxTreeViewerCheckedElementsProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/CheckboxTreeViewerCheckedElementsProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,44 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.Arrays; >+import java.util.Set; >+ >+import org.eclipse.jface.viewers.CheckboxTreeViewer; >+import org.eclipse.jface.viewers.ICheckable; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class CheckboxTreeViewerCheckedElementsProperty extends >+ CheckableCheckedElementsProperty { >+ /** >+ * @param elementType >+ */ >+ public CheckboxTreeViewerCheckedElementsProperty(Object elementType) { >+ super(elementType); >+ } >+ >+ protected Set createElementSet(ICheckable checkable) { >+ return ViewerElementSet.withComparer(((CheckboxTreeViewer) checkable) >+ .getComparer()); >+ } >+ >+ protected Set doGetSet(ICheckable checkable) { >+ CheckboxTreeViewer viewer = (CheckboxTreeViewer) checkable; >+ Set set = createElementSet(viewer); >+ set.addAll(Arrays.asList(viewer.getCheckedElements())); >+ return set; >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/StructuredViewerFiltersProperty.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/StructuredViewerFiltersProperty.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/StructuredViewerFiltersProperty.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/StructuredViewerFiltersProperty.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,88 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import java.util.Arrays; >+import java.util.Collections; >+import java.util.HashSet; >+import java.util.Set; >+ >+import org.eclipse.core.databinding.observable.Diffs; >+import org.eclipse.core.databinding.property.BasicSetProperty; >+import org.eclipse.jface.viewers.StructuredViewer; >+import org.eclipse.jface.viewers.ViewerFilter; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class StructuredViewerFiltersProperty extends BasicSetProperty { >+ protected void addListenerTo(Object source) { >+ // no listener API >+ } >+ >+ protected void removeListenerFrom(Object source) { >+ // no listener API >+ } >+ >+ public Object getElementType() { >+ return ViewerFilter.class; >+ } >+ >+ public Set getSet(Object source) { >+ return new HashSet(Arrays.asList(((StructuredViewer) source) >+ .getFilters())); >+ } >+ >+ protected void doSetSet(Object source, Set set) { >+ StructuredViewer viewer = (StructuredViewer) source; >+ viewer.getControl().setRedraw(false); >+ try { >+ viewer.setFilters((ViewerFilter[]) set.toArray(new ViewerFilter[set >+ .size()])); >+ } finally { >+ viewer.getControl().setRedraw(true); >+ } >+ } >+ >+ public boolean add(Object source, Object o) { >+ StructuredViewer viewer = (StructuredViewer) source; >+ ViewerFilter filter = (ViewerFilter) o; >+ >+ Set filters = getSet(source); >+ boolean added = filters.add(o); >+ if (added) { >+ viewer.addFilter(filter); >+ if (hasListeners(source)) { >+ fireSetChange(source, Diffs.createSetDiff(Collections >+ .singleton(filter), Collections.EMPTY_SET)); >+ } >+ } >+ return added; >+ } >+ >+ public boolean remove(Object source, Object o) { >+ StructuredViewer viewer = (StructuredViewer) source; >+ ViewerFilter filter = (ViewerFilter) o; >+ >+ Set filters = getSet(source); >+ boolean removed = filters.remove(o); >+ if (removed) { >+ viewer.removeFilter(filter); >+ if (hasListeners(source)) { >+ fireSetChange(source, Diffs.createSetDiff( >+ Collections.EMPTY_SET, Collections.singleton(filter))); >+ } >+ } >+ return removed; >+ } >+} >Index: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableValueDecorator.java >=================================================================== >RCS file: src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableValueDecorator.java >diff -N src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableValueDecorator.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableValueDecorator.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,40 @@ >+/******************************************************************************* >+ * Copyright (c) 2008 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Eclipse Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/epl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ ******************************************************************************/ >+ >+package org.eclipse.jface.internal.databinding.viewers; >+ >+import org.eclipse.core.databinding.observable.value.DecoratingObservableValue; >+import org.eclipse.core.databinding.observable.value.IObservableValue; >+import org.eclipse.jface.databinding.viewers.IViewerObservableValue; >+import org.eclipse.jface.viewers.Viewer; >+ >+/** >+ * @since 3.3 >+ * >+ */ >+public class ViewerObservableValueDecorator extends DecoratingObservableValue >+ implements IViewerObservableValue { >+ private final Viewer viewer; >+ >+ /** >+ * @param decorated >+ * @param viewer >+ */ >+ public ViewerObservableValueDecorator(IObservableValue decorated, >+ Viewer viewer) { >+ super(decorated, true); >+ this.viewer = viewer; >+ } >+ >+ public Viewer getViewer() { >+ return viewer; >+ } >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 248174
: 113163