<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I'll do it.<br><div apple-content-edited="true"> <span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><span class="Apple-style-span" style="border-collapse: separate; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; -webkit-text-decorations-in-effect: none; text-indent: 0px; -webkit-text-size-adjust: auto; text-transform: none; orphans: 2; white-space: normal; widows: 2; word-spacing: 0px; "><div><span class="Apple-style-span" style="font-size: medium;"><font class="Apple-style-span" color="#0000FF" face="'Gill Sans'"><br></font></span></div></span></span></span></span></span></span></span></span></div></span></div></span></div><div><div>On 27 Aug 2009, at 08:17, Olaf Wagner wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Though I promised to do it, I have lost sight of this task while<br>trying to build some RC3 archives on Windows. As I'm not at home this<br>evening, can somebody else please commit Hendrik's extension?<br><br>Is this something we should should have in the release branch, too?<br>Probably not necessary?<br><br>Olaf<br><br>Quoting <a href="mailto:hendrik@topoi.pooq.com">hendrik@topoi.pooq.com</a>:<br><br><blockquote type="cite">On Wed, Apr 01, 2009 at 12:03:47PM +0200, Olaf Wagner wrote:<br></blockquote><blockquote type="cite"><blockquote type="cite">Quoting <a href="mailto:hendrik@topoi.pooq.com">hendrik@topoi.pooq.com</a>:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>The BottonVBT contains an action, which is a procedure rather than a<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>method. b This makes it awkward to subclass ButtonVBT becaue the action<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>will still expect its first parameter to be a ButtonVBT instead of<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>belonging to the subclass, and an explicit downcast of some sort will be<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>needed to acess the subclass's members.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>The Trestle manual says this was a deliberate decision:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>: The action procedure is a field rather than a method in order to allow<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>: buttons with different action procedures to share their method suites.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>I, however, find it massively inconvenient because it mans I have to<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>resort to downcasting or the very kludgey VBT.GetProp to access what<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>should be just there.  I'd rather the action procedure was a method.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>But it should be possible to have the best of both worlds.  Have an<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>action2 (better name wanted here) method that is available for<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>overriding, and by default calls the procedure in the existing action.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>field.  That action2 method wounl then be called by Trestle wherever<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>action is now called.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">>Does anyone see problems with this?<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Sounds fine to me offhand. You should test your extensions with<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">some of the existing larger applications, like mentor and Juno-2,<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">of course.<br></blockquote></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">OK. Here's the patch.  Would it be possible for someone to check it in<br></blockquote><blockquote type="cite">for me?<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">mentor runs fine with this change; I watched it animate a heap-sort.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">I have no idea what Juno is supposed to do, but it did respond to<br></blockquote><blockquote type="cite">button-pushes.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">hendrik@lovesong:~/cm3/love-sq/cm3/m3-ui/ui/src/split$ cvs diff<br></blockquote><blockquote type="cite">cvs diff: Diffing .<br></blockquote><blockquote type="cite">Index: ButtonVBT.i3<br></blockquote><blockquote type="cite">===================================================================<br></blockquote><blockquote type="cite">RCS file: /usr/cvs/cm3/m3-ui/ui/src/split/ButtonVBT.i3,v<br></blockquote><blockquote type="cite">retrieving revision 1.2<br></blockquote><blockquote type="cite">diff -r1.2 ButtonVBT.i3<br></blockquote><blockquote type="cite">39a40<br></blockquote><blockquote type="cite"><blockquote type="cite">    act(READONLY cd: VBT.MouseRec);<br></blockquote></blockquote><blockquote type="cite">Index: ButtonVBT.m3<br></blockquote><blockquote type="cite">===================================================================<br></blockquote><blockquote type="cite">RCS file: /usr/cvs/cm3/m3-ui/ui/src/split/ButtonVBT.m3,v<br></blockquote><blockquote type="cite">retrieving revision 1.2<br></blockquote><blockquote type="cite">diff -r1.2 ButtonVBT.m3<br></blockquote><blockquote type="cite">28c28,29<br></blockquote><blockquote type="cite"><     init := Be<br></blockquote><blockquote type="cite">---<br></blockquote><blockquote type="cite"><blockquote type="cite">    init := Be;<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">    act := act<br></blockquote></blockquote><blockquote type="cite">46a48,52<br></blockquote><blockquote type="cite"><blockquote type="cite">PROCEDURE act(v : T; READONLY cd: VBT.MouseRec) =<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">  BEGIN<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">    v.action(v, cd);<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">  END act;<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">59c65<br></blockquote><blockquote type="cite"><         v.action(v, cd);<br></blockquote><blockquote type="cite">---<br></blockquote><blockquote type="cite"><blockquote type="cite">        v.act(cd);<br></blockquote></blockquote><blockquote type="cite">hendrik@lovesong:~/cm3/love-sq/cm3/m3-ui/ui/src/split$<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">-- hendrik<br></blockquote><blockquote type="cite"><br></blockquote><br><br><br>-- <br>Olaf Wagner -- elego Software Solutions GmbH<br>               Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany<br>phone: +49 30 23 45 86 96  mobile: +49 177 2345 869  fax: +49 30 23 45 86 95<br>   <a href="http://www.elegosoft.com">http://www.elegosoft.com</a> | Geschäftsführer: Olaf Wagner | Sitz: Berlin<br>Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194<br><br></div></blockquote></div><br></body></html>