I'd prefer a more light-weight solution than using <text> as a trampoline for the <formatter> mixin. LPP-7793 itself is a bit complicated due to the differences between lzs and lzx mixins, the fact it's necessary to ship the actual sources of the mixin etc. etc. Shouldn't it be possible to add a simple lzs-class to the lfc which only mixes-in lz.Formatter and use that class as the trampoline? For example: public final class LzFormatterTrampoline with LzFormatter { /* empty */ }

and later in the <formatter> mixin:
<mixin name="formatter">
<!--- @access private -->
<attribute name="__trampoline" value="new LzFormatterTrampoline()" />
<method name="abbreviate" args="...args">return this.__trampoline.abbreviate.apply(this.__trampoline, args);</method> <method name="formatToString" args="...args">return this.__trampoline.formatToString.apply(this.__trampoline, args);</method> <method name="pad" args="...args">return this.__trampoline.pad.apply(this.__trampoline, args);</method>
</mixin>

Alternatively, you could use a single, shared <text> instance as the trampoline to avoid creating a separate <text> instance for every <formatter>:
<text id="__formatter_trampoline" visible="false" />
<mixin name="formatter">
<method name="abbreviate" args="...args">return __formatter_trampoline.abbreviate.apply(__formatter_trampoline, args);</method> <method name="formatToString" args="...args">return __formatter_trampoline .formatToString.apply(__formatter_trampoline, args);</method> <method name="pad" args="...args">return __formatter_trampoline.pad.apply(__formatter_trampoline, args);</method>
</mixin>

PS:
With the new <formatter> mixin you can also remove the TODO in lzunit.lzx and simply let <Test> mixin <formatter>.


On 2/11/2011 8:20 PM, P T Withington wrote:
Change ptw-20110211-H4Y by [email protected] on 2011-02-11 13:55:49 EST
     in /Users/ptw/OpenLaszlo/trunk-3
     for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Support dynamic tooltips

Bugs Fixed: LPP-9750 Make a way for a tooltip to update itself before it is 
displayed

Technical Reviewer: [email protected] (pending)
QA Reviewer: [email protected] (pending)
Doc Reviewer: [email protected] (pending)

Release Notes:

     The content of a<tooltip>  can now be set from a CSS<stylesheet>
     using the `content` property.

     <tooltip>  now has an `update` method that is called before a
     tooltip is (potentially) displayed.  You can subclass<tooltip>
     and override this method to compute the tooltip text dynamically,
     or set the text to the empty string to prevent it from being
     displayed.

     A new mixin<formatter>  has been added that can be used to add the
     methods available in the lz.Formatter kernel mixin to any LZX
     class.

Details:

     LzIdleKernel: Give the `__update` method a pretty name, since it
     shows up at the top of every stack trace.

     LzFormatter: Give the custom object example a little more vertical
     room so you can see it without scrolling.

     lzx-autoincludes: Add `cssfonts` (was missed in an earlier checkin),
     and `formatter`.

     tooltip:  Add the `update` method and the `content` style property.

     formatter: LZX mixin wrapper for the `LzFormatter` kernel mixin.

Tests:
     Test case from bug report used as example in tooltip documentation

Files:
M       WEB-INF/lps/lfc/kernel/LzIdleKernel.lzs
M       WEB-INF/lps/lfc/compiler/LzFormatter.lzs
M       WEB-INF/lps/misc/lzx-autoincludes.properties
M       lps/components/lz/tooltip/tooltip.lzx
A       lps/components/mixins/formatter.lzx

Changeset: http://svn.openlaszlo.org/openlaszlo/patches/ptw-20110211-H4Y.tar


Reply via email to