Salome HOME
copy tag mergefrom_BR_V0_1_CC_Salome_04oct07
[modules/yacs.git] / src / pyqt / gui / Tree.py
1 # -*- coding: iso-8859-15 -*-
2 """Ce module permet de créer des vues sous forme d'arbre
3    Ces vues sont construites à partir des informations
4    fournies par un modèle
5 """
6
7 import sys
8 from qt import *
9 import Icons
10
11 class Tree(QListView):
12   """Tree(parent=None)
13      Classe pour faire une vue d'un arbre
14   """
15   def __init__(self,parent=None,onSelect=None):
16     QListView.__init__(self,parent)
17     self.setCaption("Tree")
18     self.setRootIsDecorated(1)
19     self.setSorting(-1)
20     self.addColumn("Name")
21     self.children=[]
22     self.last=None
23     self.onSelect=onSelect
24     self.connect(self,SIGNAL('selectionChanged(QListViewItem *)'),
25                      self.handleSelected)
26
27   def handleSelected(self,node):
28     if self.onSelect:self.onSelect(node.item)
29
30   def additem(self,item):
31     node=Node(self,item.label,item,self.last)
32     self.last=node
33     self.children.append(node)
34     return node
35
36
37 class Node(QListViewItem):
38   """Node(parent,text,item,after)
39        Classe pour faire une vue d'un noeud d'un arbre
40   """
41   def __init__(self,parent,text,item,after=None):
42     if after is None:
43       QListViewItem.__init__(self,parent,text)
44     else:
45       QListViewItem.__init__(self,parent,after,text)
46     self.item=item
47     self.setPixmap(0,Icons.get_image(item.getIconName()))
48     self.setExpandable(self.item.isExpandable())
49     self.children = []
50
51   def additem(self,item):
52     if self.children:
53       node=Node(self,item.label,item,self.children[-1])
54     else:
55       node=Node(self,item.label,item)
56     self.children.append(node)
57     return node
58
59   def setOpen(self,o):
60     if o:
61       #open
62       for child in self.item.getChildren():
63         self.additem(child)
64     else:
65       #close
66       for node in self.children:
67         self.takeItem(node)
68         del node
69       self.children=[]
70     QListViewItem.setOpen(self,o)
71        
72
73 if __name__ == "__main__":
74   from Item import Item
75   app = QApplication(sys.argv)
76   t=Tree()
77   t.additem(Item("item1"))
78   #n=t.additem(Item("item2"))
79   #n.additem(Item("item3"))
80   app.setMainWidget(t)
81   t.show()
82   app.exec_loop()
83