pivot-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Greg Brown <gkbr...@mac.com>
Subject Re: Best practice for implementing Actions
Date Thu, 09 Sep 2010 17:44:59 GMT
Quite possibly, though it isn't as critical for ButtonData, since you could easily create your
own ButtonData subclass. This would have been more of a pain for the tree data, since you
would have had to create two custom subclasses (one for TreeNode and another for TreeBranch).

OTOH, it may not be a bad idea to add a user data property to all of the default content classes.


On Sep 9, 2010, at 1:41 PM, Roger L. Whitcomb wrote:

> Just wondering:  you just added a "userData" member to TreeNode to help with context,
would a "userData" member of ButtonData be appropriate/helpful here as well?
> 
> Roger Whitcomb | Architect, Engineering | Roger.Whitcomb@ingres.com | Ingres | 500 Arguello
Street | Suite 200 | Redwood City | CA | 94063 | USA  +1 650-587-5596 | fax: +1 650-587-5550
> 
> -----Original Message-----
> From: Roger L. Whitcomb [mailto:Roger.Whitcomb@ingres.com] 
> Sent: Thursday, September 09, 2010 10:38 AM
> To: dev@pivot.apache.org; user@pivot.apache.org
> Subject: RE: Best practice for implementing Actions
> 
> How did you do the "dependency injection" within the actions?  I'm looking at my code,
and I'm thinking along these lines too.  Having the invoking component (esp. the MenuItem)
helps for some things, but, as you say, often you need other kinds of context within the application,
regardless of the UI context.
> 
> Roger Whitcomb | Architect, Engineering | Roger.Whitcomb@ingres.com | Ingres | 500 Arguello
Street | Suite 200 | Redwood City | CA | 94063 | USA  +1 650-587-5596 | fax: +1 650-587-5550
> 
> -----Original Message-----
> From: Todd Volkert [mailto:tvolkert@gmail.com] 
> Sent: Thursday, September 09, 2010 10:33 AM
> To: user@pivot.apache.org
> Cc: dev@pivot.apache.org
> Subject: Re: Best practice for implementing Actions
> 
> FWIW, I ran into this issue in one of my Pivot apps and took a
> different approach altogether.  Instead of looking at the context from
> which the action was invoked, I looked at the state of the app in the
> abstract sense.
> 
> For instance, I might look at the selected path of a TreeView to see
> which node they right-clicked on, or I might look at the selected item
> of a list view cross-referenced with the selected items of a table
> view.
> 
> I my cases, I needed more than just how they were invoked.  Very
> specific to my case, I used dependency injection within the actions to
> get the necessary state without hard-coupling it to the UI.
> 
> This doesn't invalidate the thought that we might want to pass the
> "invocation context" to the action's perform() method, but maybe it's
> food for thought.
> 
> Cheers,
> -T
> 
> On Thu, Sep 9, 2010 at 1:24 PM, Roger L. Whitcomb
> <Roger.Whitcomb@ingres.com> wrote:
>> The Stock Tracker tutorial has it in 1.5.x also, I just left out the
>> Tutorial code from my list.  And yes, the Component is available in
>> there as well.
>> 
>> Let me think about how that works in what I have prototyped as well.  I
>> think that helps with the ugly case of having global variables that are
>> referenced directly by class name.
>> 
>> Roger Whitcomb | Architect, Engineering | Roger.Whitcomb@ingres.com |
>> Ingres | 500 Arguello Street | Suite 200 | Redwood City | CA | 94063 |
>> USA  +1 650-587-5596 | fax: +1 650-587-5550
>> 
>> -----Original Message-----
>> From: Greg Brown [mailto:gkbrown@mac.com]
>> Sent: Thursday, September 09, 2010 10:10 AM
>> To: dev@pivot.apache.org
>> Cc: user@pivot.apache.org
>> Subject: Re: Best practice for implementing Actions
>> 
>> Yes, that is exactly what I did. There is also some code in the Stock
>> Tracker tutorial that calls perform() (it may only be in the 2.0
>> branch), but a Component argument also works there.
>> 
>> On Sep 9, 2010, at 1:07 PM, Roger L. Whitcomb wrote:
>> 
>>> So, looking for where the Action.perform() method is called from:
>>> 
>>> -          In Window.java from a key press - the context would have to
>>> be the Window component
>>> 
>>> -          In Button.java - obviously the Button component (Menu.Item
>>> and MenuBar.Item are both derived from this)
>>> 
>>> That's all the places I can find - I guess that covers all the cases?
>>> So, Component it should be.
>>> 
>>> 
>>> 
>>> Roger Whitcomb | Architect, Engineering | Roger.Whitcomb@ingres.com|
>>> Ingres | 500 Arguello Street | Suite 200 | Redwood City | CA | 94063 |
>>> USA
>>> 
>> <http://www.google.com/maps?f=q&hl=en&geocode=&q=500+Arguello+Street+%7C
>>> 
>> +Suite+200+%7C+Redwood+City+%7C+CA+%7C+94063+%7C+USA+&sll=37.0625,-95.67
>>> 7068&sspn=50.557552,73.037109&ie=UTF8&t=h&z=16&iwloc=addr>
 | +1
