Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 248174
Collapse All | Expand All

(-)src/org/eclipse/jface/tests/internal/databinding/viewers/ViewerInputObservableValueTest.java (-14 / +15 lines)
Lines 18-27 Link Here
18
import org.eclipse.core.databinding.observable.Realm;
18
import org.eclipse.core.databinding.observable.Realm;
19
import org.eclipse.core.databinding.observable.value.IObservableValue;
19
import org.eclipse.core.databinding.observable.value.IObservableValue;
20
import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
20
import org.eclipse.core.databinding.observable.value.ValueChangeEvent;
21
import org.eclipse.core.databinding.property.PropertyObservables;
21
import org.eclipse.jface.databinding.conformance.MutableObservableValueContractTest;
22
import org.eclipse.jface.databinding.conformance.MutableObservableValueContractTest;
22
import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
23
import org.eclipse.jface.databinding.conformance.delegate.AbstractObservableValueContractDelegate;
23
import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
24
import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
24
import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue;
25
import org.eclipse.jface.databinding.viewers.ViewerProperties;
26
import org.eclipse.jface.databinding.viewers.ViewersObservables;
25
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
27
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
26
import org.eclipse.jface.viewers.IStructuredContentProvider;
28
import org.eclipse.jface.viewers.IStructuredContentProvider;
27
import org.eclipse.jface.viewers.TableViewer;
29
import org.eclipse.jface.viewers.TableViewer;
Lines 55-70 Link Here
55
57
56
	public void testConstructor_IllegalArgumentException() {
58
	public void testConstructor_IllegalArgumentException() {
57
		try {
59
		try {
58
			new ViewerInputObservableValue(Realm.getDefault(), null);
60
			ViewersObservables.observeInput(null);
59
			fail("Expected IllegalArgumentException for null argument");
61
			fail("Expected IllegalArgumentException for null argument");
60
		} catch (IllegalArgumentException expected) {
62
		} catch (IllegalArgumentException expected) {
61
		}
63
		}
62
	}
64
	}
63
65
64
	public void testSetInputOnViewer_FiresNoChangeEvents() {
66
	public void testSetInputOnViewer_FiresNoChangeEvents() {
65
		IObservableValue observable = new ViewerInputObservableValue(Realm
67
		IObservableValue observable = ViewersObservables.observeInput(viewer);
66
				.getDefault(), viewer);
68
		ValueChangeEventTracker listener = ValueChangeEventTracker
67
		ValueChangeEventTracker listener = ValueChangeEventTracker.observe(observable);
69
				.observe(observable);
68
70
69
		assertNull(viewer.getInput());
71
		assertNull(viewer.getInput());
70
		assertEquals(0, listener.count);
72
		assertEquals(0, listener.count);
Lines 81-88 Link Here
81
	}
83
	}
82
84
83
	public void testGetSetValue_FiresChangeEvents() {
85
	public void testGetSetValue_FiresChangeEvents() {
84
		IObservableValue observable = new ViewerInputObservableValue(Realm
86
		IObservableValue observable = ViewersObservables.observeInput(viewer);
85
				.getDefault(), viewer);
86
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
87
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
87
		observable.addValueChangeListener(listener);
88
		observable.addValueChangeListener(listener);
88
89
Lines 103-116 Link Here
103
	}
104
	}
104
105
105
	public void testGetValueType_AlwaysNull() throws Exception {
106
	public void testGetValueType_AlwaysNull() throws Exception {
106
		IObservableValue observable = new ViewerInputObservableValue(Realm
107
		IObservableValue observable = ViewersObservables.observeInput(viewer);
107
				.getDefault(), viewer);
108
		assertEquals(null, observable.getValueType());
108
		assertEquals(null, observable.getValueType());
109
	}
109
	}
110
110
111
	public void testDispose() throws Exception {
111
	public void testDispose() throws Exception {
112
		IObservableValue observable = new ViewerInputObservableValue(Realm
112
		IObservableValue observable = ViewersObservables.observeInput(viewer);
113
				.getDefault(), viewer);
114
		observable.dispose();
113
		observable.dispose();
115
		assertNull(observable.getRealm());
114
		assertNull(observable.getRealm());
116
		try {
115
		try {
Lines 141-147 Link Here
141
	}
140
	}
142
141
143
	public static Test suite() {
142
	public static Test suite() {
144
		TestSuite suite = new TestSuite(ViewerInputObservableValueTest.class.getName());
143
		TestSuite suite = new TestSuite(ViewerInputObservableValueTest.class
144
				.getName());
145
		suite.addTestSuite(ViewerInputObservableValueTest.class);
145
		suite.addTestSuite(ViewerInputObservableValueTest.class);
146
		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
146
		suite.addTest(MutableObservableValueContractTest.suite(new Delegate()));
147
		return suite;
147
		return suite;
Lines 165-175 Link Here
165
		}
165
		}
166
166
167
		public IObservableValue createObservableValue(Realm realm) {
167
		public IObservableValue createObservableValue(Realm realm) {
168
			return new ViewerInputObservableValue(realm, viewer);
168
			return PropertyObservables.observeValue(realm, viewer,
169
					ViewerProperties.input());
169
		}
170
		}
170
171
171
		public void change(IObservable observable) {
172
		public void change(IObservable observable) {
172
			IObservableValue value = (IObservableValue)observable;
173
			IObservableValue value = (IObservableValue) observable;
173
			value.setValue(createValue(value));
174
			value.setValue(createValue(value));
174
		}
175
		}
175
176
(-)src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValueTest.java (-13 / +9 lines)
Lines 14-29 Link Here
14
14
15
import junit.framework.TestCase;
15
import junit.framework.TestCase;
16
16
17
import org.eclipse.core.databinding.observable.value.IObservableValue;
17
import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
18
import org.eclipse.jface.databinding.conformance.util.ValueChangeEventTracker;
18
import org.eclipse.jface.databinding.swt.SWTObservables;
19
import org.eclipse.jface.databinding.viewers.ViewersObservables;
19
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValue;
20
import org.eclipse.jface.viewers.ISelectionProvider;
20
import org.eclipse.jface.viewers.ISelectionProvider;
21
import org.eclipse.jface.viewers.IStructuredContentProvider;
21
import org.eclipse.jface.viewers.IStructuredContentProvider;
22
import org.eclipse.jface.viewers.StructuredSelection;
22
import org.eclipse.jface.viewers.StructuredSelection;
23
import org.eclipse.jface.viewers.TableViewer;
23
import org.eclipse.jface.viewers.TableViewer;
24
import org.eclipse.jface.viewers.Viewer;
24
import org.eclipse.jface.viewers.Viewer;
25
import org.eclipse.swt.SWT;
25
import org.eclipse.swt.SWT;
26
import org.eclipse.swt.widgets.Display;
27
import org.eclipse.swt.widgets.Shell;
26
import org.eclipse.swt.widgets.Shell;
28
27
29
/**
28
/**
Lines 41-47 Link Here
41
40
42
	/*
41
	/*
43
	 * (non-Javadoc)
42
	 * (non-Javadoc)
44
	 *
43
	 * 
45
	 * @see junit.framework.TestCase#setUp()
44
	 * @see junit.framework.TestCase#setUp()
46
	 */
45
	 */
47
	protected void setUp() throws Exception {
46
	protected void setUp() throws Exception {
Lines 54-60 Link Here
54
53
55
	/*
54
	/*
56
	 * (non-Javadoc)
55
	 * (non-Javadoc)
57
	 *
56
	 * 
58
	 * @see junit.framework.TestCase#tearDown()
57
	 * @see junit.framework.TestCase#tearDown()
59
	 */
58
	 */
60
	protected void tearDown() throws Exception {
59
	protected void tearDown() throws Exception {
Lines 65-72 Link Here
65
64
66
	public void testConstructorIllegalArgumentException() {
65
	public void testConstructorIllegalArgumentException() {
67
		try {
66
		try {
68
			new SelectionProviderSingleSelectionObservableValue(SWTObservables
67
			ViewersObservables.observeSingleSelection(null);
69
					.getRealm(Display.getDefault()), null);
70
			fail();
68
			fail();
71
		} catch (IllegalArgumentException e) {
69
		} catch (IllegalArgumentException e) {
72
		}
70
		}
Lines 80-88 Link Here
80
	 * </ul>
78
	 * </ul>
81
	 */
79
	 */
82
	public void testGetSetValue() {
80
	public void testGetSetValue() {
83
		SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue(
81
		IObservableValue observable = ViewersObservables
84
				SWTObservables.getRealm(Display.getDefault()),
82
				.observeSingleSelection(selectionProvider);
85
				selectionProvider);
86
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
83
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
87
		observable.addValueChangeListener(listener);
84
		observable.addValueChangeListener(listener);
88
		assertNull(observable.getValue());
85
		assertNull(observable.getValue());
Lines 110-118 Link Here
110
	}
107
	}
111
108
112
	public void testDispose() throws Exception {
109
	public void testDispose() throws Exception {
113
		SelectionProviderSingleSelectionObservableValue observable = new SelectionProviderSingleSelectionObservableValue(
110
		IObservableValue observable = ViewersObservables
114
				SWTObservables.getRealm(Display.getDefault()),
111
				.observeSingleSelection(selectionProvider);
115
				selectionProvider);
116
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
112
		ValueChangeEventTracker listener = new ValueChangeEventTracker();
117
		observable.addValueChangeListener(listener);
113
		observable.addValueChangeListener(listener);
118
114
(-)src/org/eclipse/jface/tests/internal/databinding/viewers/SelectionProviderMultiSelectionObservableListTest.java (-30 / +42 lines)
Lines 13-22 Link Here
13
13
14
import junit.framework.TestCase;
14
import junit.framework.TestCase;
15
15
16
import org.eclipse.core.databinding.observable.list.IObservableList;
16
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
17
import org.eclipse.core.databinding.observable.list.ListDiffEntry;
17
import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
18
import org.eclipse.jface.databinding.conformance.util.ListChangeEventTracker;
18
import org.eclipse.jface.databinding.swt.SWTObservables;
19
import org.eclipse.jface.databinding.viewers.ViewersObservables;
19
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionObservableList;
20
import org.eclipse.jface.viewers.ISelectionProvider;
20
import org.eclipse.jface.viewers.ISelectionProvider;
21
import org.eclipse.jface.viewers.IStructuredContentProvider;
21
import org.eclipse.jface.viewers.IStructuredContentProvider;
22
import org.eclipse.jface.viewers.IStructuredSelection;
22
import org.eclipse.jface.viewers.IStructuredSelection;
Lines 24-30 Link Here
24
import org.eclipse.jface.viewers.TableViewer;
24
import org.eclipse.jface.viewers.TableViewer;
25
import org.eclipse.jface.viewers.Viewer;
25
import org.eclipse.jface.viewers.Viewer;
26
import org.eclipse.swt.SWT;
26
import org.eclipse.swt.SWT;
27
import org.eclipse.swt.widgets.Display;
28
import org.eclipse.swt.widgets.Shell;
27
import org.eclipse.swt.widgets.Shell;
29
28
30
/**
29
/**
Lines 37-43 Link Here
37
36
38
	private TableViewer viewer;
37
	private TableViewer viewer;
39
38
40
	private static String[] model = new String[] { "0", "1", "2", "3" };
39
	private static String[] model = new String[] { "element0", "element1", "element2", "element3" };
41
40
42
	protected void setUp() throws Exception {
41
	protected void setUp() throws Exception {
43
		Shell shell = new Shell();
42
		Shell shell = new Shell();
Lines 55-62 Link Here
55
54
56
	public void testConstructorIllegalArgumentException() {
55
	public void testConstructorIllegalArgumentException() {
57
		try {
56
		try {
58
			new SelectionProviderMultipleSelectionObservableList(SWTObservables
57
			ViewersObservables.observeMultiSelection(null);
59
					.getRealm(Display.getDefault()), null, Object.class);
60
			fail();
58
			fail();
61
		} catch (IllegalArgumentException e) {
59
		} catch (IllegalArgumentException e) {
62
		}
60
		}
Lines 70-78 Link Here
70
	 * </ul>
68
	 * </ul>
71
	 */
69
	 */
72
	public void testAddRemove() {
70
	public void testAddRemove() {
73
		SelectionProviderMultipleSelectionObservableList observable = new SelectionProviderMultipleSelectionObservableList(
71
		IObservableList observable = ViewersObservables
74
				SWTObservables.getRealm(Display.getDefault()),
72
				.observeMultiSelection(selectionProvider);
75
				selectionProvider, Object.class);
76
		ListChangeEventTracker listener = new ListChangeEventTracker();
73
		ListChangeEventTracker listener = new ListChangeEventTracker();
77
		observable.addListChangeListener(listener);
74
		observable.addListChangeListener(listener);
78
		assertEquals(0, observable.size());
75
		assertEquals(0, observable.size());
Lines 80-86 Link Here
80
		selectionProvider.setSelection(new StructuredSelection(model[0]));
77
		selectionProvider.setSelection(new StructuredSelection(model[0]));
81
		assertEquals(1, listener.count);
78
		assertEquals(1, listener.count);
82
		assertEquals(1, listener.event.diff.getDifferences().length);
79
		assertEquals(1, listener.event.diff.getDifferences().length);
83
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[0], true);
80
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[0],
81
				true);
84
		assertEquals(observable, listener.event.getObservableList());
82
		assertEquals(observable, listener.event.getObservableList());
85
		assertEquals(1, observable.size());
83
		assertEquals(1, observable.size());
86
		assertEquals(model[0], observable.get(0));
84
		assertEquals(model[0], observable.get(0));
Lines 88-143 Link Here
88
		selectionProvider.setSelection(new StructuredSelection(model[1]));
86
		selectionProvider.setSelection(new StructuredSelection(model[1]));
89
		assertEquals(2, listener.count);
87
		assertEquals(2, listener.count);
90
		assertEquals(2, listener.event.diff.getDifferences().length);
88
		assertEquals(2, listener.event.diff.getDifferences().length);
91
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], true);
89
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1],
92
		assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[0], false);
90
				true);
91
		assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[0],
92
				false);
93
		assertEquals(observable, listener.event.getObservableList());
93
		assertEquals(observable, listener.event.getObservableList());
94
		assertEquals(1, observable.size());
94
		assertEquals(1, observable.size());
95
		assertEquals(model[1], observable.get(0));
95
		assertEquals(model[1], observable.get(0));
96
96
97
		selectionProvider.setSelection(new StructuredSelection(new Object[]{model[2],model[3]}));
97
		selectionProvider.setSelection(new StructuredSelection(new Object[] {
98
				model[2], model[3] }));
98
		assertEquals(3, listener.count);
99
		assertEquals(3, listener.count);
99
		assertEquals(3, listener.event.diff.getDifferences().length);
100
		assertEquals(3, listener.event.diff.getDifferences().length);
100
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2], true);
101
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2],
101
		assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[3], true);
