[Databinding] Observing checked Items in a TableViewer with SWT.CHECK [message #318793] |
Mon, 06 August 2007 15:08  |
Eclipse User |
|
|
|
Originally posted by: tom.eiswind.de
HI, I'm quite new to JFace Databinding. One of the first things I run into was that I have a TableViewer from which you
can select a subset of values by checking the checkboxes of the table. I tried to refactor it so that it gets integrated
with databinding. I wanted to subclass JavaBeanObservableList for the ease of it, but that is not accessible. What I
want is to have a List of all checked items in the viewer that I can bind with databinding. What I think of is something
like:
public class TableViewerCheckBoxSelectionList extends JavaBeanObservableList
implements IChangeListener {
private IObservableList input;
private TableViewer tableViewer;
public TableViewerCheckBoxSelectionList(TableViewer viewer, Realm realm,
Object object, PropertyDescriptor descriptor, Class elementType) {
super(realm, object, descriptor, elementType);
if (!(viewer.getInput() instanceof IObservableList)) {
throw new IllegalArgumentException(
"Input must be an IObservableList");
}
input = (IObservableList) viewer.getInput();
tableViewer = viewer;
setCheckedItems();
viewer.getTable().addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
if (e.detail == SWT.CHECK) {
handleCheckEvent(e);
}
}
});
addChangeListener(this);
}
@Override
public void handleChange(ChangeEvent event) {
setCheckedItems();
}
private void setCheckedItems() {
TableItem[] items = tableViewer.getTable().getItems();
for (int i = 0; i < items.length; i++) {
items[i].setChecked(contains(items[i].getData()));
}
}
private void handleCheckEvent(Event e) {
TableItem item = (TableItem) e.item;
Object checked = item.getData();
if (item.getChecked() == true) {
add(checked);
} else {
remove(checked);
}
}
}
Any Idea how I could implement this ? Hope this is a good start to the newsgroup.
|
|
|
Re: [Databinding] Observing checked Items in a TableViewer with SWT.CHECK [message #318995 is a reply to message #318793] |
Thu, 09 August 2007 12:10   |
Eclipse User |
|
|
|
Originally posted by: tom.eiswind.de
I helped myself with the following solution. Maybe you can integrate sth like this in the framework ?
It binds an ObservableSet to the checked items of a TableViewer. It so simple then.
public class TableViewerCheckBoxBinding implements ISetChangeListener {
private IObservableSet checked;
private TableViewer tableViewer;
public TableViewerCheckBoxBinding(TableViewer viewer, IObservableSet checked) {
this.tableViewer = viewer;
this.checked = checked;
setCheckedItems();
viewer.getTable().addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
if (e.detail == SWT.CHECK) {
handleCheckEvent(e);
}
}
});
checked.addSetChangeListener(this);
}
@Override
public void handleSetChange(SetChangeEvent event) {
setCheckedItems();
}
private void setCheckedItems() {
TableItem[] items = tableViewer.getTable().getItems();
for (int i = 0; i < items.length; i++) {
items[i].setChecked(checked.contains(items[i].getData()));
}
}
private void handleCheckEvent(Event e) {
TableItem item = (TableItem) e.item;
Object check = item.getData();
if (item.getChecked() == true) {
checked.add(check);
} else {
checked.remove(check);
}
}
}
Thomas schrieb:
> HI, I'm quite new to JFace Databinding. One of the first things I run
> into was that I have a TableViewer from which you can select a subset of
> values by checking the checkboxes of the table. I tried to refactor it
> so that it gets integrated with databinding. I wanted to subclass
> JavaBeanObservableList for the ease of it, but that is not accessible.
> What I want is to have a List of all checked items in the viewer that I
> can bind with databinding. What I think of is something like:
>
> public class TableViewerCheckBoxSelectionList extends
> JavaBeanObservableList
> implements IChangeListener {
>
> private IObservableList input;
>
> private TableViewer tableViewer;
>
> public TableViewerCheckBoxSelectionList(TableViewer viewer, Realm
> realm,
> Object object, PropertyDescriptor descriptor, Class
> elementType) {
> super(realm, object, descriptor, elementType);
>
> if (!(viewer.getInput() instanceof IObservableList)) {
> throw new IllegalArgumentException(
> "Input must be an IObservableList");
> }
>
> input = (IObservableList) viewer.getInput();
> tableViewer = viewer;
>
> setCheckedItems();
>
> viewer.getTable().addListener(SWT.Selection, new Listener() {
> public void handleEvent(Event e) {
> if (e.detail == SWT.CHECK) {
> handleCheckEvent(e);
> }
>
> }
> });
> addChangeListener(this);
> }
>
> @Override
> public void handleChange(ChangeEvent event) {
> setCheckedItems();
>
> }
>
> private void setCheckedItems() {
> TableItem[] items = tableViewer.getTable().getItems();
> for (int i = 0; i < items.length; i++) {
> items[i].setChecked(contains(items[i].getData()));
> }
> }
>
> private void handleCheckEvent(Event e) {
>
> TableItem item = (TableItem) e.item;
> Object checked = item.getData();
> if (item.getChecked() == true) {
> add(checked);
> } else {
> remove(checked);
> }
>
> }
> }
>
> Any Idea how I could implement this ? Hope this is a good start to the
> newsgroup.
|
|
|
Re: [Databinding] Observing checked Items in a TableViewer with SWT.CHECK [message #319032 is a reply to message #318995] |
Fri, 10 August 2007 01:45  |
Eclipse User |
|
|
|
Did you file an enhancement request in bugzilla for this? If not please
do so.
Tom
Thomas schrieb:
> I helped myself with the following solution. Maybe you can integrate sth
> like this in the framework ?
>
> It binds an ObservableSet to the checked items of a TableViewer. It so
> simple then.
>
> public class TableViewerCheckBoxBinding implements ISetChangeListener {
>
> private IObservableSet checked;
>
> private TableViewer tableViewer;
>
> public TableViewerCheckBoxBinding(TableViewer viewer, IObservableSet
> checked) {
>
> this.tableViewer = viewer;
> this.checked = checked;
> setCheckedItems();
>
> viewer.getTable().addListener(SWT.Selection, new Listener() {
> public void handleEvent(Event e) {
> if (e.detail == SWT.CHECK) {
> handleCheckEvent(e);
> }
>
> }
> });
> checked.addSetChangeListener(this);
> }
>
> @Override
> public void handleSetChange(SetChangeEvent event) {
> setCheckedItems();
> }
>
> private void setCheckedItems() {
> TableItem[] items = tableViewer.getTable().getItems();
> for (int i = 0; i < items.length; i++) {
> items[i].setChecked(checked.contains(items[i].getData()));
> }
> }
>
> private void handleCheckEvent(Event e) {
> TableItem item = (TableItem) e.item;
> Object check = item.getData();
> if (item.getChecked() == true) {
> checked.add(check);
> } else {
> checked.remove(check);
> }
> }
> }
>
> Thomas schrieb:
>> HI, I'm quite new to JFace Databinding. One of the first things I run
>> into was that I have a TableViewer from which you can select a subset
>> of values by checking the checkboxes of the table. I tried to refactor
>> it so that it gets integrated with databinding. I wanted to subclass
>> JavaBeanObservableList for the ease of it, but that is not accessible.
>> What I want is to have a List of all checked items in the viewer that
>> I can bind with databinding. What I think of is something like:
>>
>> public class TableViewerCheckBoxSelectionList extends
>> JavaBeanObservableList
>> implements IChangeListener {
>>
>> private IObservableList input;
>>
>> private TableViewer tableViewer;
>>
>> public TableViewerCheckBoxSelectionList(TableViewer viewer, Realm
>> realm,
>> Object object, PropertyDescriptor descriptor, Class
>> elementType) {
>> super(realm, object, descriptor, elementType);
>>
>> if (!(viewer.getInput() instanceof IObservableList)) {
>> throw new IllegalArgumentException(
>> "Input must be an IObservableList");
>> }
>>
>> input = (IObservableList) viewer.getInput();
>> tableViewer = viewer;
>>
>> setCheckedItems();
>>
>> viewer.getTable().addListener(SWT.Selection, new Listener() {
>> public void handleEvent(Event e) {
>> if (e.detail == SWT.CHECK) {
>> handleCheckEvent(e);
>> }
>>
>> }
>> });
>> addChangeListener(this);
>> }
>>
>> @Override
>> public void handleChange(ChangeEvent event) {
>> setCheckedItems();
>>
>> }
>>
>> private void setCheckedItems() {
>> TableItem[] items = tableViewer.getTable().getItems();
>> for (int i = 0; i < items.length; i++) {
>> items[i].setChecked(contains(items[i].getData()));
>> }
>> }
>>
>> private void handleCheckEvent(Event e) {
>>
>> TableItem item = (TableItem) e.item;
>> Object checked = item.getData();
>> if (item.getChecked() == true) {
>> add(checked);
>> } else {
>> remove(checked);
>> }
>>
>> }
>> }
>>
>> Any Idea how I could implement this ? Hope this is a good start to the
>> newsgroup.
--
B e s t S o l u t i o n . at
------------------------------------------------------------ --------
Tom Schindl JFace-Committer
------------------------------------------------------------ --------
|
|
|
Powered by
FUDForum. Page generated in 0.03650 seconds