Community
Participate
Working Groups
3.2 1. Use the Eclipse Wizard to produce a plugin with a tree viewer view. 2. Paste the modified SampleView.java - this looks like the left part of the attached screenshot 3. Click on the top node Parent1 and type - 4. TreeViewer.remove is called to remove Parent 1. TreeViewer.refresh is called - this looks like the right part of the attached screenshot Wrong: node Parent 4 is now collapsed. Expectation Parent 4 is still expanded. Is there any workaround? Am I misusing your API? Note. The snippet is almost identical to the code generated by PDE for plugin / view / Tree Viewer. Here is the extra code in createPartControl: viewer.getTree().addKeyListener(new KeyListener() { public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } public void keyPressed(KeyEvent e) { if (e.character == '-') { TreeParent parent = (TreeParent) ((IStructuredSelection)viewer.getSelection()).toArray()[0]; parent.getParent().removeChild(parent); viewer.refresh(); } if (e.character == '+') { TreeParent parent = (TreeParent) ((IStructuredSelection)viewer.getSelection()).toArray()[0]; parent.addChild(new TreeParent(new Date().toString())); } } });
Created attachment 52434 [details] Screenshot showing the tree before and after the remove. See the undesired collapsed node ater the removal
Created attachment 52436 [details] The modified SampleView.java
Correction: 4. Node "Parent 1" is removed from its parent node in the model. Then JFace TreeViewer.refresh is called
Which build are you using?
Old one. I am on 3.2 Build id: M20060629-1905 Mmh I'd be so happy if you tell me that does not occur anymore in the most recent IBuild. I can help you reproduce the problem if my instructions left you confused.
Created attachment 52935 [details] patch
The reason for not preserving the expansion state in your example is that we reuse tree items on refresh, and we only preserve the expansion state for one level. Fix released >20061030-0800. The fix I released optimizes refresh for the case where elements are removed but not reordered. If elements are reordered, expansion state might still be lost. Note that calling add/remove instead of refresh is the recommended practice if you want the tree viewer to do the minimal amount of work with the least amount of changes to the tree.
Verified using I20061031-0656.
Thanks Boris.