You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@pivot.apache.org by Edvin Syse <ed...@sysedata.no> on 2011/06/04 00:32:10 UTC
Track dirty state of component hierarchy
I have a toolbar with a global Save-button that I would like to enable
only when I detect one or more components that are dirty within the
active "editor". The editor is just a component that contains other
components, mostly inside a Form.
I'm thinking about traversing the component hiararchy in my "editor",
and adding listeners for all components like for example
TextInputContentListener for TextInput fields and
ListButtonSelectionListener for ListButton etc.
Is there something in the framework I can use to achieve this?
-- Edvin
Re: Track dirty state of component hierarchy
Posted by Edvin Syse <ed...@sysedata.no>.
Thank you for the pointers Chris, that gave me some ideas. Actually, all
my domain objects extend a base class that implements
PropertyChangeSupport, so I might try to detect domain objects within
the focused component hieararchy and leave Pivot out of most of the
logic, that might be cleaner.
-- Edvin
Den 04.06.2011 06:58, skrev Chris Bartlett:
> Edvin,
>
> I am not aware of anything within Pivot that covers this sort of thing,
> but you might find some of the Component Explorer tutorial source code
> useful. Specifically the use of proxies for 'dynamic' notification &
> filtering of events in the
> org.apache.pivot.tutorials.explorer.tools.EventLogger class.
>
> http://pivot.apache.org/demos/component-explorer.html
> http://svn.apache.org/repos/asf/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/EventLogger.java
>
> A similar approach might work for you depending on your definition of
> dirty. You would need Pivot to provide events that cover every possible
> 'mutation' of your data model (assuming that is what you mean by dirty).
> If the events do not exist, I think you would have to create your own
> event(s) for each Component, although I suppose you could wrap the
> entire Component in a proxy and use that to intercept the calls to its
> 'mutating' methods.
>
>
> While an event/notification based solution is probably cleaner, you
> might also consider polling the target Components' state and comparing
> to a known 'clean' state. Something like this might be workable if the
> Components are only every manually changed (and therefore made dirty)
> and you track and monitor the focused Component for changes (and/or
> maybe track mouse position / mouseover)
>
> http://pivot.apache.org/2.0/docs/api/org/apache/pivot/wtk/ComponentClassListener.html#focusedComponentChanged(org.apache.pivot.wtk.Component)
> http://pivot.apache.org/2.0/docs/api/org/apache/pivot/wtk/Component.html#getComponentClassListeners()
>
>
> Finally, BeanAdapter and BeanMonitor might also be useful at some point.
> http://pivot.apache.org/2.0/docs/api/org/apache/pivot/beans/BeanAdapter.html
> http://pivot.apache.org/2.0/docs/api/org/apache/pivot/beans/BeanMonitor.html
>
> Chris
>
> On 4 June 2011 05:32, Edvin Syse <edvin@sysedata.no
> <ma...@sysedata.no>> wrote:
>
> I have a toolbar with a global Save-button that I would like to
> enable only when I detect one or more components that are dirty
> within the active "editor". The editor is just a component that
> contains other components, mostly inside a Form.
>
> I'm thinking about traversing the component hiararchy in my
> "editor", and adding listeners for all components like for example
> TextInputContentListener for TextInput fields and
> ListButtonSelectionListener for ListButton etc.
>
> Is there something in the framework I can use to achieve this?
>
> -- Edvin
>
>
Re: Track dirty state of component hierarchy
Posted by Chris Bartlett <cb...@gmail.com>.
Edvin,
I am not aware of anything within Pivot that covers this sort of thing, but
you might find some of the Component Explorer tutorial source code useful.
Specifically the use of proxies for 'dynamic' notification & filtering of
events in the org.apache.pivot.tutorials.explorer.tools.EventLogger class.
http://pivot.apache.org/demos/component-explorer.html
http://svn.apache.org/repos/asf/pivot/trunk/tutorials/src/org/apache/pivot/tutorials/explorer/tools/EventLogger.java
A similar approach might work for you depending on your definition of dirty.
You would need Pivot to provide events that cover every possible 'mutation'
of your data model (assuming that is what you mean by dirty). If the events
do not exist, I think you would have to create your own event(s) for each
Component, although I suppose you could wrap the entire Component in a proxy
and use that to intercept the calls to its 'mutating' methods.
While an event/notification based solution is probably cleaner, you might
also consider polling the target Components' state and comparing to a known
'clean' state. Something like this might be workable if the Components are
only every manually changed (and therefore made dirty) and you track and
monitor the focused Component for changes (and/or maybe track mouse position
/ mouseover)
http://pivot.apache.org/2.0/docs/api/org/apache/pivot/wtk/ComponentClassListener.html#focusedComponentChanged(org.apache.pivot.wtk.Component)
http://pivot.apache.org/2.0/docs/api/org/apache/pivot/wtk/Component.html#getComponentClassListeners()
Finally, BeanAdapter and BeanMonitor might also be useful at some point.
http://pivot.apache.org/2.0/docs/api/org/apache/pivot/beans/BeanAdapter.html
http://pivot.apache.org/2.0/docs/api/org/apache/pivot/beans/BeanMonitor.html
Chris
On 4 June 2011 05:32, Edvin Syse <ed...@sysedata.no> wrote:
> I have a toolbar with a global Save-button that I would like to enable only
> when I detect one or more components that are dirty within the active
> "editor". The editor is just a component that contains other components,
> mostly inside a Form.
>
> I'm thinking about traversing the component hiararchy in my "editor", and
> adding listeners for all components like for example
> TextInputContentListener for TextInput fields and
> ListButtonSelectionListener for ListButton etc.
>
> Is there something in the framework I can use to achieve this?
>
> -- Edvin
>