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&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438893605&amp;sdata=OLsTF0QDnEscCtsFltzRttOMHMlalV12d%2FrdyeHU28o%3D&amp;reserved=0
> >>>
>     >>>>>>>>>>
>     >>>>>>>>>>
>     >>>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>> --
>     >>>>>>>>>
>     >>>>>>>>> Piotr Zarzycki
>     >>>>>>>>>
>     >>>>>>>>> Patreon: *
>     >>>>>>>>>
>     >>>>>>>>
>     >>>>>>
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438903606&amp;sdata=nKLTX5nI50Q3UTU4N6OluYcd46Wc7S%2F%2FmREW9LpO%2BAY%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0
> >>>
>     >>>>>>>>> <
>     >>>>>>>>>
>     >>>>>>>>
>     >>>>>>
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438913609&amp;sdata=tcMmtzU%2BM839pkpZjJ%2BGpgxX0Y7ySB7QSGaggBGd3Ow%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patreon.com%2Fpiotrzarzycki&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=IPLVLQQP0NRQMMR5Dk4yBq2nEnIQsAANyDw%2BtUvoYkU%3D&amp;reserved=0
> >>>
>     >>>>>>>>>> *
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>>
>     >>>>>>>>
>     >>>>>>>> --
>     >>>>>>>> Carlos Rovira
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438923602&amp;sdata=z4JLx3m8XDiGpRmBsPLRbdM2owc2jr%2FwZJgT6isB%2B%2FA%3D&amp;reserved=0
> >>>
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>>
>     >>>>>>>
>     >>>>>>> --
>     >>>>>>> Carlos Rovira
>     >>>>>>>
>     >>>>>>
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438933591&amp;sdata=EGe4%2Fsj3WGEePe3%2BI3aMi%2BAsryuAj3%2BbtKsFj%2BCKQQ4%3D&amp;reserved=0
> >>>
>     >>>>>>>
>     >>>>>>>
>     >>>>>>
>     >>>>>> --
>     >>>>>> Carlos Rovira
>     >>>>>>
>     >>>>>>
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> >>>
>     >>>>>>
>     >>>>>>
>     >>>>>>
>     >>>>>
>     >>>>> --
>     >>>>> Carlos Rovira
>     >>>>>
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438943582&amp;sdata=KgUgf3To44Tx%2FiMHhZxndEcHy4UDq9M1eKB8fgZn3X8%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0>>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0>
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0
> <
> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C13f2511a60c84145eb7608d7be7edf15%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637187324438953577&amp;sdata=fPeWXjO%2BAxcoBH4t04eHU46ONAm%2Bnz1lzZ71%2Fuux8Wc%3D&amp;reserved=0
> >>>
>     >
>     >
>     >
>
>
>
>
>

-- 
Carlos Rovira
http://about.me/carlosrovira

Reply via email to