Hi Werner,
I didn't realize you are writing an API as opposed to an application where you'd have control over your controls :-)

In this case I indeed don't see any straightforward solution right now. Perhaps it might make sense for us to mark the "skin/control-internal" nodes somehow. It may be useful in any situation where user traverses the scenegraph and doesn't want to mess with the control implementation. Jonathan, what do you think?

Pavel

On 28.5.2013 18:42, Werner Lehmann wrote:
Hi Pavel,

I like marking those controls with a property. UserData I would leave for external usage. I think it is a property anyway.

The main problem here is that this is a container for arbitrary nodes, including other containers. I can watch for changes in my list of immediate children but won't know about new children added to those. I can watch the subgraph with many listeners for Parent.childrenUnmodifiable and Parent.parent but still cannot generically know if a child node belongs to a skin or not: Pane children would be marked, ScrollPane children should not be marked.

The other option, adding all kinds of listeners directly on the nested child controls, has the same problem: I don't know when somebody adds a label to a vbox contained in my control so I cannot add listeners to the label.

Seems as if there is just no way of having centralized mouse/key/drag event filters for all (nested) non-skin child nodes. Unless I introduce an explicit observable list of those nodes. This would be redundant and I cannot force users to actually keep it up-to-date.

Maybe I require a marker interface or annotation on child nodes instead. Forcing users to subclass each label, textfield, etc. I would have preferred to keep this as unobtrusive and versatile as possible.

Werner

On 27.05.2013 16:25, Pavel Safrata wrote:
Hi Werner,
so you need to distinguish "your" controls from "system" controls. Can
you mark your controls somehow? For instance by node property or style
or perhaps even userData or id?
Regards,
Pavel

Reply via email to