Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-ui-dev] Question about JFace, wrapped objects, and objectContributions

Hi Brian, Hi Michael,

it's not JDT's object contributions that have to be adaptable it's all JDT
actions. We looked into this during the 3.0 time frame and postponed it
(lots of actions, every action implementor as to think about it, not
possible to only do the conversion once). Instead we use two different
approaches depending on whether the selection should only contain the
unwrapped elements or if the wrapped elements are needed as well:

Only unwrapped elements:
======================
We use a special selection provider which does the conversion. You may want
to look at the call hierarchy to see how this works.


Both wrapped and unwrapped elements
==================================
All JDT actions take an IViewSite to access the selection. We have a
special view site (ViewSiteDecorator) which is responsible for converting
the selection. We pass the special view site to the actions which need the
unwrapped elements instead of the one provided by the view itself. The
problem with this approach is that it uses internal API. However we are
working with Platform/UI on an officially supported solution.

HTH

Dirk


                                                                           
             Michael Valenta                                               
             <Michael_Valenta@                                             
             ca.ibm.com>                                                To 
             Sent by:                  "Eclipse Platform UI component      
             platform-ui-dev-b         developers list."                   
             ounces@xxxxxxxxxx         <platform-ui-dev@xxxxxxxxxxx>       
             g                                                          cc 
                                                                           
                                                                   Subject 
             24.08.2005 15:59          Re: [platform-ui-dev] Question      
                                       about JFace, wrapped objects,       
                                       and   objectContributions           
             Please respond to                                             
             "Eclipse Platform                                             
               UI component                                                
             developers list."                                             
             <platform-ui-dev@                                             
               eclipse.org>                                                
                                                                           
                                                                           





Brian,

The only other option I can think of is for JDT to make their
objectComntributions adaptable. I can't comment on whether they would agree
to do this and it wouldn't help you in the short term anyway. Other than
that, I think 2 would be your best option (although there may be some
gotchas that I don't know about).

The thing that is getting you here is the need to show the same model
object multiple times. If you could get ride of that requirement, you could
just implement a custom content provider (i.e. the intended way to handle
this situation).

Michael


                                                                           
 Brian de Alwis                                                            
 <bsd@xxxxxxxxx>                                                           
 Sent by:                                                               To 
 platform-ui-dev-bounces@e             platform-ui-dev@xxxxxxxxxxx         
 clipse.org                                                             cc 
                                                                           
                                                                   Subject 
 22/08/2005 04:54 PM                   [platform-ui-dev] Question about    
                                       JFace, wrapped objects,        and  
                                       objectContributions                 
     Please respond to                                                     
    "Eclipse Platform UI                                                   
    component developers                                                   
           list."                                                          
                                                                           
                                                                           
                                                                           
                                                                           





Hi everybody.  I have a question about the interaction of
objectContributions and selections when dealing with custom models
managed through JFace.  My apologies if this isn't seen as appropriate
for this list, but it seemed that there is a deeper issue here.

I'm using a JFace TreeViewer to provide a view on a model.  As my
model doesn't directly correspond to a tree, I've created a projection
of the model using a structure similar to the TreeParent / TreeObject
as provided by the JFace generated templates.  I've modified my
LabelProvider to unwrap these objects appropriately.

My problem is this: although my wrappers are an internal thing,
meant only to impose a structure, they are bleeding through, becoming
the actual objects exposed to the workbench.  As a result, some of
the workbench's objectContributions are not being properly applied,
such as when building context menus.

For example, some of my model objects are actually JDT IJavaElements.
But because the JDT objectContributions don't specify "adaptable=true"
(e.g. org.eclipse.jdt.internal.ui.compare.JavaReplaceActions and
org.eclipse.jdt.internal.ui.compare.JavaCompareActions), they never
appear in the context menus, even when the wrappers can be adapted.
I think they should apply as my wrapper objects exist only to
support imposing a viewing structure; the `real' objects are the
model objects.

I can't return the actual model objects (e.g. the IJavaElements),
as they may occur multiple places in my model (which causes problems
with implementing ITreeContentProvider.getParent()).

I see three solutions to this problem, but I'm hoping there is a
better way?

1. My hacked solution for the moment is to explicitly call
   ObjectActionContributorManager.contributeObjectActions() in in
   my menuAboutToShow(IMenuManager) callback and provide an
   explicitly unwrapped selection.  This solves the immediate
   problem, but it's an undesirable, short-term solution.

2. Subclass TreeViewer and override the getSelection() to do the
   rewrapping.  This seems the better immediate option, but I'm
   not sure about the consequences, and the same problem will occur
   with other types of structured viewers.

3. Add another level of indirection with an additional method to
   IStructuredContentProvider.getModelObject(), called appropriately?

I apologize if this has been discussed before, but I couldn't find
anything appropriate.

Brian.

--
 Brian de Alwis | Software Practices Lab | UBC | http://www.cs.ubc.ca/~bsd/
"There is much pleasure to be gained in useless knowledge." - Bertrand
Russell
_______________________________________________
platform-ui-dev mailing list
platform-ui-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-ui-dev
_______________________________________________
platform-ui-dev mailing list
platform-ui-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/platform-ui-dev




Back to the top