]> SALOME platform Git repositories - modules/yacs.git/blobdiff - src/pyqt/gui/Tree.py
Salome HOME
merge from branch DEV tag mergeto_trunk_04apr08
[modules/yacs.git] / src / pyqt / gui / Tree.py
index cbd1bf20e46f4c6972742ba3f21cab50f3af78ed..3e2b2a9ec96e5ac7882f93971f853312047ffb82 100644 (file)
@@ -7,12 +7,13 @@
 import sys
 from qt import *
 import Icons
+import CONNECTOR
 
 class Tree(QListView):
   """Tree(parent=None)
      Classe pour faire une vue d'un arbre
   """
-  def __init__(self,parent=None,onSelect=None):
+  def __init__(self,parent=None,onSelect=None,onDblSelect=None):
     QListView.__init__(self,parent)
     self.setCaption("Tree")
     self.setRootIsDecorated(1)
@@ -21,18 +22,54 @@ class Tree(QListView):
     self.children=[]
     self.last=None
     self.onSelect=onSelect
+    self.onDblSelect=onDblSelect
     self.connect(self,SIGNAL('selectionChanged(QListViewItem *)'),
                      self.handleSelected)
+    self.connect(self,SIGNAL('doubleClicked(QListViewItem *, const QPoint &, int)'),
+                     self.handleDblSelected)
 
   def handleSelected(self,node):
-    if self.onSelect:self.onSelect(node.item)
+    node.item.selected()
+    if self.onSelect:
+      self.onSelect(node.item)
+
+  def handleDblSelected(self,node,point,col):
+    node.item.dblselected()
+    if self.onDblSelect:
+      self.onDblSelect(node.item)
 
   def additem(self,item):
     node=Node(self,item.label,item,self.last)
     self.last=node
     self.children.append(node)
+    CONNECTOR.Connect(item,"selected",self.selectItem,())
+    CONNECTOR.Connect(item,"add",node.addNode,())
     return node
 
+  def selectNodeItem(self,item,node):
+    #print "selectNodeItem",node,item
+    self.setSelected(node,True)
+
+  def selectItem(self,item):
+    #print "selectItem",item
+    node=self.selectedItem()
+    if node.item is item:
+      #print "item has been selected at item level"
+      return
+
+    #print "item has not been selected at item level"
+    #try another way
+    #find its father ???
+    it = QListViewItemIterator(self)
+    node = it.current()
+    while node:
+      if node.item is item:
+        break
+      it += 1
+      node = it.current()
+
+    if node:
+      self.setSelected(node,True)
 
 class Node(QListViewItem):
   """Node(parent,text,item,after)
@@ -48,15 +85,40 @@ class Node(QListViewItem):
     self.setExpandable(self.item.isExpandable())
     self.children = []
 
+  def selectNode(self,item):
+    self.listView().setSelected(self,True)
+
+  def addNode(self,item):
+    #print "Tree.addNode",item
+    self.additem(item)
+
+  def delNode(self,node):
+    #print "Tree.delNode",node,node.item
+    CONNECTOR.Disconnect(node.item,"selected",node.selectNode,())
+    CONNECTOR.Disconnect(node.item,"add",node.addNode,())
+    CONNECTOR.Disconnect(node.item,"remove",self.delNode,(node,))
+    self.takeItem(node)
+    self.children.remove(node)
+
   def additem(self,item):
     if self.children:
       node=Node(self,item.label,item,self.children[-1])
     else:
       node=Node(self,item.label,item)
     self.children.append(node)
+    #CONNECTOR.Connect(item,"selected",self.listView().selectNodeItem,(node,))
+    CONNECTOR.Connect(item,"selected",node.selectNode,())
+    CONNECTOR.Connect(item,"add",node.addNode,())
+    CONNECTOR.Connect(item,"remove",self.delNode,(node,))
     return node
 
   def setOpen(self,o):
+    if o and not self.childCount():
+      for child in self.item.getChildren():
+        self.additem(child)
+    QListViewItem.setOpen(self,o)
+
+  def setOpen_old(self,o):
     if o:
       #open
       for child in self.item.getChildren():
@@ -64,6 +126,9 @@ class Node(QListViewItem):
     else:
       #close
       for node in self.children:
+        #CONNECTOR.Disconnect(node.item,"selected",self.listView().selectNodeItem,(node,))
+        CONNECTOR.Disconnect(node.item,"selected",node.selectNode,())
+        CONNECTOR.Disconnect(node.item,"add",node.addNode,())
         self.takeItem(node)
         del node
       self.children=[]