102
				true);
102
		assertDiffEntry(listener.event.diff.getDifferences()[2], 2, model[1], false);
103
		assertDiffEntry(listener.event.diff.getDifferences()[1], 1, model[3],
104
				true);
105
		assertDiffEntry(listener.event.diff.getDifferences()[2], 2, model[1],
106
				false);
103
		assertEquals(observable, listener.event.getObservableList());
107
		assertEquals(observable, listener.event.getObservableList());
104
		assertEquals(2, observable.size());
108
		assertEquals(2, observable.size());
105
		assertEquals(model[2], observable.get(0));
109
		assertEquals(model[2], observable.get(0));
106
		assertEquals(model[3], observable.get(1));
110
		assertEquals(model[3], observable.get(1));
107
		
111
108
		selectionProvider.setSelection(StructuredSelection.EMPTY);
112
		selectionProvider.setSelection(StructuredSelection.EMPTY);
109
		assertEquals(4, listener.count);
113
		assertEquals(4, listener.count);
110
		assertEquals(2, listener.event.diff.getDifferences().length);
114
		assertEquals(2, listener.event.diff.getDifferences().length);
111
		assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[3], false);
115
		assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[3],
112
		assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2], false);
116
				false);
117
		assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2],
118
				false);
113
		assertEquals(observable, listener.event.getObservableList());
119
		assertEquals(observable, listener.event.getObservableList());
114
		assertEquals(0, observable.size());
120
		assertEquals(0, observable.size());
115
		
121
116
		observable.add(model[1]);
122
		observable.add(model[1]);
117
		assertEquals(5, listener.count);
123
		assertEquals(5, listener.count);
118
		assertEquals(1, listener.event.diff.getDifferences().length);
124
		assertEquals(1, listener.event.diff.getDifferences().length);
119
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1], true);
125
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1],
126
				true);
120
		assertEquals(observable, listener.event.getObservableList());
127
		assertEquals(observable, listener.event.getObservableList());
121
		assertEquals(1, ((IStructuredSelection)viewer.getSelection()).size());
128
		assertEquals(1, ((IStructuredSelection) viewer.getSelection()).size());
122
129
123
		observable.add(0, model[2]);
130
		observable.add(0, model[2]);
124
		assertEquals(6, listener.count);
131
		assertEquals(6, listener.count);
125
		assertEquals(1, listener.event.diff.getDifferences().length);
132
		assertEquals(1, listener.event.diff.getDifferences().length);
126
		// This is a bit surprising (we added at index 0 but the event says index 1).
133
		// This is a bit surprising (we added at index 0 but the event says
127
		// It is to the fact that the observable list tracks the underlying selection
134
		// index 1).
135
		// It is to the fact that the observable list tracks the underlying
136
		// selection
128
		// provider's notion of which element is at which index.
137
		// provider's notion of which element is at which index.
129
		assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[2], true);
138
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[2],
139
				true);
130
		assertEquals(observable, listener.event.getObservableList());
140
		assertEquals(observable, listener.event.getObservableList());
131
		assertEquals(2, ((IStructuredSelection)viewer.getSelection()).size());
141
		assertEquals(2, ((IStructuredSelection) viewer.getSelection()).size());
132
142
133
		observable.clear();
143
		observable.clear();
134
		assertEquals(7, listener.count);
144
		assertEquals(7, listener.count);
135
		assertEquals(2, listener.event.diff.getDifferences().length);
145
		assertEquals(2, listener.event.diff.getDifferences().length);
136
		assertDiffEntry(listener.event.diff.getDifferences()[0], 1, model[2], false);
146
		assertDiffEntry(listener.event.diff.getDifferences()[0], 0, model[1],
137
		assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[1], false);
147
				false);
148
		assertDiffEntry(listener.event.diff.getDifferences()[1], 0, model[2],
149
				false);
138
		assertEquals(observable, listener.event.getObservableList());
150
		assertEquals(observable, listener.event.getObservableList());
139
		assertEquals(0, ((IStructuredSelection)viewer.getSelection()).size());
151
		assertEquals(0, ((IStructuredSelection) viewer.getSelection()).size());
140
}
152
	}
141
153
142
	/**
154
	/**
143
	 * @param diffEntry
155
	 * @param diffEntry
(-)src/org/eclipse/jface/tests/databinding/viewers/ViewersObservablesTest.java (-4 / +10 lines)
Lines 11-21 Link Here
11
11
12
package org.eclipse.jface.tests.databinding.viewers;
12
package org.eclipse.jface.tests.databinding.viewers;
13
13
14
import org.eclipse.core.databinding.observable.IDecoratingObservable;
14
import org.eclipse.core.databinding.observable.Realm;
15
import org.eclipse.core.databinding.observable.Realm;
15
import org.eclipse.core.databinding.observable.value.IObservableValue;
16
import org.eclipse.core.databinding.property.IPropertyObservable;
16
import org.eclipse.jface.databinding.swt.SWTObservables;
17
import org.eclipse.jface.databinding.swt.SWTObservables;
18
import org.eclipse.jface.databinding.viewers.IViewerObservableValue;
17
import org.eclipse.jface.databinding.viewers.ViewersObservables;
19
import org.eclipse.jface.databinding.viewers.ViewersObservables;
18
import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue;
20
import org.eclipse.jface.internal.databinding.viewers.ViewerInputProperty;
19
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
21
import org.eclipse.jface.tests.databinding.AbstractDefaultRealmTestCase;
20
import org.eclipse.jface.viewers.TableViewer;
22
import org.eclipse.jface.viewers.TableViewer;
21
import org.eclipse.swt.SWT;
23
import org.eclipse.swt.SWT;
Lines 48-54 Link Here
48
	}
50
	}
49
51
50
	public void testObserveInput_InstanceOfViewerInputObservableValue() {
52
	public void testObserveInput_InstanceOfViewerInputObservableValue() {
51
		IObservableValue observable = ViewersObservables.observeInput(viewer);
53
		IViewerObservableValue observable = (IViewerObservableValue) ViewersObservables
52
		assertTrue(observable instanceof ViewerInputObservableValue);
54
				.observeInput(viewer);
55
		assertTrue(observable.getViewer() == viewer);
56
		IPropertyObservable propertyObservable = (IPropertyObservable) ((IDecoratingObservable) observable)
57
				.getDecorated();
58
		assertTrue(propertyObservable.getProperty() instanceof ViewerInputProperty);
53
	}
59
	}
54
}
60
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerInputObservableValue.java (-73 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Matthew Hall and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Matthew Hall - initial API and implementation (bug 206839)
10
 *******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import org.eclipse.core.databinding.observable.Diffs;
15
import org.eclipse.core.databinding.observable.Realm;
16
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
17
import org.eclipse.jface.util.Util;
18
import org.eclipse.jface.viewers.Viewer;
19
20
/**
21
 * Observes the input of a <code>Viewer</code>.
22
 * <p>
23
 * This observer is blind to changes in the viewer's input unless its
24
 * {@link #setValue(Object)} method is called directly.
25
 * 
26
 * @since 1.2
27
 */
