Hi Alex, in Jewel ComboBox something is not working as expected for ItemRenderers, while in VirtualComboBox is working right. I mean rowCount/rowHeight. If you check ComboBoxPlayGround in TDJ for an example where those properties are set (the one with HSliders), you'll see those properties are not causing effect. Instead in the VirtualPlayGround a similar VirtualComboBox is configured with that properties and works ok.
I think the problem is in the mapper for List, that is different from Basic. I can investigate if is a good time to remove jewel mappers now that renderers are more modular, but I'll need a bit of documentation, since I'm digging though all the code and is a bit cumbersome to imagine what's all about. So could you add some docs to the Itemrenderer royale doc page [1]? I think it will be of help to me, and others here, and for users too. Thanks in advance Carlos [1] https://apache.github.io/royale-docs/features/item-renderers El lun., 2 mar. 2020 a las 9:28, Alex Harui (<aha...@adobe.com.invalid>) escribió: > > > On 3/1/20, 11:54 PM, "Harbs" <harbs.li...@gmail.com> wrote: > > Sure. I think separating Selection from the Renderer was the right > thing to do, but we also need to figure out how to make it do the “right > thing” be default. > > I’m wondering if there should be a “selectionBead” property in every > item renderer which could be null. > > Maybe DataContainerBase should accept a selectionRenderer property the > same way it accepts an itemRenderer? > > > I don't know what your scenario really is, so don't have an opinion. The > SelectableItemRendererClassFactory could look on the List's Strand for an > instance of a bead that it can use instead of getting the class reference > from CSS. It depends on where you want to control the configuration and > why. I'm not sure there will be "one way". > > An item renderer should probably only have a selectionBead settable > property if you can assign different selection beads per renderer, not per > list, which is probably renderer-specific and not something for the base > classes. > > FWIW, DataContainerBase isn't intended to support selection, it is just > supposed to crank out a bunch of children for a container. The Lists are > generally where selection becomes optional/required. > > -Alex > > > > On Mar 2, 2020, at 9:47 AM, Alex Harui <aha...@adobe.com.INVALID> > wrote: > > > > More loosely-coupled pieces often results in head-scratching. But > it also results in PAYG and flexibility. > > > > Our job is to find the common patterns, and pre-compose as needed, > such as the Express component set. This "has" pattern is a new pattern so > we'll have to figure out new best practices. And there are probably more > than one. You might want to override what Selection bead is used > > > > 1) from some List-level config/attribute/css > > 2) in the renderer itself > > 3) by some renderer-level config/attribute/css > > > > IMO, it depends on where you want to control the composition. > > > > My 2 cents, > > -Alex > > > > On 3/1/20, 11:36 PM, "Harbs" <harbs.li...@gmail.com> wrote: > > > > Yes. If I replace the default SelectableItemRendererClassFactory > > > > My work-around was to use: > > > > js|List{ > > IItemRendererClassFactory: > ClassReference("org.apache.royale.core.OverridableSelectableItemRendererClassFactory"); > > } > > > > The average user will be scratching their heads on how to solve > this problem. > > > >> On Mar 2, 2020, at 1:19 AM, Alex Harui <aha...@adobe.com.INVALID> > wrote: > >> > >> > >> > >> On 3/1/20, 12:33 AM, "Harbs" <harbs.li...@gmail.com <mailto: > harbs.li...@gmail.com>> wrote: > >> > >> I’ve also discovered that setting the selection bead is more > difficult than I would hope it to be. > >> > >> For example there should be an easy way to specify the selection > bead in a situation like this: > >> > >> I may not be understanding the problem. The SpreadIconRenderer > could have the SelectionBead in its bead list. > >> > >> -Alex > >> > >> <js:List > >> > itemRenderer="com.printui.view.renderers.SpreadIconRenderer" > >> height="100%" width="100%" > >> > > >> <js:beads> > >> <js:ArrayListSelectionModel/> > >> <js:DataItemRendererFactoryForArrayList/> > >> <js:EasyDataProviderChangeNotifier/> > >> <js:VScrollViewport id="scrollView"/> > >> </js:beads> > >> > >> </js:List> > >> > >>> On Mar 1, 2020, at 1:43 AM, Alex Harui <aha...@adobe.com.INVALID> > wrote: > >>> > >>> I've tried two different patterns: > >>> > >>> 1) ItemRendererOwnerVIew via "has": See > Core/src/main/royale/org/apache/royale/core/ItemRendererOwnerViewBead.as. > Then the ItemRendererClassFactory or the initializer can set it > >>> > >>> 2) Baking it in where needed and implementing > IItemRendererOwnerView and setting it in the initializer. > >>> > >>> The main "benefit" of this part of the refactor is that not all > item renderers need to be assigned a host since many don't need it, so it > is PAYG for those who do. The advantage of the "has" approach is that > custom item renderers don't add an itemRendererOwnerView property, but if > the component doesn't allow custom item renderers, might be simpler to use > approach #2. > >>> > >>> HTH, > >>> -Alex > >>> > >>> On 2/29/20, 12:17 PM, "Harbs" <harbs.li...@gmail.com> wrote: > >>> > >>> What’s the recommended pattern for getting the “data host” from > an itemRenderer now that itemRendererParent/itemRendererOwnerView is no > longer a “thing”? > >>> > >>> I have the following code in an itemRenderer which inherits from > DataItemRenderer: > >>> > >>> (itemRendererParent.host.parent as > PagePalette).showMenuHandler(myValueEvent); > >>> > >>>> On Feb 24, 2020, at 7:02 PM, Alex Harui <aha...@adobe.com.INVALID> > wrote: > >>>> > >>>> It seemed like a separate concern. Right now there are two > highly used ItemRendererClassFactory, but several Initializers. > >>>> > >>>> -Alex > >>>> > >>>> On 2/24/20, 3:06 AM, "Harbs" <harbs.li...@gmail.com <mailto: > harbs.li...@gmail.com>> wrote: > >>>> > >>>> Why is IItemRendererInitializer separate from > IItemRendererClassFactory? > >>>> > >>>>> On Feb 21, 2020, at 12:03 AM, Alex Harui > <aha...@adobe.com.invalid> wrote: > >>>>> > >>>>> I pushed changes that I think has everything working in Jewel by > using the same "has" pattern that is used in other component sets. > >>>>> > >>>>> The Lists in the ToDo examples use a regular > ItemRendererClassFactory instead of SelectableItemRendererClassFactory that > is now used in most other places (List/DataGrid/Table) > >>>>> > >>>>> The recommended pattern for disabling selection in a list is > whether you choose a ClassFactory that attaches a Selection Bead to each > renderer. There was an exception to that rule in one of the Table examples > because it wanted only certain renderers to not have selection. I added a > bead that turns off the selection for that case. IMO, how to deal with > such an exception will be based more on what percentage of the renderers > need selection. If most do, then add a Selection Bead to all renderers but > disable selection where you don't want it. If most do not want selection, > then add the bead where you need it. > >>>>> > >>>>> Thanks, > >>>>> -Alex > >>>>> > >>>>> On 2/20/20, 11:28 AM, "Carlos Rovira" <carlosrov...@apache.org > <mailto:carlosrov...@apache.org> <mailto:carlosrov...@apache.org <mailto: > carlosrov...@apache.org>>> wrote: > >>>>> > >>>>> yes, Jewel has the "structure" and is organized in SASS files, > then > >>>>> JewelTheme has the "styling" part and is as well SASS. > >>>>> so Jewel should not need to change, and people should only need > to change > >>>>> JewelTheme or create a new theme one using it as a template. > >>>>> > >>>>> I'll add examples to ant tomorrow > >>>>> > >>>>> thanks > >>>>> > >>>>> > >>>>> El jue., 20 feb. 2020 a las 20:17, Alex Harui > (<aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>>) > >>>>> escribió: > >>>>> > >>>>>> > >>>>>> > >>>>>> On 2/20/20, 11:04 AM, "Carlos Rovira" <carlosrov...@apache.org > <mailto:carlosrov...@apache.org>> wrote: > >>>>>> > >>>>>> forgot to say. Can you add missing examples to ANT? don't know > where > >>>>>> to do > >>>>>> that > >>>>>> and checking Jewel don't see the use of > >>>>>> SelectableItemRendererClassFactory. > >>>>>> all times ItemRendererClassFactory is used > >>>>>> > >>>>>> I could fix the Ant side, but I don't have time. It think all > you need to > >>>>>> do is add it to the examples/build.xml > >>>>>> > >>>>>> I didn't use SelectableItemRendererClassFactory in Jewel > because I wasn't > >>>>>> sure if the selection was supposed to be changeable at > runtime. I think > >>>>>> you've confirmed that it isn't so we can change to use > >>>>>> SelectableItemRendererClassFactory > >>>>>> > >>>>>> I knew the themes were generated by SASS, but I didn't realize > the Jewel > >>>>>> one was as well. > >>>>>> > >>>>>> -Alex > >>>>>> > >>>>>> El jue., 20 feb. 2020 a las 20:00, Carlos Rovira (< > >>>>>> carlosrov...@apache.org <mailto:carlosrov...@apache.org>>) > >>>>>> escribió: > >>>>>> > >>>>>>> Hi Alex, > >>>>>>> > >>>>>>> remember that Jewel uses SASS to create the CSS. I already > pushed a > >>>>>> commit > >>>>>>> with ["warning"]. It's not the first time I warn about it ;) > >>>>>>> You must to change SASS file. The css is just generated (like > other > >>>>>>> generations in compiler), and is committed since no body added > SASS > >>>>>> to ANT. > >>>>>>> Maven has a sass plugin to compile SASS. > >>>>>>> > >>>>>>> I saw you response and commented there > >>>>>>> > >>>>>>> Thanks > >>>>>>> > >>>>>>> Carlos > >>>>>>> > >>>>>>> > >>>>>>> El jue., 20 feb. 2020 a las 19:55, Alex Harui > >>>>>> (<aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>>) > >>>>>>> escribió: > >>>>>>> > >>>>>>>> I replied on this topic on your commit email. > >>>>>>>> > >>>>>>>> So I don't have to copy that into this thread, read what I > said in > >>>>>> that > >>>>>>>> email and reply on that thread and let's figure out the right > thing > >>>>>> to do. > >>>>>>>> I am having some weird problem with my Maven build where > every time > >>>>>> I try > >>>>>>>> to change Jewel's defaults.css something overwrites it. I'm > trying > >>>>>> to > >>>>>>>> figure out what is going on there. > >>>>>>>> > >>>>>>>> -Alex > >>>>>>>> > >>>>>>>> On 2/20/20, 10:47 AM, "Carlos Rovira" < > carlosrov...@apache.org <mailto:carlosrov...@apache.org>> > >>>>>> wrote: > >>>>>>>> > >>>>>>>> Hi Alex, > >>>>>>>> > >>>>>>>> I found that TodoMVC examples was not working, so I fixed it > >>>>>> removing > >>>>>>>> the > >>>>>>>> non existing properties (hoverable and selectable). > >>>>>>>> But I found Jewel ListItemRenderer has all baked, so I > created a > >>>>>>>> SimpleListItemRenderer (in Jewel Simple in the normal prefix > >>>>>> for a > >>>>>>>> "base", > >>>>>>>> "basic" or "simple" option) that hast the minimum required. > >>>>>>>> > >>>>>>>> So at least in Jewel if people wants hoverable and selectable > >>>>>>>> renderers use > >>>>>>>> the normal ListItemRenderer. > >>>>>>>> If don't want that indicators, use SimpleListItemRenderer. If > >>>>>> you > >>>>>>>> want just > >>>>>>>> show hover, but not selected state, then extend Simple version > >>>>>> and > >>>>>>>> add " > >>>>>>>> ClassSelectorListRuntimeSelectableItemRendererBead" and > >>>>>> configure to > >>>>>>>> have > >>>>>>>> just "hoverable" to true ¿ok? > >>>>>>>> > >>>>>>>> Hope I understand ok how it works. Let me know if something is > >>>>>> not as > >>>>>>>> expected. > >>>>>>>> > >>>>>>>> Thanks > >>>>>>>> > >>>>>>>> Carlos > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>>> El jue., 20 feb. 2020 a las 18:06, Alex Harui > >>>>>>>> (<aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid > >>) > >>>>>>>> escribió: > >>>>>>>> > >>>>>>>>> I'm not sure I understand what you mean by "control". > >>>>>>>>> > >>>>>>>>> Before the "has" changes, every ItemRenderer contained or > >>>>>> inherited > >>>>>>>> code > >>>>>>>>> that had hovered/selected APIs that drew visuals, and the > >>>>>>>> ItemRenderer also > >>>>>>>>> "had" a bead like ItemRendererMouseController that set the > >>>>>> hovered > >>>>>>>> property > >>>>>>>>> on that item renderer, and the List's controller would set > the > >>>>>>>> selected > >>>>>>>>> property. > >>>>>>>>> > >>>>>>>>> Now, every ItemRenderer "has" a bead that has the > >>>>>> hovered/selected > >>>>>>>>> properties, and the ItemRendererMouseController and the > >>>>>> Lists's > >>>>>>>> controllers > >>>>>>>>> get that bead instead of talking to the ItemRenderer > >>>>>> directly. I > >>>>>>>> guess > >>>>>>>>> that's the new way of thinking for has/composition vs > >>>>>>>> is/inheritance: a > >>>>>>>>> component doesn't have to have all of its APIs glued to its > >>>>>> API > >>>>>>>> surface. > >>>>>>>>> We mainly do that for convenience in MXML, but for more > >>>>>> internal > >>>>>>>> stuff like > >>>>>>>>> this, loose-coupling via has/composition shared more code and > >>>>>>>> increases > >>>>>>>>> configurability, but does add some runtime overhead in its > >>>>>> raw form. > >>>>>>>>> Hopefully we can optimize that away. > >>>>>>>>> > >>>>>>>>> HTH, > >>>>>>>>> -Alex > >>>>>>>>> > >>>>>>>>> On 2/20/20, 5:01 AM, "Piotr Zarzycki" < > >>>>>> piotrzarzyck...@gmail.com <mailto:piotrzarzyck...@gmail.com>> > >>>>>>>> wrote: > >>>>>>>>> > >>>>>>>>> Hi Alex, > >>>>>>>>> > >>>>>>>>> Could you provide an example how would I control > >>>>>>>> hovering/selecting in > >>>>>>>>> item > >>>>>>>>> renderer when I don't have build in hover property etc. ? > >>>>>> How > >>>>>>>> should I > >>>>>>>>> compose such item renderer ? > >>>>>>>>> > >>>>>>>>> Thanks, > >>>>>>>>> Piotr > >>>>>>>>> > >>>>>>>>> czw., 20 lut 2020 o 03:20 Alex Harui > >>>>>> <aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>> > >>>>>>>>> napisał(a): > >>>>>>>>> > >>>>>>>>>> I pushed the "has" changes. TourDeJewel seems to be > >>>>>> working > >>>>>>>>> correctly for > >>>>>>>>>> me. > >>>>>>>>>> > >>>>>>>>>> The principle of "has" is similar to inheritance vs > >>>>>>>> composition. > >>>>>>>>> Just > >>>>>>>>>> like top-level components like List are composed of many > >>>>>>>> beads, the > >>>>>>>>> item > >>>>>>>>>> renderers are now composed of more beads as well. That > >>>>>>>> reduces the > >>>>>>>>>> requirement to add code to a class in order to "be/is" > >>>>>>>> something. > >>>>>>>>>> > >>>>>>>>>> There used to be copies of code that drew hover and > >>>>>> selected > >>>>>>>> states > >>>>>>>>> on > >>>>>>>>>> the item renderers in each new kind of item renderer > >>>>>> that > >>>>>>>> couldn't > >>>>>>>>> inherit > >>>>>>>>>> from an item renderer that could draw selected and > >>>>>> hovered > >>>>>>>> states. > >>>>>>>>> Now, > >>>>>>>>>> the itemrenderers compose their selection visuals. A > >>>>>> single > >>>>>>>> item > >>>>>>>>> renderer > >>>>>>>>>> like StringItemRenderer can be composed with no > >>>>>> selection > >>>>>>>> drawing at > >>>>>>>>> all, > >>>>>>>>>> or with solid color selection drawing or with alternate > >>>>>> color > >>>>>>>>> selection > >>>>>>>>>> drawing or something new. And that means that some > >>>>>> new > >>>>>>>> kind of > >>>>>>>>> item > >>>>>>>>>> renderer, like a TextInput can become an item renderer > >>>>>> more > >>>>>>>> easily, > >>>>>>>>> by > >>>>>>>>>> composing a selection visuals bead instead of having to > >>>>>> add > >>>>>>>> all of > >>>>>>>>> that > >>>>>>>>>> code. > >>>>>>>>>> > >>>>>>>>>> Another place I started using "has" but didn't fully > >>>>>> replace > >>>>>>>> the old > >>>>>>>>> code > >>>>>>>>>> was in handling itemRendererParent, which is now called > >>>>>>>>>> itemRendererOwnerView (to try to make it more clear > >>>>>> that isn't > >>>>>>>>> always the > >>>>>>>>>> parent of the item renderer and is sometimes an internal > >>>>>>>>>> datagroup/container). Turns out a lot of our renderers > >>>>>>>> didn't need > >>>>>>>>> to know > >>>>>>>>>> the itemRendererParent, so in many cases we no longer > >>>>>> figure > >>>>>>>> it out > >>>>>>>>> and > >>>>>>>>>> assign it. But in cases where it is needed, the > >>>>>> property is > >>>>>>>>> currently left > >>>>>>>>>> baked into the renderer, but in some new cases, it is > >>>>>>>> composed. An > >>>>>>>>>> ItemRendererOwnerViewBead is added to the strand > >>>>>> instead of > >>>>>>>> added to > >>>>>>>>> a > >>>>>>>>>> class and contains the reference to the ownerView. > >>>>>> Maybe > >>>>>>>> someday > >>>>>>>>> we'll > >>>>>>>>>> fully remove the old pattern, not sure. > >>>>>>>>>> > >>>>>>>>>> Ideally we would do more "has" than "is". It could > >>>>>> allow us > >>>>>>>> to > >>>>>>>>> eliminate > >>>>>>>>>> much of the required code to be a top tag in an MXML > >>>>>> document. > >>>>>>>>>> > >>>>>>>>>> Other changes in this branch were to add "Initializers" > >>>>>> so the > >>>>>>>>>> RendererFactories didn't bake in code for specific item > >>>>>>>> renderers, > >>>>>>>>> and to > >>>>>>>>>> create a few base classes with overrides so there is > >>>>>> less > >>>>>>>> code to > >>>>>>>>> maintain. > >>>>>>>>>> > >>>>>>>>>> There should be little if any impact to application > >>>>>> code. It > >>>>>>>> should > >>>>>>>>>> mainly affect the internals of how item renderer-based > >>>>>> things > >>>>>>>> are > >>>>>>>>> created. > >>>>>>>>>> > >>>>>>>>>> Thanks, > >>>>>>>>>> -Alex > >>>>>>>>>> > >>>>>>>>>> On 2/17/20, 4:33 PM, "Carlos Rovira" < > >>>>>> carlosrov...@apache.org <mailto:carlosrov...@apache.org> > >>>>>>>>> > >>>>>>>>> wrote: > >>>>>>>>>> > >>>>>>>>>> Hi Alex, > >>>>>>>>>> > >>>>>>>>>> if will be of help if you point us to different > >>>>>> links > >>>>>>>> where we > >>>>>>>>> can > >>>>>>>>>> learn > >>>>>>>>>> about this modifications, since I at least can just > >>>>>>>> imagine what > >>>>>>>>> is all > >>>>>>>>>> about, but will need to get deeper in the concepts > >>>>>> to > >>>>>>>> understand > >>>>>>>>> the > >>>>>>>>>> changes and to apply this patterns. > >>>>>>>>>> > >>>>>>>>>> In Jewel each "list component has its own type of > >>>>>>>> renderer, so > >>>>>>>>> for > >>>>>>>>>> example > >>>>>>>>>> List uses ListItemRenderer and DataGrid has > >>>>>>>>> DataGridItemRenderer, since > >>>>>>>>>> usually at that component level the user needs > >>>>>> similar > >>>>>>>>> infrastructure > >>>>>>>>>> like > >>>>>>>>>> hoverable, selectable...and some (not much) more, > >>>>>> don't > >>>>>>>> know > >>>>>>>>> right now > >>>>>>>>>> how > >>>>>>>>>> all this will fit with the "has" new > >>>>>> pattern....I'll try > >>>>>>>> it. > >>>>>>>>>> > >>>>>>>>>> Just one important thing. There's actual users and > >>>>>>>> clients using > >>>>>>>>> Jewel > >>>>>>>>>> and > >>>>>>>>>> other UI sets and are with very short times for > >>>>>> their > >>>>>>>>> migrations, so > >>>>>>>>>> just > >>>>>>>>>> want to ask you to test as much as possible, since > >>>>>> TDJ > >>>>>>>> has many > >>>>>>>>>> examples > >>>>>>>>>> now. Other thing you can test is new TodoMVC to see > >>>>>> how it > >>>>>>>>> behaves, > >>>>>>>>>> since > >>>>>>>>>> it uses a List with IRs. So we can ensure (as much > >>>>>> as we > >>>>>>>> can) > >>>>>>>>> the merge > >>>>>>>>>> left things working (as much as we can) > >>>>>>>>>> > >>>>>>>>>> Thanks for working on this, will try all of this > >>>>>> tomorrow > >>>>>>>>>> > >>>>>>>>>> Carlos > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> El lun., 17 feb. 2020 a las 22:35, Alex Harui > >>>>>>>>>> (<aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid > >>) > >>>>>>>>>> escribió: > >>>>>>>>>> > >>>>>>>>>>> I've pushed the "has" branch that contains a > >>>>>>>> refactoring of > >>>>>>>>> the item > >>>>>>>>>>> renderers. Tour De Jewel and MDL Example seem to > >>>>>> be > >>>>>>>> working > >>>>>>>>> as is > >>>>>>>>>> Basic > >>>>>>>>>>> List Example and MX AdvancedDataGrid. > >>>>>>>>>>> > >>>>>>>>>>> "has" is really just calls to getBeadByType. If > >>>>>> we > >>>>>>>> start to > >>>>>>>>> see > >>>>>>>>>>> performance issues, then we'll look into > >>>>>> optimizing. > >>>>>>>> The > >>>>>>>>> motivation > >>>>>>>>>> to > >>>>>>>>>>> switch to "has" came from several bugs about > >>>>>> using MX > >>>>>>>>> Label/CheckBox > >>>>>>>>>> as > >>>>>>>>>>> item renderers. In Royale, the ItemRenderers > >>>>>> were in > >>>>>>>> control > >>>>>>>>> of the > >>>>>>>>>>> visuals of their rollover and selected state. > >>>>>> That is > >>>>>>>> a more > >>>>>>>>> proper > >>>>>>>>>>> encapsulation than the way it was in Flex where > >>>>>> the > >>>>>>>> lists drew > >>>>>>>>> the > >>>>>>>>>> rollover > >>>>>>>>>>> and selected states and it was hard to override > >>>>>> the > >>>>>>>> visuals > >>>>>>>>> for a > >>>>>>>>>> custom > >>>>>>>>>>> item renderer. But in the develop branch Royale > >>>>>> code, > >>>>>>>> it would > >>>>>>>>>> require > >>>>>>>>>>> that custom itemrenderers implement a lot of APIs > >>>>>>>> related to > >>>>>>>>>> rollover and > >>>>>>>>>>> selected visuals. Instead we can now reuse/share > >>>>>> code > >>>>>>>> for > >>>>>>>>> visuals > >>>>>>>>>> between > >>>>>>>>>>> different renderers because a renderer now can > >>>>>> "has" a > >>>>>>>>>> rollover/selection > >>>>>>>>>>> implementation instead of being one. > >>>>>>>>>>> > >>>>>>>>>>> There are more pieces involved, but there is more > >>>>>>>> sharing of > >>>>>>>>> code. > >>>>>>>>>> Along > >>>>>>>>>>> the way I found that there were some not-so-PAYG > >>>>>>>> patterns > >>>>>>>>> being used > >>>>>>>>>> in MDL > >>>>>>>>>>> and Jewel renderers that might deserve further > >>>>>>>> modification. > >>>>>>>>> There > >>>>>>>>>> are > >>>>>>>>>>> "hoverable" and "selectable" APIs that appear to > >>>>>> be > >>>>>>>> used to > >>>>>>>>>> permanently > >>>>>>>>>>> turn off selection and hover visuals. In > >>>>>> general, I > >>>>>>>> think > >>>>>>>>> there is > >>>>>>>>>> better > >>>>>>>>>>> use of PAYG and composition when functionality is > >>>>>>>> "built up" > >>>>>>>>> and not > >>>>>>>>>>> "turned off", so with the "has" pattern the > >>>>>> renderers > >>>>>>>> can be > >>>>>>>>> added > >>>>>>>>>> to a > >>>>>>>>>>> list without any selection visuals at all (for a > >>>>>>>> non-selectable > >>>>>>>>>> list) or > >>>>>>>>>>> re-composed with custom visuals that only support > >>>>>>>> hoverable, > >>>>>>>>> for > >>>>>>>>>> example. > >>>>>>>>>>> I left it "hoverable/selectable" in the API > >>>>>> surface for > >>>>>>>> now, > >>>>>>>>> but > >>>>>>>>>> something > >>>>>>>>>>> to think about going forward. > >>>>>>>>>>> > >>>>>>>>>>> I’m going to run a few more tests before merging > >>>>>> and > >>>>>>>> pushing to > >>>>>>>>>> develop. > >>>>>>>>>>> > >>>>>>>>>>> -Alex > >>>>>>>>>>> > >>>>>>>>>>> On 1/15/20, 10:44 PM, "Alex Harui" > >>>>>>>> <aha...@adobe.com.INVALID <mailto:aha...@adobe.com.INVALID>> > >>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>> You are welcome to try and see how many cache > >>>>>> hits > >>>>>>>> it > >>>>>>>>> gets. I > >>>>>>>>>> think > >>>>>>>>>>> in renderers, we ask once per renderer. I'm not > >>>>>> sure > >>>>>>>> there is > >>>>>>>>> a > >>>>>>>>>> faster way > >>>>>>>>>>> to do the first lookup of "is", but for "has" we > >>>>>> could > >>>>>>>> change > >>>>>>>>> the > >>>>>>>>>> lookup > >>>>>>>>>>> and save time. > >>>>>>>>>>> > >>>>>>>>>>> On 1/15/20, 10:38 PM, "Greg Dove" < > >>>>>>>> greg.d...@gmail.com <mailto:greg.d...@gmail.com>> > >>>>>>>>> wrote: > >>>>>>>>>>> > >>>>>>>>>>> For the 'something is ISomeInterface' > >>>>>>>>>>> I had wondered in the past if these types > >>>>>> of > >>>>>>>> lookups > >>>>>>>>> could be > >>>>>>>>>>> incrementally > >>>>>>>>>>> cached on the 'is' target (after first > >>>>>> lookup), > >>>>>>>> that > >>>>>>>>> might > >>>>>>>>>> make > >>>>>>>>>>> sense for > >>>>>>>>>>> interfaces, which are the deepest checks I > >>>>>>>> think? > >>>>>>>>>>> caching result (could optionally create > >>>>>> the Map) > >>>>>>>>>>> > >>>>>>>> ISomeInterface['implMap'].set(something.constructor, > >>>>>>>>>> isResult ) > >>>>>>>>>>> > >>>>>>>>>>> then earlier in the interface checks, it > >>>>>> could > >>>>>>>> do > >>>>>>>>> something > >>>>>>>>>> like: > >>>>>>>>>>> if (ISomeInterface['implMap'] && > >>>>>>>>>>> > >>>>>>>> ISomeInterface['implMap'].has(something.constructor) ) > >>>>>>>>> return > >>>>>>>>>>> > >>>>>>>> ISomeInterface['implMap'].get(something.constructor) > >>>>>>>>>>> > >>>>>>>>>>> I realize its extra code, but it should be > >>>>>>>> quite a bit > >>>>>>>>>> faster over > >>>>>>>>>>> time I > >>>>>>>>>>> think. > >>>>>>>>>>> > >>>>>>>>>>> On Thu, Jan 16, 2020 at 7:20 PM Alex Harui > >>>>>>>>>>> <aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>> > wrote: > >>>>>>>>>>> > >>>>>>>>>>>> Hi, > >>>>>>>>>>>> > >>>>>>>>>>>> Several different threads have brought > >>>>>> up > >>>>>>>> issues with > >>>>>>>>>> sharing > >>>>>>>>>>> code between > >>>>>>>>>>>> component sets. Other threads have > >>>>>> offered > >>>>>>>>> different and > >>>>>>>>>> clever > >>>>>>>>>>> ways to > >>>>>>>>>>>> do various things like how MXML is > >>>>>> applied to > >>>>>>>> a > >>>>>>>>> component. > >>>>>>>>>>> Meanwhile, over > >>>>>>>>>>>> in MX emulation, I was starting to copy > >>>>>> some > >>>>>>>> code > >>>>>>>>> from > >>>>>>>>>> Basic to > >>>>>>>>>>> MXRoyale to > >>>>>>>>>>>> get the various MX components to be > >>>>>> valid item > >>>>>>>>> renderers. > >>>>>>>>>>> MXRoyale is > >>>>>>>>>>>> using Basic's item renderer architecture > >>>>>>>> which is > >>>>>>>>> better > >>>>>>>>>>> encapsulated: the > >>>>>>>>>>>> renderer draws its hovered and selected > >>>>>>>> state. In > >>>>>>>>> Flex, > >>>>>>>>>> the > >>>>>>>>>>> List draws > >>>>>>>>>>>> over the renderer, which makes it hard > >>>>>> to > >>>>>>>> customize > >>>>>>>>> the > >>>>>>>>>> way the > >>>>>>>>>>> renderer > >>>>>>>>>>>> will look when hovered and selected. > >>>>>>>>>>>> > >>>>>>>>>>>> It finally occurred to me that one of > >>>>>> the > >>>>>>>> reasons we > >>>>>>>>> end up > >>>>>>>>>>> copying code > >>>>>>>>>>>> is because we are still using too many > >>>>>> "is" > >>>>>>>> checks > >>>>>>>>> instead > >>>>>>>>>> of > >>>>>>>>>>> "has" > >>>>>>>>>>>> checks. I'm not even sure we have any > >>>>>> "has" > >>>>>>>> checks > >>>>>>>>> in the > >>>>>>>>>> Royale > >>>>>>>>>>>> framework. I was afraid of the > >>>>>> overhead of a > >>>>>>>> "has" > >>>>>>>>> check, > >>>>>>>>>> but > >>>>>>>>>>> I'm starting > >>>>>>>>>>>> to change my mind because: > >>>>>>>>>>>> > >>>>>>>>>>>> 1) The "is" check actually runs a fair > >>>>>> amount > >>>>>>>> of > >>>>>>>>> code, > >>>>>>>>>>> especially for > >>>>>>>>>>>> (comp is ISomeInterface) > >>>>>>>>>>>> 2) The length of bead arrays don't seem > >>>>>> too > >>>>>>>> long. > >>>>>>>>>>>> > >>>>>>>>>>>> A "has" check calls > >>>>>>>> getBeadByType(ISomeInterface), > >>>>>>>>> so it > >>>>>>>>>>> actually will run > >>>>>>>>>>>> the (bead is ISomeInterface) on > >>>>>> potentially > >>>>>>>> the > >>>>>>>>> entire > >>>>>>>>>> strand > >>>>>>>>>>> array/vector, > >>>>>>>>>>>> although we could speed that up by > >>>>>> annotating > >>>>>>>> beads > >>>>>>>>> or > >>>>>>>>>> keeping > >>>>>>>>>>> track of > >>>>>>>>>>>> what is on the strand. But the code > >>>>>>>> sharing/reuse > >>>>>>>>>> potential of > >>>>>>>>>>> this > >>>>>>>>>>>> pattern seems significant to me. > >>>>>>>>>>>> > >>>>>>>>>>>> For example, it could change how hard > >>>>>> it is > >>>>>>>> to make a > >>>>>>>>>> component > >>>>>>>>>>> usable as > >>>>>>>>>>>> a top tag in MXML. Instead of the > >>>>>> component > >>>>>>>> having > >>>>>>>>> to > >>>>>>>>>> implement > >>>>>>>>>>> certain > >>>>>>>>>>>> methods, the component could have a bead > >>>>>>>> installed > >>>>>>>>> and the > >>>>>>>>>>>> MXMLDataInterpreter could talk to that > >>>>>> bead > >>>>>>>> instead > >>>>>>>>> of the > >>>>>>>>>>> component. > >>>>>>>>>>>> > >>>>>>>>>>>> In the case of the item renderers, > >>>>>> instead of > >>>>>>>>> testing if > >>>>>>>>>> the > >>>>>>>>>>> renderer "is" > >>>>>>>>>>>> ISelectableLIstItemRenderer, it could > >>>>>> ask if > >>>>>>>> the > >>>>>>>>> created > >>>>>>>>>> widget > >>>>>>>>>>> "has" an > >>>>>>>>>>>> ISelectableLIstItemRenderer bead and the > >>>>>>>> logic in > >>>>>>>>> that > >>>>>>>>>> bead can > >>>>>>>>>>> be reused > >>>>>>>>>>>> in both Basic and MXRoyale without being > >>>>>>>> copied. > >>>>>>>>>>>> > >>>>>>>>>>>> Some code, like Container overrides of > >>>>>>>> addElement > >>>>>>>>> probably > >>>>>>>>>> can't > >>>>>>>>>>> be > >>>>>>>>>>>> refactored into a "has". But I wonder > >>>>>> how > >>>>>>>> many other > >>>>>>>>>> things > >>>>>>>>>>> could. I'm > >>>>>>>>>>>> not sure I would move everything that > >>>>>> could > >>>>>>>> be moved > >>>>>>>>> into a > >>>>>>>>>>> shared bead. > >>>>>>>>>>>> We'd have to think about the overhead > >>>>>> on small > >>>>>>>>> components > >>>>>>>>>> and > >>>>>>>>>>> apps. But > >>>>>>>>>>>> for MXML support and Item Renderer > >>>>>> support, > >>>>>>>> it seems > >>>>>>>>> to > >>>>>>>>>> make > >>>>>>>>>>> sense. > >>>>>>>>>>>> > >>>>>>>>>>>> Anyway, I will look into refactoring > >>>>>> the item > >>>>>>>>> renderer > >>>>>>>>>> code in > >>>>>>>>>>> a few days > >>>>>>>>>>>> unless feedback indicates otherwise. > >>>>>> Bugs > >>>>>>>> like #676 > >>>>>>>>> and > >>>>>>>>>> #681 > >>>>>>>>>>> inspired this > >>>>>>>>>>>> post. > >>>>>>>>>>>> > >>>>>>>>>>>> Of course, I could be wrong... > >>>>>>>>>>>> -Alex > >>>>>>>>>>>> > >>>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> -- > >>>>>>>>>> Carlos Rovira > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&reserved=0 > >>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>>> > >>>>>>>>> > >>>>>>>>> -- > >>>>>>>>> > >>>>>>>>> Piotr Zarzycki > >>>>>>>>> > >>>>>>>>> Patreon: * > >>>>>>>>> > >>>>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0 > >>> > >>>>>>>>> < > >>>>>>>>> > >>>>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=IPLVLQQP0NRQMMR5Dk4yBq2nEnIQsAANyDw%2BtUvoYkU%3D&reserved=0 > >>> > >>>>>>>>>> * > >>>>>>>>> > >>>>>>>>> > >>>>>>>>> > >>>>>>>> > >>>>>>>> -- > >>>>>>>> Carlos Rovira > >>>>>>>> > >>>>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&reserved=0 > >>> > >>>>>>>> > >>>>>>>> > >>>>>>>> > >>>>>>> > >>>>>>> -- > >>>>>>> Carlos Rovira > >>>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&reserved=0 > >>> > >>>>>>> > >>>>>>> > >>>>>> > >>>>>> -- > >>>>>> Carlos Rovira > >>>>>> > >>>>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > >>> > >>>>>> > >>>>>> > >>>>>> > >>>>> > >>>>> -- > >>>>> Carlos Rovira > >>>>> > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0>> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0> > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0 > < > https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&reserved=0 > >>> > > > > > > > > > > > -- Carlos Rovira http://about.me/carlosrovira