It looks like initComplete is called after children are initialized [1]


I would add the focus disable behavior as a separate bead as Piotr suggested 
(similar to DisabledAlphaBead).



[1] https://github.com/yishayw/Examples/tree/initComplete



________________________________
From: Harbs <harbs.li...@gmail.com>
Sent: Monday, November 13, 2017 3:26:58 PM
To: dev@royale.apache.org
Subject: Re: [royale-asjs] 01/01: First (non-working) version

Is initComplete fired after all the children are added?

> Also, doesn’t DisableBead work for containers as is?

No. DisableBead helps in so far as you can’t select using the mouse, but you 
can still select using the keyboard by tabbing though controls. For that to 
work, you need to disable tabbing on all the descendants.

> On Nov 13, 2017, at 3:20 PM, Yishay Weiss <yishayj...@hotmail.com> wrote:
>
> Why not listen to the container’s ‘initComplete’? Also, doesn’t DisableBead 
> work for containers as is?
>
>
>
> ________________________________
> From: Piotr Zarzycki <piotrzarzyck...@gmail.com>
> Sent: Monday, November 13, 2017 3:15:54 PM
> To: dev@royale.apache.org
> Subject: Re: [royale-asjs] 01/01: First (non-working) version
>
> Harbs,
>
> First thought is register to "initComplete" for each children ? But does
> each of our children emit such event ?
>
> Piotr
>
>
> 2017-11-13 14:01 GMT+01:00 Harbs <harbs.li...@gmail.com>:
>
>> I need some help here.
>>
>> The code should be working, but the bead is added before the children are
>> added, so the styles and attributes are not applied.
>>
>> Any ideas on how to delay the execution until after the full tree of
>> children are added?
>>
>> Thanks,
>> Harbs
>>
>>> On Nov 13, 2017, at 2:57 PM, ha...@apache.org wrote:
>>>
>>> This is an automated email from the ASF dual-hosted git repository.
>>>
>>> harbs pushed a commit to branch feature/disable-children-bead
>>> in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
>>>
>>> commit c1cc651a6f03cbcdb6792eed367140404adf7863
>>> Author: Harbs <ha...@in-tools.com>
>>> AuthorDate: Mon Nov 13 14:57:34 2017 +0200
>>>
>>>   First (non-working) version
>>> ---
>>> .../Basic/src/main/resources/basic-manifest.xml    |   1 +
>>> .../royale/html/beads/DisableChildrenBead.as       | 152
>> +++++++++++++++++++++
>>> 2 files changed, 153 insertions(+)
>>>
>>> diff --git a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>> b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>>> index 90b72b3..02a8579 100644
>>> --- a/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>>> +++ b/frameworks/projects/Basic/src/main/resources/basic-manifest.xml
>>> @@ -113,6 +113,7 @@
>>>    <component id="UnselectableElementBead"
>> class="org.apache.royale.html.beads.UnselectableElementBead"/>
>>>    <component id="DisableBead" 
>>> class="org.apache.royale.html.beads.DisableBead"
>> />
>>>    <component id="DisabledAlphaBead" 
>>> class="org.apache.royale.html.beads.DisabledAlphaBead"
>> />
>>> +    <component id="DisableChildrenBead" 
>>> class="org.apache.royale.html.beads.DisableChildrenBead"
>> />
>>>    <component id="NumericOnlyTextInputBead"
>> class="org.apache.royale.html.accessories.NumericOnlyTextInputBead" />
>>>    <component id="PasswordInputBead" 
>>> class="org.apache.royale.html.accessories.PasswordInputBead"
>> />
>>>    <component id="PasswordInputRemovableBead"
>> class="org.apache.royale.html.accessories.PasswordInputRemovableBead" />
>>> diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/
>> royale/html/beads/DisableChildrenBead.as b/frameworks/projects/Basic/
>> src/main/royale/org/apache/royale/html/beads/DisableChildrenBead.as
>>> new file mode 100644
>>> index 0000000..ca4ffa1
>>> --- /dev/null
>>> +++ b/frameworks/projects/Basic/src/main/royale/org/apache/
>> royale/html/beads/DisableChildrenBead.as
>>> @@ -0,0 +1,152 @@
>>> +///////////////////////////////////////////////////////////
>> /////////////////////
>>> +//
>>> +//  Licensed to the Apache Software Foundation (ASF) under one or more
>>> +//  contributor license agreements.  See the NOTICE file distributed
>> with
>>> +//  this work for additional information regarding copyright ownership.
>>> +//  The ASF licenses this file to You under the Apache License, Version
>> 2.0
>>> +//  (the "License"); you may not use this file except in compliance with
>>> +//  the License.  You may obtain a copy of the License at
>>> +//
>>> +//      http://www.apache.org/licenses/LICENSE-2.0
>>> +//
>>> +//  Unless required by applicable law or agreed to in writing, software
>>> +//  distributed under the License is distributed on an "AS IS" BASIS,
>>> +//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>> implied.
>>> +//  See the License for the specific language governing permissions and
>>> +//  limitations under the License.
>>> +//
>>> +///////////////////////////////////////////////////////////
>> /////////////////////
>>> +package org.apache.royale.html.beads
>>> +{
>>> +     COMPILE::SWF {
>>> +     import flash.display.DisplayObjectContainer;
>>> +     }
>>> +
>>> +     import org.apache.royale.core.IBead;
>>> +     import org.apache.royale.core.IStrand;
>>> +     import org.apache.royale.core.IUIBase;
>>> +     import org.apache.royale.core.UIHTMLElementWrapper;
>>> +     import org.apache.royale.events.Event;
>>> +     import org.apache.royale.events.IEventDispatcher;
>>> +     import org.apache.royale.events.ValueEvent;
>>> +
>>> +     COMPILE::JS{
>>> +             import org.apache.royale.core.WrappedHTMLElement;
>>> +             import org.apache.royale.core.HTMLElementWrapper;
>>> +     }
>>> +     /**
>>> +      *  The DisableBead class is a specialty bead that can be used with
>>> +      *  any UIBase. When disabled is true, the bead prevents
>> interaction with the component.
>>> +      *  The appearance of the component when disabled is controlled by
>> a separate bead.
>>> +      *
>>> +      *  @langversion 3.0
>>> +      *  @playerversion Flash 10.2
>>> +      *  @playerversion AIR 2.6
>>> +      *  @productversion Royale 0.0
>>> +      */
>>> +     public class DisableChildrenBead implements IBead
>>> +     {
>>> +             /**
>>> +              *  constructor.
>>> +              *
>>> +              *  @langversion 3.0
>>> +              *  @playerversion Flash 10.2
>>> +              *  @playerversion AIR 2.6
>>> +              *  @productversion Royale 0.0
>>> +              */
>>> +             public function DisableChildrenBead()
>>> +             {
>>> +             }
>>> +
>>> +             private var _strand:IStrand;
>>> +             private var _disabled:Boolean;
>>> +
>>> +             /**
>>> +              *  @copy org.apache.royale.core.IBead#strand
>>> +              *
>>> +              *  @langversion 3.0
>>> +              *  @playerversion Flash 10.2
>>> +              *  @playerversion AIR 2.6
>>> +              *  @productversion Royale 0.0
>>> +              *  @royaleignorecoercion HTMLInputElement
>>> +              *  @royaleignorecoercion org.apache.royale.core.UIBase;
>>> +              */
>>> +             public function set strand(value:IStrand):void
>>> +             {
>>> +                     _strand = value;
>>> +                     updateHost();
>>> +             }
>>> +
>>> +             public function get disabled():Boolean
>>> +             {
>>> +                     return _disabled;
>>> +             }
>>> +
>>> +             /**
>>> +              *  @private
>>> +              *  @royaleignorecoercion org.apache.royale.core.
>> HTMLElementWrapper
>>> +              */
>>> +             public function set disabled(value:Boolean):void
>>> +             {
>>> +                     if (value != _disabled)
>>> +                     {
>>> +                             _disabled = value;
>>> +                             updateHost();
>>> +                             throwChangeEvent();
>>> +                     }
>>> +             }
>>> +
>>> +             private function disabledChangeHandler(e:Event):void
>>> +             {
>>> +                     updateHost();
>>> +             }
>>> +
>>> +             private function get host():IUIBase
>>> +             {
>>> +                     return _strand as IUIBase;
>>> +             }
>>> +
>>> +             COMPILE::JS
>>> +             private var _lastTabVal:String;
>>> +
>>> +             /**
>>> +              * @royaleignorecoercion org.apache.royale.core.
>> HTMLElementWrapper
>>> +              */
>>> +             private function updateHost():void
>>> +             {
>>> +                     if(!_strand)//bail out
>>> +                             return;
>>> +                     COMPILE::SWF {
>>> +                             var interactiveObject:DisplayObjectContainer
>> = _strand as DisplayObjectContainer;
>>> +                             interactiveObject.mouseChildren =
>> !disabled;
>>> +                     }
>>> +
>>> +                     COMPILE::JS {
>>> +                             setDecendants((_strand as
>> HTMLElementWrapper).element);
>>> +                     }
>>> +
>>> +             }
>>> +
>>> +             COMPILE::JS
>>> +             private function setDecendants(elem:HTMLElement):void
>>> +             {
>>> +                     elem.style["pointerEvents"] = _disabled ? "none" :
>> "";
>>> +                     _disabled ? elem.setAttribute("tabindex", "-1") :
>> elem.removeAttribute("tabindex");
>>> +                     elem = elem.firstChild as HTMLElement;
>>> +                     while (elem) {
>>> +                             setDecendants(elem);
>>> +                             elem = elem.nextSibling as HTMLElement;
>>> +                     }
>>> +             }
>>> +
>>> +             private function throwChangeEvent():void
>>> +             {
>>> +                     if (_strand)
>>> +                     {
>>> +                             IEventDispatcher(_strand).dispatchEvent(new
>> ValueEvent("disabledChange", disabled));
>>> +                     }
>>> +             }
>>> +
>>> +
>>> +     }
>>> +}
>>>
>>> --
>>> To stop receiving notification emails like this one, please contact
>>> "comm...@royale.apache.org" <comm...@royale.apache.org>.
>>
>>
>
>
> --
>
> Piotr Zarzycki
>
> Patreon: *https://www.patreon.com/piotrzarzycki
> <https://www.patreon.com/piotrzarzycki>*

Reply via email to