1 # -*- coding: utf-8 -*-
10 from Editeur import Objecttreeitem
11 from Noyau.N_OBJECT import ErrorObj
15 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
19 if self.item.isMCList() :
20 if self.item.ajout_possible():
21 from monMCListAjoutPanel import MonMCListAjoutPanel
22 return MonMCListAjoutPanel(self,parent=self.editor)
25 elif self.item.isMCFact() :
26 from monMCFactPanel import MonMCFactPanel
27 return MonMCFactPanel(self,parent=self.editor)
31 def createPopUpMenu(self):
32 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
35 #def doPaste(self,node_selected):
36 # objet_a_copier = self.item.get_copie_objet()
37 # child=node_selected.doPasteMCF(objet_a_copier)
38 #print "doPaste",child
41 #def doPasteMCF(self,objet_a_copier):
43 # le noeud courant est une MCList
44 # if self.item.isMCList() :
45 # child = self.append_child(objet_a_copier,pos='first',retour='oui')
47 # le noeud courant est un MCFACT
48 # elif self.item.isMCFact() :
49 # le noeud selectionne est un MCFACT dans une MCList
50 # if self.parent.item.isMCList():
51 # child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
53 # le noeud MCFACT selectionne n'est pas dans une MCList
55 # child = self.parent.append_child(objet_a_copier,retour='oui')
58 # QMessageBox.information( self, "Copie impossible",
59 # "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
60 # self.editor.affiche_infos("Copie refusée")
64 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
65 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
66 du noyau Accas instances de la classe MCLIST.
67 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
68 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
69 Cette classe délègue les appels de méthode et les accès
70 aux attributs à l'objet du noyau soit manuellement soit
71 automatiquement (voir classe Delegate et attribut object).
76 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
77 # on utilise directement ce mot cle facteur comme delegue
80 def updateDelegate(self):
81 if len(self._object) > 1:
82 self.setdelegate(self._object)
84 self.setdelegate(self._object.data[0])
86 def panel(self,jdcdisplay,pane,node):
87 """ Retourne une instance de l'objet panneau associe a l'item (self)
88 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
90 Si la liste est plus longue on utilise le panneau MCLISTPanel.
92 if len(self._object) > 1:
93 return MCLISTPanel(jdcdisplay,pane,node)
94 elif isinstance(self._object.data[0],ErrorObj):
95 return compoerror.ERRORPanel(jdcdisplay,pane,node)
97 return compofact.FACTPanel(jdcdisplay,pane,node)
99 def IsExpandable(self):
100 if len(self._object) > 1:
101 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
103 return compofact.FACTTreeItem.IsExpandable(self)
105 def GetSubList(self):
106 self.updateDelegate()
107 if len(self._object) <= 1:
108 self._object.data[0].alt_parent=self._object
109 return compofact.FACTTreeItem.GetSubList(self)
111 liste=self._object.data
112 sublist=[None]*len(liste)
113 # suppression des items lies aux objets disparus
114 for item in self.sublist:
115 old_obj=item.getObject()
117 pos=liste.index(old_obj)
120 pass # objets supprimes ignores
121 # ajout des items lies aux nouveaux objets
124 if sublist[pos] is None:
125 # nouvel objet : on cree un nouvel item
126 def setfunction(value, object=obj):
128 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
130 #Attention : on ajoute une information supplementaire pour l'actualisation de
131 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
132 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
133 # informations de validite. alt_parent permet de remedier a ce defaut.
134 obj.alt_parent=self._object
140 def GetIconName(self):
141 if self._object.isvalid():
142 return "ast-green-los"
143 elif self._object.isoblig():
149 """ Retourne la clef de doc de l'objet pointé par self """
151 return self.object.get_docu()
153 def iscopiable(self):
154 if len(self._object) > 1:
155 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
157 return compofact.FACTTreeItem.iscopiable(self)
161 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
163 return len(self._object) <= 1
167 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
169 return len(self._object) > 1
171 def get_copie_objet(self):
172 return self._object.data[0].copy()
174 def additem(self,obj,pos):
175 #print "compomclist.additem",obj,pos
176 if len(self._object) <= 1:
177 return compofact.FACTTreeItem.additem(self,obj,pos)
179 o= self.object.addentite(obj,pos)
182 def suppitem(self,item):
184 Retire un objet MCFACT de la MCList (self.object)
186 #print "compomclist.suppitem",item
188 if len(self._object) <= 1:
189 return compofact.FACTTreeItem.suppitem(self,item)
191 if self.object.suppentite(obj):
192 if len(self._object) == 1: self.updateDelegate()
193 message = "Mot-clef " + obj.nom + " supprime"
194 self.appli.affiche_infos(message)
197 self.appli.affiche_infos('Impossible de supprimer ce mot-clef',Qt.red)
204 def treeitem(appli,labeltext,object,setfunction):
205 """ Factory qui produit un objet treeitem adapte a un objet
206 Accas.MCList (attribut objet de ce module)
208 return MCListTreeItem(appli,labeltext,object,setfunction)