28
public class ViewerInputObservableValue extends AbstractObservableValue {
29
30
  private final Viewer viewer;
31
32
  /**
33
   * Constructs a new instance associated with the provided <code>viewer</code>.
34
   * 
35
   * @param realm
36
   * @param viewer
37
   */
38
  public ViewerInputObservableValue( Realm realm, Viewer viewer ) {
39
    super( realm );
40
    if ( viewer == null ) {
41
      throw new IllegalArgumentException( "The 'viewer' parameter is null." ); //$NON-NLS-1$
42
    }
43
44
    this.viewer = viewer;
45
  }
46
47
  /**
48
   * Sets the input to the provided <code>value</code>. Value change events are
49
   * fired after input is set in the viewer.
50
   * 
51
   * @param value object to set as input
52
   */
53
  protected void doSetValue( final Object value ) {
54
    Object oldValue = doGetValue();
55
    viewer.setInput( value );
56
    if ( !Util.equals( oldValue, value ) ) {
57
      fireValueChange( Diffs.createValueDiff( oldValue, value ) );
58
    }
59
  }
60
61
  /**
62
   * Retrieves the current input.
63
   * 
64
   * @return the current input
65
   */
66
  protected Object doGetValue() {
67
    return viewer.getInput();
68
  }
69
70
  public Object getValueType() {
71
    return null;
72
  }
73
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerSingleSelectionObservableValue.java (-45 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *     Brad Reynolds - bug 137877
11
 *     Brad Reynolds - bug 164653
12
 *     Brad Reynolds - bug 147515
13
 *     Ashley Cambrell - bug 198906
14
 *******************************************************************************/
15
16
package org.eclipse.jface.internal.databinding.viewers;
17
18
import org.eclipse.core.databinding.observable.Realm;
19
import org.eclipse.jface.databinding.viewers.IViewerObservableValue;
20
import org.eclipse.jface.viewers.Viewer;
21
22
/**
23
 * Observes single selection of a <code>Viewer</code>.
24
 * 
25
 * @since 1.2
26
 */
27
public class ViewerSingleSelectionObservableValue extends
28
		SelectionProviderSingleSelectionObservableValue implements
29
		IViewerObservableValue {
30
31
	private Viewer viewer;
32
33
	/**
34
	 * @param realm
35
	 * @param viewer
36
	 */
37
	public ViewerSingleSelectionObservableValue(Realm realm, Viewer viewer) {
38
		super(realm, viewer);
39
		this.viewer = viewer;
40
	}
41
42
	public Viewer getViewer() {
43
		return viewer;
44
	}
45
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerMultipleSelectionObservableList.java (-47 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *     Brad Reynolds - bug 137877
11
 *     Brad Reynolds - bug 164653
12
 *     Brad Reynolds - bug 147515
13
 *     Ashley Cambrell - bug 198906
14
 *******************************************************************************/
15
16
package org.eclipse.jface.internal.databinding.viewers;
17
18
import org.eclipse.core.databinding.observable.Realm;
19
import org.eclipse.jface.databinding.viewers.IViewerObservableList;
20
import org.eclipse.jface.viewers.Viewer;
21
22
/**
23
 * Observes single selection of a <code>Viewer</code>.
24
 * 
25
 * @since 1.2
26
 */
27
public class ViewerMultipleSelectionObservableList extends
28
		SelectionProviderMultipleSelectionObservableList implements
29
		IViewerObservableList {
30
31
	private Viewer viewer;
32
33
	/**
34
	 * @param realm
35
	 * @param viewer
36
	 * @param elementType
37
	 */
38
	public ViewerMultipleSelectionObservableList(Realm realm, Viewer viewer,
39
			Object elementType) {
40
		super(realm, viewer, elementType);
41
		this.viewer = viewer;
42
	}
43
44
	public Viewer getViewer() {
45
		return viewer;
46
	}
47
}
(-)src/org/eclipse/jface/internal/databinding/viewers/CheckboxViewerCheckedElementsObservableSet.java (-90 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 Matthew Hall and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Matthew Hall - initial API and implementation (bug 124684)
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Arrays;
15
import java.util.Set;
16
17
import org.eclipse.core.databinding.observable.Realm;
18
import org.eclipse.jface.databinding.viewers.IViewerObservableSet;
19
import org.eclipse.jface.viewers.CheckboxTableViewer;
20
import org.eclipse.jface.viewers.CheckboxTreeViewer;
21
import org.eclipse.jface.viewers.StructuredViewer;
22
import org.eclipse.jface.viewers.Viewer;
23
24
/**
25
 * An observable set that tracks the checked elements in a CheckboxTableViewer
26
 * or CheckboxTreeViewer
27
 * 
28
 * @since 1.2
29
 */
30
public class CheckboxViewerCheckedElementsObservableSet extends
31
		CheckableCheckedElementsObservableSet implements IViewerObservableSet {
32
	private StructuredViewer viewer;
33
34
	/**
35
	 * Constructs a new instance on the given realm and checkable.
36
	 * 
37
	 * @param realm
38
	 *            the observable's realm
39
	 * @param viewer
40
	 *            the CheckboxTableViewer viewer to track.
41
	 * @param elementType
42
	 *            type of elements in the set
43
	 */
44
	public CheckboxViewerCheckedElementsObservableSet(Realm realm,
45
			CheckboxTableViewer viewer, Object elementType) {
46
		super(realm, viewer, elementType, createElementSet(viewer));
47
		this.viewer = viewer;
48
	}
49
50
	/**
51
	 * Constructs a new instance on the given realm and checkable.
52
	 * 
53
	 * @param realm
54
	 *            the observable's realm
55
	 * @param viewer
56
	 *            the CheckboxTreeViewer viewer to track.
57
	 * @param elementType
58
	 *            type of elements in the set
59
	 */
60
	public CheckboxViewerCheckedElementsObservableSet(Realm realm,
61
			CheckboxTreeViewer viewer, Object elementType) {
62
		super(realm, viewer, elementType, createElementSet(viewer));
63
		this.viewer = viewer;
64
	}
65
66
	Set createDiffSet() {
67
		return ViewerElementSet.withComparer(viewer.getComparer());
68
	}
69
70
	private static Set createElementSet(CheckboxTableViewer viewer) {
71
		Set set = ViewerElementSet.withComparer(viewer.getComparer());
72
		set.addAll(Arrays.asList(viewer.getCheckedElements()));
73
		return set;
74
	}
75
76
	private static Set createElementSet(CheckboxTreeViewer viewer) {
77
		Set set = ViewerElementSet.withComparer(viewer.getComparer());
78
		set.addAll(Arrays.asList(viewer.getCheckedElements()));
79
		return set;
80
	}
81
82
	public Viewer getViewer() {
83
		return viewer;
84
	}
85
86
	public synchronized void dispose() {
87
		viewer = null;
88
		super.dispose();
89
	}
90
}
(-)src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionObservableValue.java (-147 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *     Brad Reynolds - bug 137877
11
 *     Brad Reynolds - bug 164653
12
 *     Brad Reynolds - bug 147515
13
 *     Ashley Cambrell - bug 198906
14
 *******************************************************************************/
15
16
package org.eclipse.jface.internal.databinding.viewers;
17
18
import org.eclipse.core.databinding.observable.Diffs;
19
import org.eclipse.core.databinding.observable.Realm;
20
import org.eclipse.core.databinding.observable.value.AbstractObservableValue;
21
import org.eclipse.jface.util.Util;
22
import org.eclipse.jface.viewers.ISelection;
23
import org.eclipse.jface.viewers.ISelectionChangedListener;
24
import org.eclipse.jface.viewers.ISelectionProvider;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.SelectionChangedEvent;
27
import org.eclipse.jface.viewers.StructuredSelection;
28
29
/**
30
 * Observes single selection of an <code>ISelectionProvider</code>.
31
 *
32
 * @since 1.1
33
 */
34
public class SelectionProviderSingleSelectionObservableValue extends
35
		AbstractObservableValue {
36
37
	private final ISelectionProvider selectionProvider;
38
39
	private boolean updating = false;
40
41
	private Object currentSelection;
42
43
	private ISelectionChangedListener selectionChangedListener;
44
45
	/**
46
	 * Constructs a new instance associated with the provided
47
	 * <code>selectionProvider</code>. In order to initialize itself properly
48
	 * the constructor invokes {@link #doGetValue()}. This could be dangerous
49
	 * for subclasses, see {@link #doGetValue()} for an explanation.
50
	 *
51
	 * @param realm
52
	 *
53
	 * @param selectionProvider
54
	 * @see #doGetValue()
55
	 */
56
	public SelectionProviderSingleSelectionObservableValue(Realm realm,
57
			ISelectionProvider selectionProvider) {
58
		super(realm);
59
		if (selectionProvider == null) {
60
			throw new IllegalArgumentException(
61
					"The 'selectionProvider' parameter is null."); //$NON-NLS-1$
62
		}
63
64
		this.selectionProvider = selectionProvider;
65
		this.currentSelection = doGetValue();
66
67
		selectionChangedListener = new ISelectionChangedListener() {
68
			public void selectionChanged(SelectionChangedEvent event) {
69
				if (!updating) {
70
					Object oldSelection = currentSelection;
71
					currentSelection = doGetValue();
72
					fireValueChange(Diffs.createValueDiff(oldSelection,
73
							currentSelection));
74
				}
75
			}
76
		};
77
		selectionProvider.addSelectionChangedListener(selectionChangedListener);
78
	}
79
80
	/**
81
	 * Sets the selection to the provided <code>value</code>. Value change
82
	 * events are fired after selection is set in the selection provider.
83
	 *
84
	 * @param value
85
	 *            object to set as selected, <code>null</code> if wanting to
86
	 *            remove selection
87
	 */
88
	public void doSetValue(final Object value) {
89
		try {
90
			updating = true;
91
92
			Object oldSelection = currentSelection;
93
			selectionProvider
94
					.setSelection(value == null ? StructuredSelection.EMPTY
95
							: new StructuredSelection(value));
96
			currentSelection = doGetValue();
97
			if (!Util.equals(oldSelection, currentSelection)) {
98
				fireValueChange(Diffs.createValueDiff(oldSelection,
99
						currentSelection));
100
			}
101
		} finally {
102
			updating = false;
103
		}
104
	}
105
106
	/**
107
	 * Retrieves the current selection.
108
	 * <p>
109
	 * If a subclass overrides this method it must not depend upon the subclass
110
	 * to have been fully initialized before this method is invoked.
111
	 * <code>doGetValue()</code> is invoked by the
112
	 * {@link #SelectionProviderSingleSelectionObservableValue(Realm, ISelectionProvider) constructor}
113
	 * which means the subclass's constructor will not have fully executed
114
	 * before this method is invoked.
115
	 * </p>
116
	 *
117
	 * @return selection will be an instance of
118
	 *         <code>IStructuredSelection</code> if a selection exists,
119
	 *         <code>null</code> if no selection
120
	 * @see #SelectionProviderSingleSelectionObservableValue(Realm,
121
	 *      ISelectionProvider)
122
	 */
123
	protected Object doGetValue() {
124
		ISelection selection = selectionProvider.getSelection();
125
		if (selection instanceof IStructuredSelection) {
126
			IStructuredSelection sel = (IStructuredSelection) selection;
127
			return sel.getFirstElement();
128
		}
129
130
		return null;
131
	}
132
133
	public Object getValueType() {
134
		return null;
135
	}
136
137
	/*
138
	 * (non-Javadoc)
139
	 *
140
	 * @see org.eclipse.core.databinding.observable.value.AbstractObservableValue#dispose()
141
	 */
142
	public synchronized void dispose() {
143
		selectionProvider
144
				.removeSelectionChangedListener(selectionChangedListener);
145
		super.dispose();
146
	}
147
}
(-)src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsObservableSet.java (-219 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 Matthew Hall and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Matthew Hall - initial API and implementation (bug 124684)
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Collection;
15
import java.util.Collections;
16
import java.util.HashSet;
17
import java.util.Iterator;
18
import java.util.Set;
19
20
import org.eclipse.core.databinding.observable.Diffs;
21
import org.eclipse.core.databinding.observable.Realm;
22
import org.eclipse.core.databinding.observable.set.AbstractObservableSet;
23
import org.eclipse.core.runtime.Assert;
24
import org.eclipse.jface.viewers.CheckStateChangedEvent;
25
import org.eclipse.jface.viewers.ICheckStateListener;
26
import org.eclipse.jface.viewers.ICheckable;
27
28
/**
29
 * 
30
 * @since 1.2
31
 */
32
public class CheckableCheckedElementsObservableSet extends
33
		AbstractObservableSet {
34
	private ICheckable checkable;
35
	private Set wrappedSet;
36
	private Object elementType;
37
	private ICheckStateListener listener;
38
39
	/**
40
	 * Constructs a new instance on the given realm and checkable.
41
	 * 
42
	 * @param realm
43
	 *            the observable's realm
44
	 * @param checkable
45
	 *            the ICheckable to track
46
	 * @param elementType
47
	 *            type of elements in the set
48
	 */
49
	public CheckableCheckedElementsObservableSet(Realm realm,
50
			ICheckable checkable, Object elementType) {
51
		this(realm, checkable, elementType, new HashSet());
52
	}
53
54
	/**
55
	 * Constructs a new instance of the given realm, and checkable,
56
	 * 
57
	 * @param realm
58
	 *            the observable's realm
59
	 * @param checkable
60
	 *            the ICheckable to track
61
	 * @param elementType
62
	 *            type of elements in the set
63
	 * @param wrappedSet
64
	 *            the set being wrapped
65
	 */
66
	public CheckableCheckedElementsObservableSet(Realm realm,
67
			ICheckable checkable, Object elementType, final Set wrappedSet) {
68
		super(realm);
69
		Assert.isNotNull(checkable, "Checkable cannot be null"); //$NON-NLS-1$
70
		Assert.isNotNull(wrappedSet, "Wrapped set cannot be null"); //$NON-NLS-1$
71
		this.checkable = checkable;
72
		this.wrappedSet = wrappedSet;
73
		this.elementType = elementType;
74
75
		listener = new ICheckStateListener() {
76
			public void checkStateChanged(CheckStateChangedEvent event) {
77
				Object element = event.getElement();
78
				if (event.getChecked()) {
79
					if (wrappedSet.add(element))
80
						fireSetChange(Diffs.createSetDiff(Collections
81
								.singleton(element), Collections.EMPTY_SET));
82
				} else {
83
					if (wrappedSet.remove(element))
84
						fireSetChange(Diffs.createSetDiff(
85
								Collections.EMPTY_SET, Collections
86
										.singleton(element)));
87
				}
88
			}
89
		};
90
		checkable.addCheckStateListener(listener);
91
	}
92
93
	protected Set getWrappedSet() {
94
		return wrappedSet;
95
	}
96
97
	Set createDiffSet() {
98
		return new HashSet();
99
	}
100
101
	public Object getElementType() {
102
		return elementType;
103
	}
104
105
	public boolean add(Object o) {
106
		getterCalled();
107
		boolean added = wrappedSet.add(o);
108
		if (added) {
109
			checkable.setChecked(o, true);
110
			fireSetChange(Diffs.createSetDiff(Collections.singleton(o),
111
					Collections.EMPTY_SET));
112
		}
113
		return added;
114
	}
115
116
	public boolean remove(Object o) {
117
		getterCalled();
118
		boolean removed = wrappedSet.remove(o);
119
		if (removed) {
120
			checkable.setChecked(o, false);
121
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET,
122
					Collections.singleton(o)));
123
		}
124
		return removed;
125
	}
126
127
	public boolean addAll(Collection c) {
128
		getterCalled();
129
		Set additions = createDiffSet();
130
		for (Iterator iterator = c.iterator(); iterator.hasNext();) {
131
			Object element = iterator.next();
132
			if (wrappedSet.add(element)) {
133
				checkable.setChecked(element, true);
134
				additions.add(element);
135
			}
136
		}
137
		boolean changed = !additions.isEmpty();
138
		if (changed)
139
			fireSetChange(Diffs.createSetDiff(additions, Collections.EMPTY_SET));
140
		return changed;
141
	}
142
143
	public boolean removeAll(Collection c) {
144
		getterCalled();
145
		Set removals = createDiffSet();
146
		for (Iterator iterator = c.iterator(); iterator.hasNext();) {
147
			Object element = iterator.next();
148
			if (wrappedSet.remove(element)) {
149
				checkable.setChecked(element, false);
150
				removals.add(element);
151
			}
152
		}
153
		boolean changed = !removals.isEmpty();
154
		if (changed)
155
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removals));
156
		return changed;
157
	}
158
159
	public boolean retainAll(Collection c) {
160
		getterCalled();
161
162
		// To ensure that elements are compared correctly, e.g. ViewerElementSet
163
		Set toRetain = createDiffSet();
164
		toRetain.addAll(c);
165
166
		Set removals = createDiffSet();
167
		for (Iterator iterator = wrappedSet.iterator(); iterator.hasNext();) {
168
			Object element = iterator.next();
169
			if (!toRetain.contains(element)) {
170
				iterator.remove();
171
				checkable.setChecked(element, false);
172
				removals.add(element);
173
			}
174
		}
175
		boolean changed = !removals.isEmpty();
176
		if (changed)
177
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removals));
178
		return changed;
179
	}
180
181
	public void clear() {
182
		removeAll(wrappedSet);
183
	}
184
185
	public Iterator iterator() {
186
		getterCalled();
187
		final Iterator wrappedIterator = wrappedSet.iterator();
188
		return new Iterator() {
189
			private Object last = null;
190
191
			public boolean hasNext() {
192
				getterCalled();
193
				return wrappedIterator.hasNext();
194
			}
195
196
			public Object next() {
197
				getterCalled();
198
				return last = wrappedIterator.next();
199
			}
200
201
			public void remove() {
202
				getterCalled();
203
				wrappedIterator.remove();
204
				checkable.setChecked(last, false);
205
				fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET,
206
						Collections.singleton(last)));
207
			}
208
		};
209
	}
