[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