Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [platform-ui-dev] question about ITreeContentProvider

jml,

ITreeContentProvider.getParent(Object) is used to find the parent for the 
given model element.  This is used when you ask the viewer to do something 
to the element, but the viewer does not already know the element (tree 
viewers are lazily populated, so there is no corresponding TreeItem yet). 
Methods which use this include: reveal, setExpanded, expandToLevel, and 
setSelection.

For example, in your tree structure below, if A had never been expanded, 
then the viewer would not know about elements B or C.
If you ask it to reveal(C), then it has to call getParent(C) to determine 
which item(s) to expand and populate to show C.  In this case, your 
content provider would return A, so the viewer would populate the children 
of A, then expand A to reveal C.

Since you want to show a DAG, getParent can be one-to-many, so you can't 
always answer this question (i.e. for B, as you point out).
It's OK to always return null for getParent, as long as you steer clear of 
using the methods above, or only use them on the elements that are known 
to the tree.

Beware that having multiple equal elements in the tree can lead to other 
confusnig behaviour, since the viewers typically assume a 1-1 mapping 
between element and SWT item.
For example, after expanding A and B if you ask the tree to select C, 
which item should it select?  Currently it will select only the first one 
found.

Hope this clarifies,
Nick





"jml" <jml@xxxxxxxx>
Sent by: platform-ui-dev-admin@xxxxxxxxxxx
10/17/02 03:08 AM
Please respond to platform-ui-dev

 
        To:     <platform-ui-dev@xxxxxxxxxxx>
        cc: 
        Subject:        [platform-ui-dev] question about ITreeContentProvider


Hi, all

In ITreeContentProvider, there is a function as getParent(), is it 
necessary?
I have a data structure, which is a directed no-cycle graph.
For example, it has A,B,C, and A->B, A->C and B->C

Now I want to show it as a tree, as

A
 -B
  -C
 -C

and I want to just write a ITreeContentProvider to do that.

All other thing are very easy and straightforward, but the getParent(). 
Since now when the parameter for getParent() is C, I don't know what to 
return.

I tried just return null in getParent(), and the tree can be displayed. So 
come my question, is getParent() necessary? Where does it be used in the 
current system? Also, I would think the underlying TreeItem implementation 
must already remember the parent relationship in it.

Thanks

jml




Back to the top