DWT event handling
BLS
nanali at nospam-wanadoo.fr
Sun May 18 13:50:52 PDT 2008
Frank Benoit schrieb:
> I added the template function Bill suggested once to the
> dwt.widgets.Listener module.
>
> http://www.dsource.org/projects/dwt-linux/browser/dwt/widgets/Listener.d?rev=243%3A84629474b5ec
>
>
> You can see that in action in this snippet
> http://www.dsource.org/projects/dwt-samples/browser/snippets/treeeditor/Snippet111.d?rev=85%3Afa286c85e7b8
>
>
> See lines: 102..106
>
> Thanks Bill for the snippets and for this cool template function
> suggestion.
>
> Frank
Hi Frank, thanks for the update !
I still try to figure out how this code could fit ...
template MessageMap(Mappings ...) {
void addListener(uint uID) {
foreach(mapping; Mappings) {
if(mapping.matches(uID)) // DWTxxxx
mapping.executeAction();
}
}
}
//maybe we need template specialisation here ???
struct OnClose(alias fn) {
alias fn executeAction;
static bool matches(uint uid) { return uid == 5; }
}
struct OnRange(uint a, uint b, alias fn) {
alias fn executeAction;
static bool matches(uint uid) { return uid >= a && uid <= b; }
}
class Foo {
void foo() {
writefln("foo called");
}
void bar() {
writefln("bar called");
}
mixin MessageMap!(
OnClose!(foo),
OnRange!(1, 3, bar)
);
}
void main() {
auto f = new Foo;
f.addListener(5);
f.addListener(2);
}
At least it looks simpler (to me) Ideas ? Bjoern
More information about the Digitalmars-d-dwt
mailing list