210
211
	public synchronized void dispose() {
212
		if (checkable != null) {
213
			checkable.removeCheckStateListener(listener);
214
			checkable = null;
215
			listener = null;
216
		}
217
		super.dispose();
218
	}
219
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerFiltersObservableSet.java (-174 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2005, 2008 Matthew Hall and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Matthew Hall - initial API and implementation (bug 239302)
10
 *******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Arrays;
15
import java.util.Collection;
16
import java.util.Collections;
17
import java.util.HashSet;
18
import java.util.Iterator;
19
import java.util.Set;
20
21
import org.eclipse.core.databinding.observable.Diffs;
22
import org.eclipse.core.databinding.observable.Realm;
23
import org.eclipse.core.databinding.observable.set.ObservableSet;
24
import org.eclipse.jface.databinding.viewers.IViewerObservableSet;
25
import org.eclipse.jface.viewers.StructuredViewer;
26
import org.eclipse.jface.viewers.Viewer;
27
import org.eclipse.jface.viewers.ViewerFilter;
28
29
/**
30
 * An observable set that tracks the filters of the given viewer. Note that this
31
 * set will not track changes that are made using direct API on StructuredViewer
32
 * (by calling
33
 * {@link StructuredViewer#addFilter(org.eclipse.jface.viewers.ViewerFilter)
34
 * addFilter()},
35
 * {@link StructuredViewer#removeFilter(org.eclipse.jface.viewers.ViewerFilter)
36
 * removeFilter()}, or
37
 * {@link StructuredViewer#setFilters(org.eclipse.jface.viewers.ViewerFilter[])
38
 * setFilters()}) -- it is assumed that filters are only changed through the
39
 * set.
40
 * 
41
 * @since 1.2
42
 */
43
public class ViewerFiltersObservableSet extends ObservableSet implements
44
		IViewerObservableSet {
45
46
	private StructuredViewer viewer;
47
48
	/**
49
	 * @param realm
50
	 * @param viewer
51
	 */
52
	public ViewerFiltersObservableSet(Realm realm, StructuredViewer viewer) {
53
		super(realm, new HashSet(Arrays.asList(viewer.getFilters())),
54
				ViewerFilter.class);
55
		this.viewer = viewer;
56
	}
57
58
	public Viewer getViewer() {
59
		return viewer;
60
	}
61
62
	private void replaceFilters() {
63
		viewer.getControl().setRedraw(false);
64
		try {
65
			viewer.setFilters((ViewerFilter[]) wrappedSet
66
					.toArray(new ViewerFilter[wrappedSet.size()]));
67
		} finally {
68
			viewer.getControl().setRedraw(true);
69
		}
70
	}
71
72
	private void addFilter(ViewerFilter filter) {
73
		viewer.getControl().setRedraw(false);
74
		try {
75
			viewer.addFilter(filter);
76
		} finally {
77
			viewer.getControl().setRedraw(true);
78
		}
79
	}
80
81
	private void removeFilter(ViewerFilter filter) {
82
		viewer.getControl().setRedraw(false);
83
		try {
84
			viewer.removeFilter(filter);
85
		} finally {
86
			viewer.getControl().setRedraw(true);
87
		}
88
	}
89
90
	public boolean add(Object element) {
91
		checkRealm();
92
		boolean added = wrappedSet.add(element);
93
		if (added) {
94
			addFilter((ViewerFilter) element);
95
			fireSetChange(Diffs.createSetDiff(Collections.singleton(element),
96
					Collections.EMPTY_SET));
97
		}
98
		return added;
99
	}
100
101
	public boolean addAll(Collection c) {
102
		getterCalled();
103
		Set additions = new HashSet();
104
		Iterator it = c.iterator();
105
		while (it.hasNext()) {
106
			Object element = it.next();
107
			if (wrappedSet.add(element)) {
108
				additions.add(element);
109
			}
110
		}
111
		if (additions.size() > 0) {
112
			replaceFilters();
113
			fireSetChange(Diffs.createSetDiff(additions, Collections.EMPTY_SET));
114
			return true;
115
		}
116
		return false;
117
	}
118
119
	public void clear() {
120
		getterCalled();
121
		Set removes = new HashSet(wrappedSet);
122
		wrappedSet.clear();
123
		replaceFilters();
124
		fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes));
125
	}