>>> 650-587-5596 | fax: +1 650-587-5550
>>> 
>>> From: Greg Brown [mailto:gkbrown@mac.com]
>>> Sent: Thursday, September 09, 2010 9:55 AM
>>> To: user@pivot.apache.org
>>> Cc: Pivot Dev
>>> Subject: Re: Best practice for implementing Actions
>>> 
>>> 
>>> 
>>> Ha. I think you have identified a valid issue with the Action
>> interface:
>>> the perform() method does not provide the implementor with any
>>> information about the object that triggered the action.
>>> 
>>> 
>>> 
>>> Now, this was originally by design - the thinking was that it should
>> be
>>> possible to execute an action regardless of the UI element that
>> invoked
>>> it. Since actions can potentially be triggered by multiple elements,
>>> they should not generally have a dependency on a particular element.
>>> However, that premise doesn't account for shared actions, or the
>>> possibility that the developer may actually want to execute different
>>> action behaviors based on the source value.
>>> 
>>> 
>>> 
>>> In order to resolve this, I think we'll need to add an argument to the
>>> perform() method that identifies the action's source. If we add it to
>>> 1.5.2, it will be a breaking API change, which we generally try to
>> avoid
>>> in maintenance releases. However, I have already made one API change
>> for
>>> 1.5.2 (to the ResultList class, to resolve a serious performance
>> issue),
>>> so it is not out of the question. Since this is a major functional
>>> limitation, it is probably worth doing.
>>> 
>>> 
>>> 
>>> The only question in my mind is - what should the type of the source
>>> argument be? It could be an Object, but I could also see an argument
>> for
>>> making it a Component (Action is defined in the org.apache.pivot.wtk
>>> package, after all).
>>> 
>>> 
>>> 
>>> Thoughts/comments?
>>> 
>>> 
>>> 
>>> Greg
>>> 
>>> 
>>> 
>>> On Sep 9, 2010, at 10:33 AM, Roger L. Whitcomb wrote:
>>> 
>>> 
>>> 
>>> 
>>> 
>>> My application has a large tree in the left-hand side with context
>> menus
>>> (different) on every node of the tree.  So, the context menu actions
>> are
>>> highly context-sensitive (the "Properties" item, obviously, would need
>>> to know the exact selected object that the context menu was brought up
>>> on in order to get the right Properties dialog).
>>> 
>>> 
>>> 
>>> So, my question is:  what is "best practice" as far as Pivot goes in
>>> order to transmit this context into the Action.perform() method?  The
>>> "Expenses" tutorial seems to rely on global variables and using
>>> "getSelectedRow" on that TableView object.  So, is this the best way?
>>> Is there some way I don't see to get the context directly in the
>> Action
>>> object?
>>> 
>>> 
>>> 
>>> Thanks.
>>> 
>>> 
>>> 
>>> Roger Whitcomb
>>> 
>>> Architect, Engineering
>>> 
>>> Ingres Corporation
>>> 
>>> roger.whitcomb@ingres.com
>>> 
>>> 
>>> 
>>> PHONE +1 650.587.5596
>>> 
>>> FAX +1 650.587.5550
>>> 
>>> 
>>> 
>>> www.ingres.com <http://www.ingres.com/>
>>> 
>>> 
>>> 
>>> This transmission is confidential and intended solely for the use of
>> the
>>> recipient named above. It may contain confidential, proprietary, or
>>> legally privileged information. If you are not the intended recipient,
>>> you are hereby notified that any unauthorized review, use, disclosure
>> or
>>> distribution is strictly prohibited. If you have received this
>>> transmission in error, please contact the sender by reply e-mail and
>>> delete the original transmission and all copies from your system.
>>> 
>>> 
>>> 
>>> 
>>> 
>> 
>> 


Mime
View raw message