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. >> >