126
127
	public boolean remove(Object o) {
128
		getterCalled();
129
		boolean removed = wrappedSet.remove(o);
130
		if (removed) {
131
			removeFilter((ViewerFilter) o);
132
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET,
133
					Collections.singleton(o)));
134
		}
135
		return removed;
136
	}
137
138
	public boolean removeAll(Collection c) {
139
		getterCalled();
140
		Set removes = new HashSet();
141
		Iterator it = c.iterator();
142
		while (it.hasNext()) {
143
			Object element = it.next();
144
			if (wrappedSet.remove(element)) {
145
				removes.add(element);
146
			}
147
		}
148
		if (removes.size() > 0) {
149
			replaceFilters();
150
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes));
151
			return true;
152
		}
153
		return false;
154
	}
155
156
	public boolean retainAll(Collection c) {
157
		getterCalled();
158
		Set removes = new HashSet();
159
		Iterator it = wrappedSet.iterator();
160
		while (it.hasNext()) {
161
			Object element = it.next();
162
			if (!c.contains(element)) {
163
				it.remove();
164
				removes.add(element);
165
			}
166
		}
167
		if (removes.size() > 0) {
168
			replaceFilters();
169
			fireSetChange(Diffs.createSetDiff(Collections.EMPTY_SET, removes));
170
			return true;
171
		}
172
		return false;
173
	}
174
}
(-)src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionObservableList.java (-111 lines)
Removed Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2007 Peter Centgraf and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     Peter Centgraf - initial API and implementation, bug 124683
10
 *     Boris Bokowski, IBM Corporation - initial API and implementation
11
 *******************************************************************************/
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.ArrayList;
15
import java.util.Collections;
16
import java.util.List;
17
18
import org.eclipse.core.databinding.observable.Diffs;
19
import org.eclipse.core.databinding.observable.Realm;
20
import org.eclipse.core.databinding.observable.list.ListDiff;
21
import org.eclipse.core.databinding.observable.list.WritableList;
22
import org.eclipse.jface.viewers.ISelection;
23
import org.eclipse.jface.viewers.ISelectionChangedListener;
24
import org.eclipse.jface.viewers.ISelectionProvider;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.SelectionChangedEvent;
27
import org.eclipse.jface.viewers.StructuredSelection;
28
29
/**
30
 * Observes multiple-selection of an {@link ISelectionProvider}.
31
 * 
32
 * @since 1.2
33
 */
34
public class SelectionProviderMultipleSelectionObservableList extends
35
		WritableList {
36
37
	protected ISelectionProvider selectionProvider;
38
	protected boolean handlingSelection;
39
	protected boolean updating;
40
	protected SelectionListener selectionListener = new SelectionListener();
41
42
	class SelectionListener implements ISelectionChangedListener {
43
		public void selectionChanged(SelectionChangedEvent event) {
44
			if (updating) {
45
				return;
46
			}
47
			handlingSelection = true;
48
			try {
49
				updateWrappedList(new ArrayList(getSelectionList(event.getSelection())));
50
			} finally {
51
				handlingSelection = false;
52
			}
53
		}
54
	}
55
56
	/**
57
	 * Create a new observable list based on the current selection of the given
58
	 * selection provider. Assumes that the selection provider provides
59
	 * structured selections.
60
	 * 
61
	 * @param realm
62
	 * @param selectionProvider
63
	 * @param elementType
64
	 */
65
	public SelectionProviderMultipleSelectionObservableList(Realm realm,
66
			ISelectionProvider selectionProvider, Object elementType) {
67
		super(realm, new ArrayList(getSelectionList(selectionProvider)), elementType);
68
		this.selectionProvider = selectionProvider;
69
		selectionProvider.addSelectionChangedListener(selectionListener);
70
	}
71
72
	protected void fireListChange(ListDiff diff) {
73
		if (handlingSelection) {
74
			super.fireListChange(diff);
75
		} else {
76
			// this is a bit of a hack - we are changing the diff to match the order
77
			// of elements returned by the selection provider after we've set the
78
			// selection.
79
			updating = true;
80
			try {
81
				List oldList = getSelectionList(selectionProvider);
82
				selectionProvider
83
						.setSelection(new StructuredSelection(wrappedList));
84
				wrappedList = new ArrayList(getSelectionList(selectionProvider));
85
				super.fireListChange(Diffs.computeListDiff(oldList, wrappedList));
86
			} finally {
87
				updating = false;
88
			}
89
		}
90
	}
91
92
	protected static List getSelectionList(ISelectionProvider selectionProvider) {
93
		if (selectionProvider == null) {
94
			throw new IllegalArgumentException();
95
		}
96
		return getSelectionList(selectionProvider.getSelection());
97
	}
98
99
	protected static List getSelectionList(ISelection sel) {
100
		if (sel instanceof IStructuredSelection) {
101
			return ((IStructuredSelection) sel).toList();
102
		}
103
		return Collections.EMPTY_LIST;
104
	}
105
106
	public synchronized void dispose() {
107
		selectionProvider.removeSelectionChangedListener(selectionListener);
108
		selectionProvider = null;
109
		super.dispose();
110
	}
111
}
(-)src/org/eclipse/jface/databinding/viewers/ViewersObservables.java (-40 / +90 lines)
Lines 12-29 Link Here
12
12
13
package org.eclipse.jface.databinding.viewers;
13
package org.eclipse.jface.databinding.viewers;
14
14
15
import org.eclipse.core.databinding.observable.Realm;
15
import org.eclipse.core.databinding.observable.list.IObservableList;
16
import org.eclipse.core.databinding.observable.list.IObservableList;
16
import org.eclipse.core.databinding.observable.set.IObservableSet;
17
import org.eclipse.core.databinding.observable.set.IObservableSet;
17
import org.eclipse.core.databinding.observable.value.IObservableValue;
18
import org.eclipse.core.databinding.observable.value.IObservableValue;
19
import org.eclipse.core.databinding.property.IListProperty;
20
import org.eclipse.core.databinding.property.ISetProperty;
21
import org.eclipse.core.databinding.property.IValueProperty;
22
import org.eclipse.core.databinding.property.PropertyObservables;
18
import org.eclipse.jface.databinding.swt.SWTObservables;
23
import org.eclipse.jface.databinding.swt.SWTObservables;
19
import org.eclipse.jface.internal.databinding.viewers.CheckableCheckedElementsObservableSet;
24
import org.eclipse.jface.internal.databinding.viewers.ViewerObservableListDecorator;
20
import org.eclipse.jface.internal.databinding.viewers.CheckboxViewerCheckedElementsObservableSet;
25
import org.eclipse.jface.internal.databinding.viewers.ViewerObservableSetDecorator;
21
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionObservableList;
26
import org.eclipse.jface.internal.databinding.viewers.ViewerObservableValueDecorator;
22
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionObservableValue;
23
import org.eclipse.jface.internal.databinding.viewers.ViewerFiltersObservableSet;
24
import org.eclipse.jface.internal.databinding.viewers.ViewerInputObservableValue;
25
import org.eclipse.jface.internal.databinding.viewers.ViewerMultipleSelectionObservableList;
26
import org.eclipse.jface.internal.databinding.viewers.ViewerSingleSelectionObservableValue;
27
import org.eclipse.jface.viewers.CheckboxTableViewer;
27
import org.eclipse.jface.viewers.CheckboxTableViewer;
28
import org.eclipse.jface.viewers.CheckboxTreeViewer;
28
import org.eclipse.jface.viewers.CheckboxTreeViewer;
29
import org.eclipse.jface.viewers.ICheckable;
29
import org.eclipse.jface.viewers.ICheckable;
Lines 39-44 Link Here
39
 * @since 1.1
39
 * @since 1.1
40
 */
40
 */
