Hi Maria Jose, I finally was able to have time to check this. I finally think this is very close to the List component since always users will want to put the selectedItem into view (can't think of a case that will not be what we all want). So I abandoned the bead idea. Instead I made the scrollToIndex run in any case selectionChange is triggered but left out the case when the user clicks over an item, since as you said don't this a case we want since the item is already on view.
Hope this helps and I think we can close this case Carlos El jue, 5 nov 2020 a las 0:51, Maria Jose Esteve (<[email protected]>) escribió: > Hi, > This could be a possible implementation of the ScrollIndexToSelection bead: > > package xxxx.jewel.beads.controls.list > { > import org.apache.royale.core.IBead; > import org.apache.royale.core.IStrand; > import org.apache.royale.events.Event; > import org.apache.royale.events.IEventDispatcher; > import org.apache.royale.jewel.beads.views.IScrollToIndexView; > import org.apache.royale.core.ISelectionModel; > import org.apache.royale.core.UIBase; > > /** > * The ScrollIndexToSelection bead is a specialty bead that can > be used with > * Jewel List List control to make sure that whenever the > selected item changes it becomes visible. > * > * @langversion 3.0 > * @playerversion Flash 10.2 > * @playerversion AIR 2.6 > * @productversion Royale 0.9.8 > */ > public class ScrollIndexToSelection implements IBead > { > /** > * constructor. > * > * @langversion 3.0 > * @playerversion Flash 10.2 > * @playerversion AIR 2.6 > * @productversion Royale 0.9.8 > */ > public function ScrollIndexToSelection() > { > } > > protected var _strand:IStrand; > > /** > * @copy org.apache.royale.core.IBead#strand > * > * @langversion 3.0 > * @playerversion Flash 10.2 > * @playerversion AIR 2.6 > * @productversion Royale 0.9.8 > */ > public function set strand(value:IStrand):void > { > _strand = value; > > IEventDispatcher(_strand).addEventListener("selectionChanged", > selectionChangeHandler); > } > > /** > * Ensures that the data provider item at the given index > is visible. > */ > private function > selectionChangeHandler(ev:Event):void > { > var host:UIBase = UIBase(_strand); > if(!host) > return; > > if(host.view && host.view is IScrollToIndexView) > { > if(host.model && host.model is > ISelectionModel) > { > var setIndex:int = (host.model as > ISelectionModel).selectedIndex; > (host.view as > IScrollToIndexView).scrollToIndex(setIndex); > > } > } > } > } > } > > The bead works, but the user experience is bad, too many jumps / scrolls > ... > They say that ignorance is very daring, you have to forgive me 😝 ... this > is how I see it: > The selectionChanged event of the List is dispatched when the > selectedIndex of the model is explicitly set and this occurs in at least 3 > scenarios: > 1- Assignment by code, valueCommit > 2- Click on an itemRenderer > 3- And when we move with the keyboard (key down / up) > Of these three scenarios I think that the only one that should be > controlled is 1, why? Because when clicked, the item is visible and, when > we move with the keyboard the > ListKeyDownController, after modifying the selectedIndex, explicitly calls > scrollToIndex. Could scenario 1, valueCommit, be differentiated from the > rest? > > If the double positioning that occurs in scenarios 2 and 3 could not be > avoided, we could "hide" it by overriding the scrollToIndex function so > that it does not make the scroll change if the item is visible at that > moment. > > As you see? > > Thx. > Hiedra > > -----Mensaje original----- > De: Carlos Rovira <[email protected]> > Enviado el: miércoles, 4 de noviembre de 2020 11:16 > Para: Apache Royale Development <[email protected]> > Asunto: Re: Jewel List - selectionChange (Bis) > > Yeah, I think it should be pretty straight forward. > For example a name could be "ScrollIndexToSelection" in the " > org.apache.royale.jewel.beads.controls.list" package. > Then it just listen for selectionChange event and do the scrollToIndex > > thanks! > > El mié., 4 nov. 2020 a las 10:40, Maria Jose Esteve (<[email protected]>) > escribió: > > > Right Carlos. If the guideline is that the operation should be the > > same, basically, I also think it should be a bead, since the > > application of the scrollToIndex, whenever the selected element is > > changed, it would be a sudden change. > > > > > > > > Would we agree to add this functionality in a bead? > > > > If you tell me yes, I try 😝 > > > > > > > > Thx. > > > > Hiedra > > > > -----Mensaje original----- > > De: Carlos Rovira <[email protected]> Enviado el: miércoles, 4 > > de noviembre de 2020 10:02 > > Para: Apache Royale Development <[email protected]> > > Asunto: Re: Jewel List - selectionChange (Bis) > > > > > > > > Hi Maria Jose, > > > > > > > > so if I'm understanding correctly, we currently have the same > > behaviour as Flex (maybe we need to update a bit to improve over time, > > but in essence is the same): Moving with keys trigger the > > scrollToIndex, but if we use programmatically selectedItem, the > scrollToIndex is not triggered, right? > > > > > > > > If so I think we are ok in the TLC List, and the behaviour should go > > to a bead. > > > > > > > > Can you confirm? > > > > > > > > thanks > > > > > -- > Carlos Rovira > Apache Member & Apache Royale PMC > *Apache Software Foundation* > http://about.me/carlosrovira > -- Carlos Rovira Apache Member & Apache Royale PMC *Apache Software Foundation* http://about.me/carlosrovira
