Home » Eclipse Projects » Eclipse Platform » Databinding for Combo behaves differently in 3.4
Databinding for Combo behaves differently in 3.4 [message #332436] |
Tue, 21 October 2008 17:54 |
Eclipse User |
|
|
|
Originally posted by: alexm.xxx.yyy
This is a multi-part message in MIME format.
--------------020902080207080905020201
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
The change in behavior between Eclipse 3.3 and 3.4 is significant and
breaks the existing logic.
Here is what happens: a data model carries an array of String items
(colourScales) that populate the Combo's drop-down list, and a single
String (colorScale) to track its selection.
When the data model is bound to a Combo box, as below
Combo colorScale = ...
DataBindingContext dbc = ...
dbc.bindList(SWTObservables.observeItems(colorScale),
BeansObservables.observeList(Realm.getDefault(), dataModel,
"colourScales"), null, null);
the Combo fires a text-change event, setting the model's colorScale
property to a blank value, and corrupting it as the result.
In Eclipse 3.3, binding a Combo to an array of String items did not
trigger any change in the Combo's current selection (and it shouldn't have).
I slightly modified one of the databinding Snippets to demonstrate this
effect. Run the attached code under 3.3, and then under 3.4 to see the
difference.
My questions are:
1. is this a planned change in behavior?
2. if so, how can I prevent the undesirable side effect of changing the
data model's property when binding items to the Combo?
Thanks for any clues.
Alex Molochnikov
Kelman Technologies Inc.
--------------020902080207080905020201
Content-Type: text/plain;
name="Snippet002UpdateComboRetainSelection.java"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="Snippet002UpdateComboRetainSelection.java"
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioNCiAqIENvcHlyaWdodCAoYykg MjAwNiBUaGUg
UGFtcGVyZWQgQ2hlZiwgSW5jLiBhbmQgb3RoZXJzLg0KICogQWxsIHJpZ2h0 cyByZXNlcnZl
ZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KICogYXJl
IG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBz ZSBQdWJsaWMg
TGljZW5zZSB2MS4wDQogKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3Ry aWJ1dGlvbiwg
YW5kIGlzIGF2YWlsYWJsZSBhdA0KICogaHR0cDovL3d3dy5lY2xpcHNlLm9y Zy9sZWdhbC9l
cGwtdjEwLmh0bWwNCiAqDQogKiBDb250cmlidXRvcnM6DQogKiAgICAgVGhl IFBhbXBlcmVk
IENoZWYsIEluYy4gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24N CiAqICAgICBC
cmFkIFJleW5vbGRzIC0gYnVnIDExNjkyMA0KICoqKioqKioqKioqKioqKioq KioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8N
Cg0KcGFja2FnZSBvcmcuZWNsaXBzZS5qZmFjZS5leGFtcGxlcy5kYXRhYmlu ZGluZy5zbmlw
cGV0czsNCg0KaW1wb3J0IGphdmEuYmVhbnMuUHJvcGVydHlDaGFuZ2VMaXN0 ZW5lcjsNCmlt
cG9ydCBqYXZhLmJlYW5zLlByb3BlcnR5Q2hhbmdlU3VwcG9ydDsNCmltcG9y dCBqYXZhLnV0
aWwuQXJyYXlMaXN0Ow0KaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KDQppbXBv cnQgb3JnLmVj
bGlwc2UuY29yZS5kYXRhYmluZGluZy5EYXRhQmluZGluZ0NvbnRleHQ7DQpp bXBvcnQgb3Jn
LmVjbGlwc2UuY29yZS5kYXRhYmluZGluZy5iZWFucy5CZWFuc09ic2VydmFi bGVzOw0KaW1w
b3J0IG9yZy5lY2xpcHNlLmNvcmUuZGF0YWJpbmRpbmcub2JzZXJ2YWJsZS5S ZWFsbTsNCmlt
cG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kYXRhYmluZGluZy5zd3QuU1dUT2Jz ZXJ2YWJsZXM7
DQppbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsNCmltcG9ydCBvcmcuZWNs aXBzZS5zd3Qu
ZXZlbnRzLlNlbGVjdGlvbkFkYXB0ZXI7DQppbXBvcnQgb3JnLmVjbGlwc2Uu c3d0LmV2ZW50
cy5TZWxlY3Rpb25FdmVudDsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5 b3V0LlJvd0xh
eW91dDsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247 DQppbXBvcnQg
b3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tYm87DQppbXBvcnQgb3JnLmVj bGlwc2Uuc3d0
LndpZGdldHMuRGlzcGxheTsNCmltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lk Z2V0cy5TaGVs
bDsNCg0KLyoqDQogKiBTaG93cyBob3cgdG8gYmluZCBhIENvbWJvIHNvIHRo YXQgd2hlbiB1
cGRhdGUgaXRzIGl0ZW1zLCB0aGUgc2VsZWN0aW9uIGlzDQogKiByZXRhaW5l ZCBpZiBhdCBh
bGwgcG9zc2libGUuDQogKiANCiAqIEBzaW5jZSAzLjINCiAqLw0KcHVibGlj IGNsYXNzIFNu
aXBwZXQwMDJVcGRhdGVDb21ib1JldGFpblNlbGVjdGlvbiB7DQogICAgcHVi bGljIHN0YXRp
YyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgew0KICAgIAlmaW5hbCBEaXNw bGF5IGRpc3Bs
YXkgPSBuZXcgRGlzcGxheSgpOw0KICAgIAlSZWFsbS5ydW5XaXRoRGVmYXVs dChTV1RPYnNl
cnZhYmxlcy5nZXRSZWFsbShkaXNwbGF5KSwgbmV3IFJ1bm5hYmxlKCkgew0K ICAgIAkJcHVi
bGljIHZvaWQgcnVuKCkgew0KICAgIAkJCVZpZXdNb2RlbCB2aWV3TW9kZWwg PSBuZXcgVmll
d01vZGVsKCk7DQogICAgCQkJU2hlbGwgc2hlbGwgPSBuZXcgVmlldyh2aWV3 TW9kZWwpLmNy
ZWF0ZVNoZWxsKCk7DQogICAgCQkJDQogICAgCQkJLy8gVGhlIFNXVCBldmVu dCBsb29wDQog
ICAgCQkJd2hpbGUgKCFzaGVsbC5pc0Rpc3Bvc2VkKCkpIHsNCiAgICAJCQkJ aWYgKCFkaXNw
bGF5LnJlYWRBbmREaXNwYXRjaCgpKSB7DQogICAgCQkJCQlkaXNwbGF5LnNs ZWVwKCk7DQog
ICAgCQkJCX0NCiAgICAJCQl9DQogICAgCQkJDQogICAgCQkJLy8gUHJpbnQg dGhlIHJlc3Vs
dHMNCiAgICAJCQlTeXN0ZW0ub3V0LnByaW50bG4odmlld01vZGVsLmdldFRl eHQoKSk7DQog
ICAgCQl9DQogICAgCX0pOw0KICAgIAlkaXNwbGF5LmRpc3Bvc2UoKTsNCiAg ICB9DQoNCiAg
ICAvLyBNaW5pbWFsIEphdmFCZWFucyBzdXBwb3J0DQogICAgcHVibGljIHN0 YXRpYyBhYnN0
cmFjdCBjbGFzcyBBYnN0cmFjdE1vZGVsT2JqZWN0IHsNCiAgICAgICAgcHJp dmF0ZSBQcm9w
ZXJ0eUNoYW5nZVN1cHBvcnQgcHJvcGVydHlDaGFuZ2VTdXBwb3J0ID0gbmV3 IFByb3BlcnR5
Q2hhbmdlU3VwcG9ydCh0aGlzKTsNCg0KICAgICAgICBwdWJsaWMgdm9pZCBh ZGRQcm9wZXJ0
eUNoYW5nZUxpc3RlbmVyKFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVu ZXIpIHsNCiAg
ICAgICAgICAgIHByb3BlcnR5Q2hhbmdlU3VwcG9ydC5hZGRQcm9wZXJ0eUNo YW5nZUxpc3Rl
bmVyKGxpc3RlbmVyKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyB2 b2lkIGFkZFBy
b3BlcnR5Q2hhbmdlTGlzdGVuZXIoU3RyaW5nIHByb3BlcnR5TmFtZSwgUHJv cGVydHlDaGFu
Z2VMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAgICAgICAgcHJvcGVydHlD aGFuZ2VTdXBw
b3J0LmFkZFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIocHJvcGVydHlOYW1lLCBs aXN0ZW5lcik7
DQogICAgICAgIH0NCg0KICAgICAgICBwdWJsaWMgdm9pZCByZW1vdmVQcm9w ZXJ0eUNoYW5n
ZUxpc3RlbmVyKFByb3BlcnR5Q2hhbmdlTGlzdGVuZXIgbGlzdGVuZXIpIHsN CiAgICAgICAg
ICAgIHByb3BlcnR5Q2hhbmdlU3VwcG9ydC5yZW1vdmVQcm9wZXJ0eUNoYW5n ZUxpc3RlbmVy
KGxpc3RlbmVyKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyB2b2lk IHJlbW92ZVBy
b3BlcnR5Q2hhbmdlTGlzdGVuZXIoU3RyaW5nIHByb3BlcnR5TmFtZSwgUHJv cGVydHlDaGFu
Z2VMaXN0ZW5lciBsaXN0ZW5lcikgew0KICAgICAgICAgICAgcHJvcGVydHlD aGFuZ2VTdXBw
b3J0LnJlbW92ZVByb3BlcnR5Q2hhbmdlTGlzdGVuZXIocHJvcGVydHlOYW1l LCBsaXN0ZW5l
cik7DQogICAgICAgIH0NCg0KICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaXJl UHJvcGVydHlD
aGFuZ2UoU3RyaW5nIHByb3BlcnR5TmFtZSwgT2JqZWN0IG9sZFZhbHVlLCBP YmplY3QgbmV3
VmFsdWUpIHsNCiAgICAgICAgICAgIHByb3BlcnR5Q2hhbmdlU3VwcG9ydC5m aXJlUHJvcGVy
dHlDaGFuZ2UocHJvcGVydHlOYW1lLCBvbGRWYWx1ZSwgbmV3VmFsdWUpOw0K ICAgICAgICB9
DQogICAgfQ0KDQogICAgLy8gVGhlIFZpZXcncyBtb2RlbC0tdGhlIHJvb3Qg b2Ygb3VyIE1v
ZGVsIGdyYXBoIGZvciB0aGlzIHBhcnRpY3VsYXIgR1VJLg0KICAgIHB1Ymxp YyBzdGF0aWMg
Y2xhc3MgVmlld01vZGVsIGV4dGVuZHMgQWJzdHJhY3RNb2RlbE9iamVjdCB7 DQogICAgICAg
IHByaXZhdGUgU3RyaW5nIHRleHQgPSAiYmVlZiI7DQoNCiAgICAgICAgcHJp dmF0ZSBMaXN0
IGNob2ljZXMgPSBuZXcgQXJyYXlMaXN0KCk7DQogICAgICAgIHsNCiAgICAg ICAgICAgIGNo
b2ljZXMuYWRkKCJwb3JrIik7DQogICAgICAgICAgICBjaG9pY2VzLmFkZCgi YmVlZiIpOw0K
ICAgICAgICAgICAgY2hvaWNlcy5hZGQoInBvdWx0cnkiKTsNCiAgICAgICAg ICAgIGNob2lj
ZXMuYWRkKCJ2ZWdhdGFibGVzIik7DQogICAgICAgIH0NCg0KICAgICAgICBw dWJsaWMgTGlz
dCBnZXRDaG9pY2VzKCkgew0KICAgICAgICAgICAgcmV0dXJuIGNob2ljZXM7 DQogICAgICAg
IH0NCg0KICAgICAgICBwdWJsaWMgdm9pZCBzZXRDaG9pY2VzKExpc3QgY2hv aWNlcykgew0K
ICAgICAgICAgICAgTGlzdCBvbGQgPSB0aGlzLmNob2ljZXM7DQogICAgICAg ICAgICB0aGlz
LmNob2ljZXMgPSBjaG9pY2VzOw0KICAgICAgICAgICAgZmlyZVByb3BlcnR5 Q2hhbmdlKCJj
aG9pY2VzIiwgb2xkLCBjaG9pY2VzKTsNCiAgICAgICAgfQ0KDQogICAgICAg IHB1YmxpYyBT
dHJpbmcgZ2V0VGV4dCgpIHsNCiAgICAgICAgICAgIHJldHVybiB0ZXh0Ow0K ICAgICAgICB9
DQoNCiAgICAgICAgcHVibGljIHZvaWQgc2V0VGV4dChTdHJpbmcgdGV4dCkg ew0KICAgICAg
ICAJU3lzdGVtLm91dC5wcmludGxuKCJzZXRUZXh0KCIgKyB0ZXh0ICsgIiki KTsgLy8gRmly
ZXMgb25seSB1bmRlciAzLjQNCiAgICAgICAgICAgIFN0cmluZyBvbGRWYWx1 ZSA9IHRoaXMu
dGV4dDsNCiAgICAgICAgICAgIHRoaXMudGV4dCA9IHRleHQ7DQogICAgICAg ICAgICBmaXJl
UHJvcGVydHlDaGFuZ2UoInRleHQiLCBvbGRWYWx1ZSwgdGV4dCk7DQogICAg ICAgIH0NCiAg
ICB9DQoNCiAgICAvLyBUaGUgR1VJIHZpZXcNCiAgICBzdGF0aWMgY2xhc3Mg VmlldyB7DQog
ICAgICAgIHByaXZhdGUgVmlld01vZGVsIHZpZXdNb2RlbDsNCiAgICAgICAg LyoqDQogICAg
ICAgICAqIHVzZWQgdG8gbWFrZSBhIG5ldyBjaG9pY2VzIGFycmF5IHVuaXF1 ZQ0KICAgICAg
ICAgKi8NCiAgICAgICAgc3RhdGljIGludCBjb3VudDsNCg0KICAgICAgICBw dWJsaWMgVmll
dyhWaWV3TW9kZWwgdmlld01vZGVsKSB7DQogICAgICAgICAgICB0aGlzLnZp ZXdNb2RlbCA9
IHZpZXdNb2RlbDsNCiAgICAgICAgfQ0KDQogICAgICAgIHB1YmxpYyBTaGVs bCBjcmVhdGVT
aGVsbCgpIHsNCiAgICAgICAgICAgIC8vIEJ1aWxkIGEgVUkNCiAgICAgICAg ICAgIFNoZWxs
IHNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsNCiAg ICAgICAgICAg
IHNoZWxsLnNldExheW91dChuZXcgUm93TGF5b3V0KFNXVC5WRVJUSUNBTCkp Ow0KDQogICAg
ICAgICAgICBDb21ibyBjb21ibyA9IG5ldyBDb21ibyhzaGVsbCwgU1dULkJP UkRFUiB8IFNX
VC5SRUFEX09OTFkpOw0KICAgICAgICAgICAgQnV0dG9uIHJlc2V0ID0gbmV3 IEJ1dHRvbihz
aGVsbCwgU1dULk5VTEwpOw0KICAgICAgICAgICAgcmVzZXQuc2V0VGV4dCgi cmVzZXQgY29s
bGVjdGlvbiIpOw0KICAgICAgICAgICAgcmVzZXQuYWRkU2VsZWN0aW9uTGlz dGVuZXIobmV3
IFNlbGVjdGlvbkFkYXB0ZXIoKSB7DQogICAgICAgICAgICAgICAgcHVibGlj IHZvaWQgd2lk
Z2V0U2VsZWN0ZWQoU2VsZWN0aW9uRXZlbnQgZSkgew0KICAgICAgICAgICAg ICAgICAgICBM
aXN0IG5ld0xpc3QgPSBuZXcgQXJyYXlMaXN0KCk7DQogICAgICAgICAgICAg ICAgICAgIG5l
d0xpc3QuYWRkKCJDaG9jb2xhdGUiKTsNCiAgICAgICAgICAgICAgICAgICAg bmV3TGlzdC5h
ZGQoIlZhbmlsbGEiKTsNCiAgICAgICAgICAgICAgICAgICAgbmV3TGlzdC5h ZGQoIk1hbmdv
IFBhcmZhaXQiKTsNCiAgICAgICAgICAgICAgICAgICAgbmV3TGlzdC5hZGQo ImJlZWYiKTsN
CiAgICAgICAgICAgICAgICAgICAgbmV3TGlzdC5hZGQoIkNoZWVzZWNha2Ui KTsNCiAgICAg
ICAgICAgICAgICAgICAgbmV3TGlzdC5hZGQoSW50ZWdlci50b1N0cmluZygr K2NvdW50KSk7
DQogICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlbC5zZXRDaG9pY2VzKG5l d0xpc3QpOw0K
ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KDQogICAgICAg ICAgICAvLyBQ
cmludCB2YWx1ZSBvdXQgZmlyc3QNCiAgICAgICAgICAgIFN5c3RlbS5vdXQu cHJpbnRsbih2
aWV3TW9kZWwuZ2V0VGV4dCgpKTsNCg0KICAgICAgICAgICAgRGF0YUJpbmRp bmdDb250ZXh0
IGRiYyA9IG5ldyBEYXRhQmluZGluZ0NvbnRleHQoKTsNCiAgICAgICAgICAg IA0KICAgICAg
ICAgICAgZGJjLmJpbmRMaXN0KFNXVE9ic2VydmFibGVzLm9ic2VydmVJdGVt cyhjb21ibyks
IEJlYW5zT2JzZXJ2YWJsZXMub2JzZXJ2ZUxpc3QoUmVhbG0uZ2V0RGVmYXVs dCgpLCB2aWV3
TW9kZWwsICJjaG9pY2VzIiksIG51bGwsIG51bGwpOw0KICAgICAgICAgICAg ZGJjLmJpbmRW
YWx1ZShTV1RPYnNlcnZhYmxlcy5vYnNlcnZlU2VsZWN0aW9uKGNvbWJvKSwg QmVhbnNPYnNl
cnZhYmxlcy5vYnNlcnZlVmFsdWUodmlld01vZGVsLCAidGV4dCIpLCBudWxs LCBudWxsKTsN
CiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gT3BlbiBhbmQgcmV0dXJu IHRoZSBTaGVs
bA0KICAgICAgICAgICAgc2hlbGwucGFjaygpOw0KICAgICAgICAgICAgc2hl bGwub3Blbigp
Ow0KICAgICAgICAgICAgcmV0dXJuIHNoZWxsOw0KICAgICAgICB9DQogICAg fQ0KfQ==
--------------020902080207080905020201--
|
|
|
Re: Databinding for Combo behaves differently in 3.4 [message #332445 is a reply to message #332436] |
Tue, 21 October 2008 18:58 |
Boris Bokowski Messages: 272 Registered: July 2009 |
Senior Member |
|
|
I ran the code using 3.3.2 and 3.4.1 but did not notice any difference.
Could you please file a bug against Eclipse Platform UI and provide more
detailed steps what I should do with the snippet once I have it running?
Writing down the expected and actual behaviour in both environments would be
good too.
Thanks
Boris
"Alex Molochnikov" <alexm@xxx.yyy> wrote in message
news:gdl50i$68a$1@build.eclipse.org...
> The change in behavior between Eclipse 3.3 and 3.4 is significant and
> breaks the existing logic.
>
> Here is what happens: a data model carries an array of String items
> (colourScales) that populate the Combo's drop-down list, and a single
> String (colorScale) to track its selection.
>
>
> When the data model is bound to a Combo box, as below
>
> Combo colorScale = ...
> DataBindingContext dbc = ...
> dbc.bindList(SWTObservables.observeItems(colorScale),
> BeansObservables.observeList(Realm.getDefault(), dataModel,
> "colourScales"), null, null);
>
> the Combo fires a text-change event, setting the model's colorScale
> property to a blank value, and corrupting it as the result.
>
> In Eclipse 3.3, binding a Combo to an array of String items did not
> trigger any change in the Combo's current selection (and it shouldn't
> have).
>
> I slightly modified one of the databinding Snippets to demonstrate this
> effect. Run the attached code under 3.3, and then under 3.4 to see the
> difference.
>
> My questions are:
>
> 1. is this a planned change in behavior?
> 2. if so, how can I prevent the undesirable side effect of changing the
> data model's property when binding items to the Combo?
>
> Thanks for any clues.
>
> Alex Molochnikov
> Kelman Technologies Inc.
>
------------------------------------------------------------ --------------------
> /*********************************************************** ********************
> * Copyright (c) 2006 The Pampered Chef, Inc. and others.
> * All rights reserved. This program and the accompanying materials
> * are made available under the terms of the Eclipse Public License v1.0
> * which accompanies this distribution, and is available at
> * http://www.eclipse.org/legal/epl-v10.html
> *
> * Contributors:
> * The Pampered Chef, Inc. - initial API and implementation
> * Brad Reynolds - bug 116920
> ************************************************************ ******************/
>
> package org.eclipse.jface.examples.databinding.snippets;
>
> import java.beans.PropertyChangeListener;
> import java.beans.PropertyChangeSupport;
> import java.util.ArrayList;
> import java.util.List;
>
> import org.eclipse.core.databinding.DataBindingContext;
> import org.eclipse.core.databinding.beans.BeansObservables;
> import org.eclipse.core.databinding.observable.Realm;
> import org.eclipse.jface.databinding.swt.SWTObservables;
> import org.eclipse.swt.SWT;
> import org.eclipse.swt.events.SelectionAdapter;
> import org.eclipse.swt.events.SelectionEvent;
> import org.eclipse.swt.layout.RowLayout;
> import org.eclipse.swt.widgets.Button;
> import org.eclipse.swt.widgets.Combo;
> import org.eclipse.swt.widgets.Display;
> import org.eclipse.swt.widgets.Shell;
>
> /**
> * Shows how to bind a Combo so that when update its items, the selection
> is
> * retained if at all possible.
> *
> * @since 3.2
> */
> public class Snippet002UpdateComboRetainSelection {
> public static void main(String[] args) {
> final Display display = new Display();
> Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
> public void run() {
> ViewModel viewModel = new ViewModel();
> Shell shell = new View(viewModel).createShell();
>
> // The SWT event loop
> while (!shell.isDisposed()) {
> if (!display.readAndDispatch()) {
> display.sleep();
> }
> }
>
> // Print the results
> System.out.println(viewModel.getText());
> }
> });
> display.dispose();
> }
>
> // Minimal JavaBeans support
> public static abstract class AbstractModelObject {
> private PropertyChangeSupport propertyChangeSupport = new
> PropertyChangeSupport(this);
>
> public void addPropertyChangeListener(PropertyChangeListener
> listener) {
> propertyChangeSupport.addPropertyChangeListener(listener);
> }
>
> public void addPropertyChangeListener(String propertyName,
> PropertyChangeListener listener) {
> propertyChangeSupport.addPropertyChangeListener(propertyName ,
> listener);
> }
>
> public void removePropertyChangeListener(PropertyChangeListener
> listener) {
> propertyChangeSupport.removePropertyChangeListener(listener) ;
> }
>
> public void removePropertyChangeListener(String propertyName,
> PropertyChangeListener listener) {
>
> propertyChangeSupport.removePropertyChangeListener(propertyN ame,
> listener);
> }
>
> protected void firePropertyChange(String propertyName, Object
> oldValue, Object newValue) {
> propertyChangeSupport.firePropertyChange(propertyName,
> oldValue, newValue);
> }
> }
>
> // The View's model--the root of our Model graph for this particular
> GUI.
> public static class ViewModel extends AbstractModelObject {
> private String text = "beef";
>
> private List choices = new ArrayList();
> {
> choices.add("pork");
> choices.add("beef");
> choices.add("poultry");
> choices.add("vegatables");
> }
>
> public List getChoices() {
> return choices;
> }
>
> public void setChoices(List choices) {
> List old = this.choices;
> this.choices = choices;
> firePropertyChange("choices", old, choices);
> }
>
> public String getText() {
> return text;
> }
>
> public void setText(String text) {
> System.out.println("setText(" + text + ")"); // Fires only under
> 3.4
> String oldValue = this.text;
> this.text = text;
> firePropertyChange("text", oldValue, text);
> }
> }
>
> // The GUI view
> static class View {
> private ViewModel viewModel;
> /**
> * used to make a new choices array unique
> */
> static int count;
>
> public View(ViewModel viewModel) {
> this.viewModel = viewModel;
> }
>
> public Shell createShell() {
> // Build a UI
> Shell shell = new Shell(Display.getCurrent());
> shell.setLayout(new RowLayout(SWT.VERTICAL));
>
> Combo combo = new Combo(shell, SWT.BORDER | SWT.READ_ONLY);
> Button reset = new Button(shell, SWT.NULL);
> reset.setText("reset collection");
> reset.addSelectionListener(new SelectionAdapter() {
> public void widgetSelected(SelectionEvent e) {
> List newList = new ArrayList();
> newList.add("Chocolate");
> newList.add("Vanilla");
> newList.add("Mango Parfait");
> newList.add("beef");
> newList.add("Cheesecake");
> newList.add(Integer.toString(++count));
> viewModel.setChoices(newList);
> }
> });
>
> // Print value out first
> System.out.println(viewModel.getText());
>
> DataBindingContext dbc = new DataBindingContext();
>
> dbc.bindList(SWTObservables.observeItems(combo),
> BeansObservables.observeList(Realm.getDefault(), viewModel, "choices"),
> null, null);
> dbc.bindValue(SWTObservables.observeSelection(combo),
> BeansObservables.observeValue(viewModel, "text"), null, null);
>
> // Open and return the Shell
> shell.pack();
> shell.open();
> return shell;
> }
> }
> }
|
|
|
Re: Databinding for Combo behaves differently in 3.4 [message #332449 is a reply to message #332445] |
Tue, 21 October 2008 19:35 |
Eclipse User |
|
|
|
Originally posted by: alexm.xxx.yyy
Boris,
Thank you for a speedy response. I will file a bug report; in the
meantime, you can easily reproduce the problem:
1. run the snippet as a Java app, in Eclipse 3.4.1. A small window comes up.
2. press "reset collection" button.
3. see the setText() method of ViewModel fire, with an empty String as a
parameter. The Console shows this:
beef
setText()
It is this last bit that should not happen. The Combo should not have an
"empty" selection (setting the item list does not alter the selection -
at least, that was the pre-3.4 behavior). And it should not update the
data model at this point.
Boris Bokowski wrote:
> I ran the code using 3.3.2 and 3.4.1 but did not notice any difference.
> Could you please file a bug against Eclipse Platform UI and provide more
> detailed steps what I should do with the snippet once I have it running?
> Writing down the expected and actual behaviour in both environments would be
> good too.
>
> Thanks
> Boris
|
|
| |
Goto Forum:
Current Time: Sun Dec 22 08:17:41 GMT 2024
Powered by FUDForum. Page generated in 0.03699 seconds
|