41
public class ViewersObservables {
41
public class ViewersObservables {
42
	private static Realm getDefaultRealm() {
43
		return SWTObservables.getRealm(Display.getDefault());
44
	}
45
46
	private static Realm getRealm(Viewer viewer) {
47
		return SWTObservables.getRealm(viewer.getControl().getDisplay());
48
	}
49
50
	private static void checkNull(Object obj) {
51
		if (obj == null)
52
			throw new IllegalArgumentException();
53
	}
54
55
	private static IObservableValue observeProperty(Object source,
56
			IValueProperty property) {
57
		checkNull(source);
58
		if (source instanceof Viewer) {
59
			return observeViewerProperty((Viewer) source, property);
60
		}
61
		return PropertyObservables.observeValue(getDefaultRealm(), source,
62
				property);
63
	}
64
65
	private static IViewerObservableValue observeViewerProperty(Viewer viewer,
66
			IValueProperty property) {
67
		checkNull(viewer);
68
		return new ViewerObservableValueDecorator(PropertyObservables
69
				.observeValue(getRealm(viewer), viewer, property), viewer);
70
	}
71
72
	private static IObservableSet observeProperty(Object source,
73
			ISetProperty property) {
74
		checkNull(source);
75
		if (source instanceof Viewer) {
76
			return observeViewerProperty((Viewer) source, property);
77
		}
78
		return PropertyObservables.observeSet(getDefaultRealm(), source,
79
				property);
80
	}
81
82
	private static IViewerObservableSet observeViewerProperty(Viewer viewer,
83
			ISetProperty property) {
84
		checkNull(viewer);
85
		return new ViewerObservableSetDecorator(PropertyObservables.observeSet(
86
				getRealm(viewer), viewer, property), viewer);
87
	}
88
89
	private static IObservableList observeProperty(Object source,
90
			IListProperty property) {
91
		checkNull(source);
92
		if (source instanceof Viewer) {
93
			return observeViewerProperty((Viewer) source, property);
94
		}
95
		Realm realm = getDefaultRealm();
96
		return PropertyObservables.observeList(realm, source, property);
97
	}
98
99
	private static IViewerObservableList observeViewerProperty(Viewer viewer,
100
			IListProperty property) {
101
		checkNull(viewer);
102
		Realm realm = getRealm(viewer);
103
		return new ViewerObservableListDecorator(PropertyObservables
104
				.observeList(realm, viewer, property), viewer);
105
	}
42
106
43
	/**
107
	/**
44
	 * Returns an observable value that tracks the current selection of the
108
	 * Returns an observable value that tracks the current selection of the
Lines 53-64 Link Here
53
	 */
117
	 */
54
	public static IObservableValue observeSingleSelection(
118
	public static IObservableValue observeSingleSelection(
55
			ISelectionProvider selectionProvider) {
119
			ISelectionProvider selectionProvider) {
56
		if (selectionProvider instanceof Viewer) {
120
		return observeProperty(selectionProvider, SelectionProviderProperties
57
			return observeSingleSelection((Viewer) selectionProvider);
121
				.singleSelection());
58
		}
59
		return new SelectionProviderSingleSelectionObservableValue(
60
				SWTObservables.getRealm(Display.getDefault()),
61
				selectionProvider);
62
	}
122
	}
63
123
64
	/**
124
	/**
Lines 82-93 Link Here
82
	 */
142
	 */
83
	public static IObservableList observeMultiSelection(
143
	public static IObservableList observeMultiSelection(
84
			ISelectionProvider selectionProvider) {
144
			ISelectionProvider selectionProvider) {
85
		if (selectionProvider instanceof Viewer) {
145
		return observeProperty(selectionProvider, SelectionProviderProperties
86
			return observeMultiSelection((Viewer) selectionProvider);
146
				.multipleSelection());
87
		}
88
		return new SelectionProviderMultipleSelectionObservableList(
89
				SWTObservables.getRealm(Display.getDefault()),
90
				selectionProvider, Object.class);
91
	}
147
	}
92
148
93
	/**
149
	/**
Lines 104-112 Link Here
104
	 * @since 1.2
160
	 * @since 1.2
105
	 */
161
	 */
106
	public static IViewerObservableValue observeSingleSelection(Viewer viewer) {
162
	public static IViewerObservableValue observeSingleSelection(Viewer viewer) {
107
		return new ViewerSingleSelectionObservableValue(
163
		return observeViewerProperty(viewer, SelectionProviderProperties
108
				SWTObservables.getRealm(Display.getDefault()),
164
				.singleSelection());
109
				viewer);
110
	}
165
	}
111
	
166
	
112
	/**
167
	/**
Lines 128-138 Link Here
128
	 * 
183
	 * 
129
	 * @since 1.2
184
	 * @since 1.2
130
	 */
185
	 */
131
	public static IViewerObservableList observeMultiSelection(
186
	public static IViewerObservableList observeMultiSelection(Viewer viewer) {
132
			Viewer viewer) {
187
		return observeViewerProperty(viewer, SelectionProviderProperties
133
		return new ViewerMultipleSelectionObservableList(
188
				.multipleSelection());
134
				SWTObservables.getRealm(Display.getDefault()),
135
				viewer, Object.class);
136
	}
189
	}
137
	
190
	
138
	/**
191
	/**
Lines 147-154 Link Here
147
	 * @since 1.2
200
	 * @since 1.2
148
	 */
201
	 */
149
	public static IObservableValue observeInput(Viewer viewer) {
202
	public static IObservableValue observeInput(Viewer viewer) {
150
		return new ViewerInputObservableValue(SWTObservables.getRealm(viewer
203
		return observeViewerProperty(viewer, ViewerProperties.input());
151
				.getControl().getDisplay()), viewer);
152
	}
204
	}
153
205
154
	/**
206
	/**
Lines 173-180 Link Here
173
			return observeCheckedElements((CheckboxTreeViewer) checkable,
225
			return observeCheckedElements((CheckboxTreeViewer) checkable,
174
					elementType);
226
					elementType);
175
		}
227
		}
176
		return new CheckableCheckedElementsObservableSet(SWTObservables
228
		return observeProperty(checkable, CheckableProperties
177
				.getRealm(Display.getDefault()), checkable, elementType);
229
				.checkedElements(elementType));
178
	}
230
	}
179
231
180
	/**
232
	/**
Lines 192-200 Link Here
192
	 */
244
	 */
193
	public static IViewerObservableSet observeCheckedElements(
245
	public static IViewerObservableSet observeCheckedElements(
194
			CheckboxTableViewer viewer, Object elementType) {
246
			CheckboxTableViewer viewer, Object elementType) {
195
		return new CheckboxViewerCheckedElementsObservableSet(SWTObservables
247
		return observeViewerProperty(viewer, CheckboxTableViewerProperties
196
				.getRealm(viewer.getControl().getDisplay()), viewer,
248
				.checkedElements(elementType));
197
				elementType);
198
	}
249
	}
199
250
200
	/**
251
	/**
Lines 212-220 Link Here
212
	 */
263
	 */
213
	public static IViewerObservableSet observeCheckedElements(
264
	public static IViewerObservableSet observeCheckedElements(
214
			CheckboxTreeViewer viewer, Object elementType) {
265
			CheckboxTreeViewer viewer, Object elementType) {
215
		return new CheckboxViewerCheckedElementsObservableSet(SWTObservables
266
		return observeViewerProperty(viewer, CheckboxTreeViewerProperties
216
				.getRealm(viewer.getControl().getDisplay()), viewer,
267
				.checkedElements(elementType));
217
				elementType);
218
	}
268
	}
219
269
220
	/**
270
	/**
Lines 235-241 Link Here
235
	 * @since 1.3
285
	 * @since 1.3
236
	 */
286
	 */
237
	public static IViewerObservableSet observeFilters(StructuredViewer viewer) {
287
	public static IViewerObservableSet observeFilters(StructuredViewer viewer) {
238
		return new ViewerFiltersObservableSet(SWTObservables.getRealm(viewer
288
		return observeViewerProperty(viewer, StructuredViewerProperties
239
				.getControl().getDisplay()), viewer);
289
				.filters());
240
	}
290
	}
241
}
291
}
(-)src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderMultipleSelectionProperty.java (+76 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Collections;
15
import java.util.HashMap;
16
import java.util.List;
17
import java.util.Map;
18
19
import org.eclipse.core.databinding.observable.Diffs;
20
import org.eclipse.core.databinding.property.BasicListProperty;
21
import org.eclipse.jface.util.Util;
22
import org.eclipse.jface.viewers.ISelection;
23
import org.eclipse.jface.viewers.ISelectionChangedListener;
24
import org.eclipse.jface.viewers.ISelectionProvider;
25
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.SelectionChangedEvent;
27
import org.eclipse.jface.viewers.StructuredSelection;
28
29
/**
30
 * @since 3.3
31
 * 
32
 */
33
public class SelectionProviderMultipleSelectionProperty extends BasicListProperty
34
		implements ISelectionChangedListener {
35
	private Map sourceToList = new HashMap();
36
37
	protected void addListenerTo(Object source) {
38
		((ISelectionProvider) source).addSelectionChangedListener(this);
39
		sourceToList.put(source, getList(source));
40
	}
41
42
	protected void removeListenerFrom(Object source) {
43
		((ISelectionProvider) source).removeSelectionChangedListener(this);
44
		sourceToList.remove(source);
45
	}
46
47
	public void selectionChanged(SelectionChangedEvent event) {
48
		Object source = event.getSelectionProvider();
49
		if (!isUpdating(source)) {
50
			List oldList = (List) sourceToList.get(source);
51
			List newList = getList(source);
52
			sourceToList.put(source, newList);
53
			if (!Util.equals(oldList, newList)) {
54
				fireListChange(source, Diffs.computeListDiff(oldList, newList));
55
			}
56
		}
57
	}
58
59
	public List getList(Object source) {
60
		ISelection selection = ((ISelectionProvider) source).getSelection();
61
		if (selection instanceof IStructuredSelection) {
62
			return ((IStructuredSelection) selection).toList();
63
		}
64
		return Collections.EMPTY_LIST;
65
	}
66
67
	protected void doSetList(Object source, List list) {
68
		((ISelectionProvider) source)
69
				.setSelection(new StructuredSelection(list));
70
		sourceToList.put(source, list);
71
	}
72
73
	public Object getElementType() {
74
		return Object.class;
75
	}
76
}
(-)src/org/eclipse/jface/databinding/viewers/StructuredViewerProperties.java (+31 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.ISetProperty;
15
import org.eclipse.jface.internal.databinding.viewers.StructuredViewerFiltersProperty;
16
17
/**
18
 * A factory for creating properties of JFace StructuredViewers
19
 * 
20
 * @since 1.3
21
 */
22
public class StructuredViewerProperties {
23
	/**
24
	 * Returns a value property for the input of a JFace StructuredViewer.
25
	 * 
26
	 * @return a value property for the input of a JFace StructuredViewer.
27
	 */
28
	public static ISetProperty filters() {
29
		return new StructuredViewerFiltersProperty();
30
	}
31
}
(-)src/org/eclipse/jface/databinding/viewers/CheckboxTableViewerProperties.java (+36 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.ISetProperty;
15
import org.eclipse.jface.internal.databinding.viewers.CheckboxTableViewerCheckedElementsProperty;
16
17
/**
18
 * A factory for creating properties of JFace CheckboxTableViewer
19
 * 
20
 * @since 1.3
21
 */
22
public class CheckboxTableViewerProperties {
23
	/**
24
	 * Returns a set property for the checked elements of a JFace
25
	 * CheckboxTableViewer.
26
	 * 
27
	 * @param elementType
28
	 *            the element type of the returned property
29
	 * 
30
	 * @return a set property for the checked elements of a JFace
31
	 *         CheckboxTableViewer.
32
	 */
33
	public static ISetProperty checkedElements(Object elementType) {
34
		return new CheckboxTableViewerCheckedElementsProperty(elementType);
35
	}
36
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableSetDecorator.java (+40 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import org.eclipse.core.databinding.observable.set.DecoratingObservableSet;
15
import org.eclipse.core.databinding.observable.set.IObservableSet;
16
import org.eclipse.jface.databinding.viewers.IViewerObservableSet;
17
import org.eclipse.jface.viewers.Viewer;
18
19
/**
20
 * @since 3.3
21
 * 
22
 */
23
public class ViewerObservableSetDecorator extends DecoratingObservableSet
24
		implements IViewerObservableSet {
25
	private final Viewer viewer;
26
27
	/**
28
	 * @param decorated
29
	 * @param viewer
30
	 */
31
	public ViewerObservableSetDecorator(IObservableSet decorated, Viewer viewer) {
32
		super(decorated, true);
33
		this.viewer = viewer;
34
	}
35
36
	public Viewer getViewer() {
37
		return viewer;
38
	}
39
40
}
(-)src/org/eclipse/jface/databinding/viewers/CheckableProperties.java (+34 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.ISetProperty;
15
import org.eclipse.jface.internal.databinding.viewers.CheckableCheckedElementsProperty;
16
17
/**
18
 * A factory for creating properties of JFace ICheckables
19
 * 
20
 * @since 1.3
21
 */
22
public class CheckableProperties {
23
	/**
24
	 * Returns a set property for the checked elements of a JFace ICheckable.
25
	 * 
26
	 * @param elementType
27
	 *            the element type of the returned property
28
	 * 
29
	 * @return a set property for the checked elements of a JFace ICheckable.
30
	 */
31
	public static ISetProperty checkedElements(Object elementType) {
32
		return new CheckableCheckedElementsProperty(elementType);
33
	}
34
}
(-)src/org/eclipse/jface/databinding/viewers/SelectionProviderProperties.java (+46 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.IListProperty;
15
import org.eclipse.core.databinding.property.IValueProperty;
16
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderMultipleSelectionProperty;
17
import org.eclipse.jface.internal.databinding.viewers.SelectionProviderSingleSelectionProperty;
18
19
/**
20
 * A factory for creating properties of JFace ISelectionProviders
21
 * 
22
 * @since 1.3
23
 */
24
public class SelectionProviderProperties {
25
	/**
26
	 * Returns a value property for the single selection of a JFace
27
	 * ISelectionProvider.
28
	 * 
29
	 * @return a value property for the single selection of a JFace
30
	 *         ISelectionProvider.
31
	 */
32
	public static IValueProperty singleSelection() {
33
		return new SelectionProviderSingleSelectionProperty();
34
	}
35
36
	/**
37
	 * Returns a list property for the multiple selection of a JFace
38
	 * ISelectionProvider.
39
	 * 
40
	 * @return a list property for the multiple selection of a JFace
41
	 *         ISelectionProvider.
42
	 */
43
	public static IListProperty multipleSelection() {
44
		return new SelectionProviderMultipleSelectionProperty();
45
	}
46
}
(-)src/org/eclipse/jface/internal/databinding/viewers/CheckableCheckedElementsProperty.java (+217 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Collection;
15
import java.util.Collections;
16
import java.util.HashMap;
17
import java.util.HashSet;
18
import java.util.Iterator;
19
import java.util.Map;
20
import java.util.Set;
21
22
import org.eclipse.core.databinding.observable.Diffs;
23
import org.eclipse.core.databinding.property.SetProperty;
24
import org.eclipse.jface.viewers.CheckStateChangedEvent;
25
import org.eclipse.jface.viewers.ICheckStateListener;
26
import org.eclipse.jface.viewers.ICheckable;
27
28
/**
29
 * @since 3.3
30
 * 
31
 */
32
public class CheckableCheckedElementsProperty extends SetProperty implements
33
		ICheckStateListener {
34
	private Object elementType;
35
36
	private Map sourceToSet = new HashMap();
37
38
	/**
39
	 * @param elementType
40
	 */
41
	public CheckableCheckedElementsProperty(Object elementType) {
42
		this.elementType = elementType;
43
44
	}
45
46
	protected void addListenerTo(Object source) {
47
		((ICheckable) source).addCheckStateListener(this);
48
		sourceToSet.put(source, getSet(source));
49
	}
50
51
	protected void removeListenerFrom(Object source) {
52
		((ICheckable) source).removeCheckStateListener(this);
53
		sourceToSet.remove(source);
54
	}
55
56
	public void checkStateChanged(CheckStateChangedEvent event) {
57
		// ICheckable is documented to not fire events when setChecked() is
58
		// called, so no need to check whether the element is being updated.
59
60
		Object source = event.getCheckable();
61
		Set set = (Set) sourceToSet.get(source);
62
63
		Object element = event.getElement();
64
		if (event.getChecked()) {
65
			if (set.add(element)) {
66
				fireSetChange(source, Diffs.createSetDiff(Collections
67
						.singleton(element), Collections.EMPTY_SET));
68
			}
69
		} else {
70
			if (set.remove(element)) {
71
				fireSetChange(source, Diffs.createSetDiff(
72
						Collections.EMPTY_SET, Collections.singleton(element)));
73
			}
74
		}
75
	}
76
77
	public Object getElementType() {
78
		return elementType;
79
	}
80
81
	public final Set getSet(Object source) {
82
		ICheckable checkable = (ICheckable) source;
83
84
		Set set = doGetSet(checkable);
85
		if (set == null) {
86
			set = (Set) sourceToSet.get(source);
87
		}
88
		if (set == null) {
89
			set = createElementSet(checkable);
90
		}
91
		sourceToSet.put(source, set);
92
93
		return set;
94
	}
95
96
	protected Set doGetSet(ICheckable checkable) {
97
		return null;
98
	}
99
100
	protected Set createElementSet(ICheckable checkable) {
101
		return new HashSet();
102
	}
103
104
	public boolean add(Object source, Object o) {
105
		ICheckable checkable = (ICheckable) source;
106
		Set set = getSet(source);
107
108
		boolean added = set.add(source);
109
		if (added) {
110
			checkable.setChecked(o, true);
111
			if (hasListeners(source)) {
112
				fireSetChange(source, Diffs.createSetDiff(Collections
113
						.singleton(o), Collections.EMPTY_SET));
114
			}
115
		}
116
		return added;
117
	}
118
119
	public boolean addAll(Object source, Collection c) {
120
		ICheckable checkable = (ICheckable) source;
121
		Set set = getSet(source);
122
		Set additions = createElementSet(checkable);
123
124
		for (Iterator it = c.iterator(); it.hasNext();) {
125
			Object element = it.next();
126
			if (set.add(element)) {
127
				checkable.setChecked(element, true);
128
				additions.add(element);
129
			}
130
		}
131
132
		boolean changed = !additions.isEmpty();
133
		if (changed && hasListeners(source))
134
			fireSetChange(source, Diffs.createSetDiff(additions,
135
					Collections.EMPTY_SET));
136
137
		return changed;
138
	}
139
140
	public void clear(Object source) {
141
		if (isEmpty(source))
142
			return;
143
144
		ICheckable checkable = (ICheckable) source;
145
		Set set = getSet(source);
146
147
		for (Iterator it = set.iterator(); it.hasNext();) {
148
			checkable.setChecked(it.next(), false);
149
		}
150
151
		sourceToSet.put(source, createElementSet(checkable));
152
153
		if (hasListeners(source)) {
154
			fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET,
155
					set));
156
		}
157
	}
158
159
	public boolean remove(Object source, Object o) {
160
		ICheckable checkable = (ICheckable) source;
161
		Set set = getSet(source);
162
163
		boolean removed = set.remove(o);
164
		if (removed) {
165
			checkable.setChecked(o, false);
166
			if (hasListeners(source)) {
167
				fireSetChange(source, Diffs.createSetDiff(
168
						Collections.EMPTY_SET, Collections.singleton(o)));
169
			}
170
		}
171
		return removed;
172
	}
173
174
	public boolean removeAll(Object source, Collection c) {
175
		ICheckable checkable = (ICheckable) source;
176
		Set set = getSet(source);
177
		Set removals = createElementSet(checkable);
178
179
		for (Iterator it = set.iterator(); it.hasNext();) {
180
			Object element = it.next();
181
			if (c.contains(element)) {
182
				it.remove();
183
				checkable.setChecked(element, false);
184
				removals.add(element);
185
			}
186
		}
187
188
		boolean changed = !removals.isEmpty();
189
		if (changed && hasListeners(source))
190
			fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET,
191
					removals));
192
193
		return changed;
194
	}
195
196
	public boolean retainAll(Object source, Collection c) {
197
		ICheckable checkable = (ICheckable) source;
198
		Set set = getSet(source);
199
		Set removals = createElementSet(checkable);
200
201
		for (Iterator it = set.iterator(); it.hasNext();) {
202
			Object element = it.next();
203
			if (!c.contains(element)) {
204
				it.remove();
205
				checkable.setChecked(element, false);
206
				removals.add(element);
207
			}
208
		}
209
210
		boolean changed = !removals.isEmpty();
211
		if (changed && hasListeners(source))
212
			fireSetChange(source, Diffs.createSetDiff(Collections.EMPTY_SET,
213
					removals));
214
215
		return changed;
216
	}
217
}
(-)src/org/eclipse/jface/internal/databinding/viewers/CheckboxTableViewerCheckedElementsProperty.java (+44 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Arrays;
15
import java.util.Set;
16
17
import org.eclipse.jface.viewers.CheckboxTableViewer;
18
import org.eclipse.jface.viewers.ICheckable;
19
20
/**
21
 * @since 3.3
22
 * 
23
 */
24
public class CheckboxTableViewerCheckedElementsProperty extends
25
		CheckableCheckedElementsProperty {
26
	/**
27
	 * @param elementType
28
	 */
29
	public CheckboxTableViewerCheckedElementsProperty(Object elementType) {
30
		super(elementType);
31
	}
32
33
	protected Set createElementSet(ICheckable checkable) {
34
		return ViewerElementSet.withComparer(((CheckboxTableViewer) checkable)
35
				.getComparer());
36
	}
37
38
	protected Set doGetSet(ICheckable checkable) {
39
		CheckboxTableViewer viewer = (CheckboxTableViewer) checkable;
40
		Set set = createElementSet(viewer);
41
		set.addAll(Arrays.asList(viewer.getCheckedElements()));
42
		return set;
43
	}
44
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableListDecorator.java (+41 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import org.eclipse.core.databinding.observable.list.DecoratingObservableList;
15
import org.eclipse.core.databinding.observable.list.IObservableList;
16
import org.eclipse.jface.databinding.viewers.IViewerObservableList;
17
import org.eclipse.jface.viewers.Viewer;
18
19
/**
20
 * @since 3.3
21
 * 
22
 */
23
public class ViewerObservableListDecorator extends DecoratingObservableList
24
		implements IViewerObservableList {
25
	private final Viewer viewer;
26
27
	/**
28
	 * @param decorated
29
	 * @param viewer
30
	 */
31
	public ViewerObservableListDecorator(IObservableList decorated,
32
			Viewer viewer) {
33
		super(decorated, true);
34
		this.viewer = viewer;
35
	}
36
37
	public Viewer getViewer() {
38
		return viewer;
39
	}
40
41
}
(-)src/org/eclipse/jface/databinding/viewers/ViewerProperties.java (+31 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.IValueProperty;
15
import org.eclipse.jface.internal.databinding.viewers.ViewerInputProperty;
16
17
/**
18
 * A factory for creating properties of JFace Viewers
19
 * 
20
 * @since 1.3
21
 */
22
public class ViewerProperties {
23
	/**
24
	 * Returns a value property for the input of a JFace Viewer.
25
	 * 
26
	 * @return a value property for the input of a JFace Viewer.
27
	 */
28
	public static IValueProperty input() {
29
		return new ViewerInputProperty();
30
	}
31
}
(-)src/org/eclipse/jface/databinding/viewers/CheckboxTreeViewerProperties.java (+36 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.ISetProperty;
15
import org.eclipse.jface.internal.databinding.viewers.CheckboxTreeViewerCheckedElementsProperty;
16
17
/**
18
 * A factory for creating properties of JFace CheckboxTreeViewer
19
 * 
20
 * @since 1.3
21
 */
22
public class CheckboxTreeViewerProperties {
23
	/**
24
	 * Returns a set property for the checked elements of a JFace
25
	 * CheckboxTreeViewer.
26
	 * 
27
	 * @param elementType
28
	 *            the element type of the returned property
29
	 * 
30
	 * @return a set property for the checked elements of a JFace
31
	 *         CheckboxTreeViewer.
32
	 */
33
	public static ISetProperty checkedElements(Object elementType) {
34
		return new CheckboxTreeViewerCheckedElementsProperty(elementType);
35
	}
36
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerInputProperty.java (+41 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import org.eclipse.core.databinding.property.BasicValueProperty;
15
import org.eclipse.jface.viewers.Viewer;
16
17
/**
18
 * @since 3.3
19
 * 
20
 */
21
public class ViewerInputProperty extends BasicValueProperty {
22
	protected void addListenerTo(Object source) {
23
		// no listener API
24
	}
25
26
	protected void removeListenerFrom(Object source) {
27
		// no listener API
28
	}
29
30
	public Object getValueType() {
31
		return null;
32
	}
33
34
	public Object getValue(Object source) {
35
		return ((Viewer) source).getInput();
36
	}
37
38
	protected void doSetValue(Object source, Object value) {
39
		((Viewer) source).setInput(value);
40
	}
41
}
(-)src/org/eclipse/jface/internal/databinding/viewers/SelectionProviderSingleSelectionProperty.java (+77 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.HashMap;
15
import java.util.Map;
16
17
import org.eclipse.core.databinding.observable.Diffs;
18
import org.eclipse.core.databinding.property.BasicValueProperty;
19
import org.eclipse.jface.util.Util;
20
import org.eclipse.jface.viewers.ISelection;
21
import org.eclipse.jface.viewers.ISelectionChangedListener;
22
import org.eclipse.jface.viewers.ISelectionProvider;
23
import org.eclipse.jface.viewers.IStructuredSelection;
24
import org.eclipse.jface.viewers.SelectionChangedEvent;
25
import org.eclipse.jface.viewers.StructuredSelection;
26
27
/**
28
 * @since 3.3
29
 * 
30
 */
31
public class SelectionProviderSingleSelectionProperty extends
32
		BasicValueProperty implements ISelectionChangedListener {
33
	private Map sourceToValue = new HashMap();
34
35
	protected void addListenerTo(Object source) {
36
		((ISelectionProvider) source).addSelectionChangedListener(this);
37
		sourceToValue.put(source, getValue(source));
38
	}
39
40
	protected void removeListenerFrom(Object source) {
41
		((ISelectionProvider) source).removeSelectionChangedListener(this);
42
		sourceToValue.remove(source);
43
	}
44
45
	public void selectionChanged(SelectionChangedEvent event) {
46
		Object source = event.getSelectionProvider();
47
		if (!isUpdating(source)) {
48
			Object oldValue = sourceToValue.get(source);
49
			Object newValue = getValue(source);
50
			sourceToValue.put(source, newValue);
51
			if (!Util.equals(oldValue, newValue)) {
52
				fireValueChange(source, Diffs.createValueDiff(oldValue,
53
						newValue));
54
			}
55
		}
56
		
57
	}
58
59
	public Object getValueType() {
60
		return null;
61
	}
62
63
	public Object getValue(Object source) {
64
		ISelection selection = ((ISelectionProvider) source).getSelection();
65
		if (selection instanceof IStructuredSelection) {
66
			return ((IStructuredSelection) selection).getFirstElement();
67
		}
68
		return null;
69
	}
70
71
	protected void doSetValue(Object source, Object value) {
72
		((ISelectionProvider) source)
73
				.setSelection(value == null ? StructuredSelection.EMPTY
74
						: new StructuredSelection(value));
75
		sourceToValue.put(source, value);
76
	}
77
}
(-)src/org/eclipse/jface/internal/databinding/viewers/CheckboxTreeViewerCheckedElementsProperty.java (+44 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Arrays;
15
import java.util.Set;
16
17
import org.eclipse.jface.viewers.CheckboxTreeViewer;
18
import org.eclipse.jface.viewers.ICheckable;
19
20
/**
21
 * @since 3.3
22
 * 
23
 */
24
public class CheckboxTreeViewerCheckedElementsProperty extends
25
		CheckableCheckedElementsProperty {
26
	/**
27
	 * @param elementType
28
	 */
29
	public CheckboxTreeViewerCheckedElementsProperty(Object elementType) {
30
		super(elementType);
31
	}
32
33
	protected Set createElementSet(ICheckable checkable) {
34
		return ViewerElementSet.withComparer(((CheckboxTreeViewer) checkable)
35
				.getComparer());
36
	}
37
38
	protected Set doGetSet(ICheckable checkable) {
39
		CheckboxTreeViewer viewer = (CheckboxTreeViewer) checkable;
40
		Set set = createElementSet(viewer);
41
		set.addAll(Arrays.asList(viewer.getCheckedElements()));
42
		return set;
43
	}
44
}
(-)src/org/eclipse/jface/internal/databinding/viewers/StructuredViewerFiltersProperty.java (+88 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import java.util.Arrays;
15
import java.util.Collections;
16
import java.util.HashSet;
17
import java.util.Set;
18
19
import org.eclipse.core.databinding.observable.Diffs;
20
import org.eclipse.core.databinding.property.BasicSetProperty;
21
import org.eclipse.jface.viewers.StructuredViewer;
22
import org.eclipse.jface.viewers.ViewerFilter;
23
24
/**
25
 * @since 3.3
26
 * 
27
 */
28
public class StructuredViewerFiltersProperty extends BasicSetProperty {
29
	protected void addListenerTo(Object source) {
30
		// no listener API
31
	}
32
33
	protected void removeListenerFrom(Object source) {
34
		// no listener API
35
	}
36
37
	public Object getElementType() {
38
		return ViewerFilter.class;
39
	}
40
41
	public Set getSet(Object source) {
42
		return new HashSet(Arrays.asList(((StructuredViewer) source)
43
				.getFilters()));
44
	}
45
46
	protected void doSetSet(Object source, Set set) {
47
		StructuredViewer viewer = (StructuredViewer) source;
48
		viewer.getControl().setRedraw(false);
49
		try {
50
			viewer.setFilters((ViewerFilter[]) set.toArray(new ViewerFilter[set
51
					.size()]));
52
		} finally {
53
			viewer.getControl().setRedraw(true);
54
		}
55
	}
56
57
	public boolean add(Object source, Object o) {
58
		StructuredViewer viewer = (StructuredViewer) source;
59
		ViewerFilter filter = (ViewerFilter) o;
60
61
		Set filters = getSet(source);
62
		boolean added = filters.add(o);
63
		if (added) {
64
			viewer.addFilter(filter);
65
			if (hasListeners(source)) {
66
				fireSetChange(source, Diffs.createSetDiff(Collections
67
						.singleton(filter), Collections.EMPTY_SET));
68
			}
69
		}
70
		return added;
71
	}
72
73
	public boolean remove(Object source, Object o) {
74
		StructuredViewer viewer = (StructuredViewer) source;
75
		ViewerFilter filter = (ViewerFilter) o;
76
77
		Set filters = getSet(source);
78
		boolean removed = filters.remove(o);
79
		if (removed) {
80
			viewer.removeFilter(filter);
81
			if (hasListeners(source)) {
82
				fireSetChange(source, Diffs.createSetDiff(
83
						Collections.EMPTY_SET, Collections.singleton(filter)));
84
			}
85
		}
86
		return removed;
87
	}
88
}
(-)src/org/eclipse/jface/internal/databinding/viewers/ViewerObservableValueDecorator.java (+40 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2008 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 *
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 ******************************************************************************/
11
12
package org.eclipse.jface.internal.databinding.viewers;
13
14
import org.eclipse.core.databinding.observable.value.DecoratingObservableValue;
15
import org.eclipse.core.databinding.observable.value.IObservableValue;
16
import org.eclipse.jface.databinding.viewers.IViewerObservableValue;
17
import org.eclipse.jface.viewers.Viewer;
18
19
/**
20
 * @since 3.3
21
 * 
22
 */
23
public class ViewerObservableValueDecorator extends DecoratingObservableValue
24
		implements IViewerObservableValue {
25
	private final Viewer viewer;
26
27
	/**
28
	 * @param decorated
29
	 * @param viewer
30
	 */
31
	public ViewerObservableValueDecorator(IObservableValue decorated,
32
			Viewer viewer) {
33
		super(decorated, true);
34
		this.viewer = viewer;
35
	}
36
37
	public Viewer getViewer() {
38
		return viewer;
39
	}
40
}

Return to bug 248174