1 # -*- coding: utf-8 -*-
8 from Editeur import Objecttreeitem
9 from Noyau.N_OBJECT import ErrorObj
13 class Node(browser.JDCNode):
17 if self.item.isMCList() :
18 if self.item.ajout_possible():
19 from monMCListAjoutPanel import MonMCListAjoutPanel
20 return MonMCListAjoutPanel(self,parent=self.editor)
23 elif self.item.isMCFact() :
24 from monMCFactPanel import MonMCFactPanel
25 return MonMCFactPanel(self,parent=self.editor)
29 def doPaste(self,node_selected):
30 objet_a_copier = self.item.get_copie_objet()
31 child=node_selected.doPasteMCF(objet_a_copier)
32 #print "doPaste",child
35 def doPasteMCF(self,objet_a_copier):
37 # le noeud courant est une MCList
38 if self.item.isMCList() :
39 child = self.append_child(objet_a_copier,pos='first',retour='oui')
41 # le noeud courant est un MCFACT
42 elif self.item.isMCFact() :
43 # le noeud selectionne est un MCFACT dans une MCList
44 if self.parent.item.isMCList():
45 child = self.parent.append_child(objet_a_copier,
49 # le noeud MCFACT selectionne n'est pas dans une MCList
51 child = self.parent.append_child(objet_a_copier,retour='oui')
54 QMessageBox.information( self, "Copie impossible",
55 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
56 self.editor.affiche_infos("Copie refusée")
60 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
61 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
62 du noyau Accas instances de la classe MCLIST.
63 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
64 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
65 Cette classe délègue les appels de méthode et les accès
66 aux attributs à l'objet du noyau soit manuellement soit
67 automatiquement (voir classe Delegate et attribut object).
72 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
73 # on utilise directement ce mot cle facteur comme delegue
76 def updateDelegate(self):
77 if len(self._object) > 1:
78 self.setdelegate(self._object)
80 self.setdelegate(self._object.data[0])
82 def panel(self,jdcdisplay,pane,node):
83 """ Retourne une instance de l'objet panneau associe a l'item (self)
84 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
86 Si la liste est plus longue on utilise le panneau MCLISTPanel.
88 if len(self._object) > 1:
89 return MCLISTPanel(jdcdisplay,pane,node)
90 elif isinstance(self._object.data[0],ErrorObj):
91 return compoerror.ERRORPanel(jdcdisplay,pane,node)
93 return compofact.FACTPanel(jdcdisplay,pane,node)
95 def IsExpandable(self):
96 if len(self._object) > 1:
97 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
99 return compofact.FACTTreeItem.IsExpandable(self)
101 def GetSubList(self):
102 self.updateDelegate()
103 if len(self._object) <= 1:
104 self._object.data[0].alt_parent=self._object
105 return compofact.FACTTreeItem.GetSubList(self)
107 liste=self._object.data
108 sublist=[None]*len(liste)
109 # suppression des items lies aux objets disparus
110 for item in self.sublist:
111 old_obj=item.getObject()
113 pos=liste.index(old_obj)
116 pass # objets supprimes ignores
117 # ajout des items lies aux nouveaux objets
120 if sublist[pos] is None:
121 # nouvel objet : on cree un nouvel item
122 def setfunction(value, object=obj):
124 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
126 #Attention : on ajoute une information supplementaire pour l'actualisation de
127 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
128 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
129 # informations de validite. alt_parent permet de remedier a ce defaut.
130 obj.alt_parent=self._object
136 def GetIconName(self):
137 if self._object.isvalid():
138 return "ast-green-los"
139 elif self._object.isoblig():
145 """ Retourne la clef de doc de l'objet pointé par self """
146 return self.object.get_docu()
148 def iscopiable(self):
149 if len(self._object) > 1:
150 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
152 return compofact.FACTTreeItem.iscopiable(self)
156 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
158 return len(self._object) <= 1
162 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
164 return len(self._object) > 1
166 def get_copie_objet(self):
167 return self._object.data[0].copy()
169 def additem(self,obj,pos):
170 #print "compomclist.additem",obj,pos
171 if len(self._object) <= 1:
172 return compofact.FACTTreeItem.additem(self,obj,pos)
174 o= self.object.addentite(obj,pos)
177 def suppitem(self,item):
179 Retire un objet MCFACT de la MCList (self.object)
181 #print "compomclist.suppitem",item
183 if len(self._object) <= 1:
184 return compofact.FACTTreeItem.suppitem(self,item)
186 if self.object.suppentite(obj):
187 if len(self._object) == 1: self.updateDelegate()
188 message = "Mot-clef " + obj.nom + " supprimé"
189 self.appli.affiche_infos(message)
192 self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
199 def treeitem(appli,labeltext,object,setfunction):
200 """ Factory qui produit un objet treeitem adapte a un objet
201 Accas.MCList (attribut objet de ce module)
203 return MCListTreeItem(appli,labeltext,object,setfunction)