i found a *terrible* way to work around this issue, but it works. i moved the
field.setSelection call to a delegate, which allows it to work:
===
var del = new lz.Delegate(this, "selectEnd");
lz.Timer.addTimer(del, 1);
</method>
<method name="selectEnd" args="ignore">
this.field.setSelection(this.value.length);
</method>
===
this should help narrow down what the problem is with the TLF framework.
augusto.
On May 22, 2012, at 4:00 PM, augusto callejas wrote:
> ps- i'm using a nightly build of openlaszlo (5.0.x-19545)
>
> On May 22, 2012, at 3:58 PM, augusto callejas wrote:
>
>> hi-
>>
>> i'm writing a custom edittext class that formats my text based on input.
>> included here is a simplified version that separates text by dashes.
>> the screenshot shows two instances of my class, one with
>> "hasdirectionallayout" not set and another with "hasdirectionallayout" set
>> to true:
>>
>> http://i.imgur.com/AoBSN.png
>>
>> the first editext instance shows the proper behavior: you type a character,
>> the character is displayed and appends a "-", and sets the selection
>> position at the end of the field, where you can continue typing more
>> characters.
>>
>> the second edittext instance shows incorrect behavior: you type a character,
>> the character is displayed and appends a "-", but it doesn't set the
>> selection position at the end of the field - it loses focus, so you can't
>> type into the edittext unless you click back into it.
>>
>> two points to make:
>>
>> 1) setting "hasdirectionallayout=true" changes the behavior of the edittext,
>> which seems wrong.
>> 2) my general approach of overriding "setValue" in order to format my text
>> may not be optimal
>>
>> i'm interested in the answer to point 1 more than point 2 - unless there is
>> a different approach to point 2 that still allows me to use
>> "hasdirectionallayout=true".
>>
>> sample code below.
>>
>> thanks,
>> augusto.
>>
>> ====
>> <canvas height="100%" width="100%">
>> <simplelayout axis="y" spacing="10"/>
>>
>> <class name="dashes" extends="edittext">
>> <attribute name="process" type="boolean" value="true"/>
>> <method name="setValue" args="t, isinitvalue=null">
>> if (t == null || t == '') {
>> return;
>> }
>> if (!process) {
>> super.setValue(t, isinitvalue);
>> return;
>> }
>>
>> t += "-";
>> setAttribute('process', false);
>> setAttribute('text', t);
>> setAttribute('process', true);
>>
>> if (this['field'] != null)
>> field.setSelection(t.length);
>> </method>
>> </class>
>>
>> <text>works:</text>
>> <dashes/>
>> <text>doesn't work:</text>
>> <dashes hasdirectionallayout="true"/>
>> </canvas>
>> ====
>