On 08/09/12 22:18, margrave wrote:
I am displaying a tree, and I need to show which item is selected.
Of course the simplistic solution is to
item.addStyleName("itemhighlighted") in the onTreeItemSelected(self.,
item):
And that works fine until another item is selected. Then both are
highlighted.
Hi, Michael!
Here is my test I used to try pyjs Tree, may be it will help.
Seva
--
# -*- coding: utf-8 -*-
import pyjd # this is dummy in pyjs.
from pyjamas.ui.Tree import Tree
from pyjamas.ui.TreeItem import TreeItem
from pyjamas.ui.CheckBox import CheckBox
from pyjamas.ui.RootPanel import RootPanel
from pyjamas.Timer import Timer
def setStyle( item, selected ):
item.setStyleName(item.itemTable, "gwt-TreeItemTable-selected", selected)
#print 'style for', item.getUserObject(), selected
def updateStyles( selectedItem ):
def updateItem( root ):
setStyle(root, root is selectedItem)
if not root.getState(): return # omit children for closed item
for idx in range(root.getChildCount()):
item = root.getChild(idx)
updateItem(item)
tree = selectedItem.getTree()
for idx in range(tree.getItemCount()):
root = tree.getItem(idx)
updateItem(root)
def closeAllExcept( root ):
parent = root.getParentItem()
#print 'closing', root.getUserObject(), root, parent
if parent:
for idx in range(parent.getChildCount()):
item = parent.getChild(idx)
if item is not root:
item.setState(False)
closeAllExcept(parent)
else: # root items
tree = root.getTree()
for idx in range(tree.getItemCount()):
item = tree.getItem(idx)
if item is not root:
item.setState(False)
class Listener:
def onTreeItemSelected(self, item):
p = item.getUserObject()
print 'onTreeItemSelected', p, `item.getHTML()`, `item.getText()`
item.setState(True) # open on select
closeAllExcept(item)
updateStyles(item)
def onTreeItemStateChanged( self, item ):
p = item.getUserObject()
print 'onTreeItemStateChanged', p, item.getState(), `item.getHTML()`, `item.getText()`
selected = item.getTree().getSelectedItem()
if selected:
updateStyles(selected)
def makeItems( parent, prefix, count, dept ):
if not dept: return
for i in range(count):
name = '%s%d' % (prefix, i)
item = TreeItem(name)
item.setUserObject(name)
parent.addItem(item)
makeItems(item, name + '-', count, dept - 1)
def main():
pyjd.setup("public/index.html")
root = RootPanel()
tree = Tree()
makeItems(tree, '', 3, 3)
root.add(tree)
tree.addTreeListener(Listener())
tree.setParent(None)
tree.setParent(root)
pyjd.run()
if __name__ == '__main__':
main()