FYI, I just prototyped this change in the Pivot 2.0 codebase, and a Component 
type argument seems to work well.
G

On Sep 9, 2010, at 12:54 PM, Greg Brown wrote:

> 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
>> [email protected]
>>  
>> PHONE +1 650.587.5596
>> FAX +1 650.587.5550
>>  
>> 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.
>>  
> 

Reply via email to