pivot-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chris Bartlett (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PIVOT-718) TreeViewSelectionListener not invoked
Date Fri, 27 May 2011 11:11:47 GMT

    [ https://issues.apache.org/jira/browse/PIVOT-718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13040186#comment-13040186
] 

Chris Bartlett commented on PIVOT-718:
--------------------------------------

Before going any further I will try to clarify what appears to be a misunderstanding of the
data structure that backs a TreeView.

org.apache.pivot.wtk.TreeView will display any kind of object as a 'leaf', but it will only
display objects as 'branches' if they implement org.apache.pivot.collections.List.

The following 2 classes are provided with Pivot for use with TreeViews, but custom implementations
can also be used.
org.apache.pivot.wtk.content.TreeNode (leaf)
org.apache.pivot.wtk.content.TreeBranch (will be considered a branch as it implements List<TreeNode>)

Note that the remove(T) and indexOf(T) methods mentioned in earlier comments are defined in
org.apache.pivot.collections.Sequence<T> which TreeBranch implements via List<T>.


A typical TreeView data structure will consist of a single TreeBranch (or any other instance
of an org.apache.pivot.collections.List) which in turn will contain 0 or more TreeNodes or
TreeBranches.  Each List (TreeBranch) will be displayed as a 'branch', while other objects
(TreeNode) will be displayed as 'leaves'.  

In order to remove an item from a TreeView, you must determine which List (TreeBranch) it
belongs to before calling the List#remove(T item) method.
The attached example code appears to expect any selected node to be removed by calling 
tree.getTreeData().remove(tree.getSelectedNode());
However this will only work if the selected node exists in the root List (TreeBranch) used
to back the TreeView.


The following code snippet should work for any selected TreeNode or TreeBranch, but assumes
that the TreeView will only ever contain TreeNode or TreeBranch objects (or subtypes)

// Get the selected node
TreeNode selectedNode = (TreeNode) treeView.getSelectedNode();
if (selectedNode != null) {
  // Get the parent List of the selected node
  org.apache.pivot.collections.List parent = selectedNode.getParent();
  if (parent != null) {
      // Remove the selected node from its parent
      parent.remove(selectedNode);
  }
}


> TreeViewSelectionListener not invoked
> -------------------------------------
>
>                 Key: PIVOT-718
>                 URL: https://issues.apache.org/jira/browse/PIVOT-718
>             Project: Pivot
>          Issue Type: Bug
>          Components: wtk
>    Affects Versions: 2.0
>         Environment: jkd1.6,linux
>            Reporter: laurent Gebus
>            Priority: Minor
>             Fix For: 2.1
>
>         Attachments: TreeSelect.bxml, TreeSelect.java
>
>
> I have a TreeView with a TreeViewSelectionListener, but the listener doesn't get invoked
when a item is removed from the tree.
> I do : tree.getTreeData().remove( tree.getSelectedNode());
> tree is refreshed : the removed node is no longer shown, no node is selected but the
listener is not invoked. 
> Looked at the code :
> in TreeView#itemsRemoved(), clearAndDecrementPaths() is invoked and returns 0. But Listeners
are only invoked when > 0 is returned. 
> see attached example comparing a TreeView to a ListView

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message