[M3devel] small design problem in ButtonVBT?
hendrik at topoi.pooq.com
hendrik at topoi.pooq.com
Wed Aug 26 02:26:06 CEST 2009
On Wed, Apr 01, 2009 at 12:03:47PM +0200, Olaf Wagner wrote:
> Quoting hendrik at topoi.pooq.com:
>
> >The BottonVBT contains an action, which is a procedure rather than a
> >method. b This makes it awkward to subclass ButtonVBT becaue the action
> >will still expect its first parameter to be a ButtonVBT instead of
> >belonging to the subclass, and an explicit downcast of some sort will be
> >needed to acess the subclass's members.
> >
> >The Trestle manual says this was a deliberate decision:
> >
> >: The action procedure is a field rather than a method in order to allow
> >: buttons with different action procedures to share their method suites.
> >
> >I, however, find it massively inconvenient because it mans I have to
> >resort to downcasting or the very kludgey VBT.GetProp to access what
> >should be just there. I'd rather the action procedure was a method.
> >
> >But it should be possible to have the best of both worlds. Have an
> >action2 (better name wanted here) method that is available for
> >overriding, and by default calls the procedure in the existing action.
> >field. That action2 method wounl then be called by Trestle wherever
> >action is now called.
> >
> >Does anyone see problems with this?
>
> Sounds fine to me offhand. You should test your extensions with
> some of the existing larger applications, like mentor and Juno-2,
> of course.
OK. Here's the patch. Would it be possible for someone to check it in
for me?
mentor runs fine with this change; I watched it animate a heap-sort.
I have no idea what Juno is supposed to do, but it did respond to
button-pushes.
hendrik at lovesong:~/cm3/love-sq/cm3/m3-ui/ui/src/split$ cvs diff
cvs diff: Diffing .
Index: ButtonVBT.i3
===================================================================
RCS file: /usr/cvs/cm3/m3-ui/ui/src/split/ButtonVBT.i3,v
retrieving revision 1.2
diff -r1.2 ButtonVBT.i3
39a40
> act(READONLY cd: VBT.MouseRec);
Index: ButtonVBT.m3
===================================================================
RCS file: /usr/cvs/cm3/m3-ui/ui/src/split/ButtonVBT.m3,v
retrieving revision 1.2
diff -r1.2 ButtonVBT.m3
28c28,29
< init := Be
---
> init := Be;
> act := act
46a48,52
> PROCEDURE act(v : T; READONLY cd: VBT.MouseRec) =
> BEGIN
> v.action(v, cd);
> END act;
>
59c65
< v.action(v, cd);
---
> v.act(cd);
hendrik at lovesong:~/cm3/love-sq/cm3/m3-ui/ui/src/split$
-- hendrik
More information about the M3devel
mailing list