1 # -*- coding: utf-8 -*-
10 from Editeur import Objecttreeitem
11 from Noyau.N_OBJECT import ErrorObj
15 class Node(browser.JDCNode):
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 doPaste(self,node_selected):
32 objet_a_copier = self.item.get_copie_objet()
33 child=node_selected.doPasteMCF(objet_a_copier)
34 #print "doPaste",child
37 def doPasteMCF(self,objet_a_copier):
39 # le noeud courant est une MCList
40 if self.item.isMCList() :
41 child = self.append_child(objet_a_copier,pos='first',retour='oui')
43 # le noeud courant est un MCFACT
44 elif self.item.isMCFact() :
45 # le noeud selectionne est un MCFACT dans une MCList
46 if self.parent.item.isMCList():
47 child = self.parent.append_child(objet_a_copier,
51 # le noeud MCFACT selectionne n'est pas dans une MCList
53 child = self.parent.append_child(objet_a_copier,retour='oui')
56 QMessageBox.information( self, "Copie impossible",
57 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
58 self.editor.affiche_infos("Copie refusée")
62 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
63 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
64 du noyau Accas instances de la classe MCLIST.
65 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
66 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
67 Cette classe délègue les appels de méthode et les accès
68 aux attributs à l'objet du noyau soit manuellement soit
69 automatiquement (voir classe Delegate et attribut object).
74 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
75 # on utilise directement ce mot cle facteur comme delegue
78 def updateDelegate(self):
79 if len(self._object) > 1:
80 self.setdelegate(self._object)
82 self.setdelegate(self._object.data[0])
84 def panel(self,jdcdisplay,pane,node):
85 """ Retourne une instance de l'objet panneau associe a l'item (self)
86 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
88 Si la liste est plus longue on utilise le panneau MCLISTPanel.
90 if len(self._object) > 1:
91 return MCLISTPanel(jdcdisplay,pane,node)
92 elif isinstance(self._object.data[0],ErrorObj):
93 return compoerror.ERRORPanel(jdcdisplay,pane,node)
95 return compofact.FACTPanel(jdcdisplay,pane,node)
97 def IsExpandable(self):
98 if len(self._object) > 1:
99 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
101 return compofact.FACTTreeItem.IsExpandable(self)
103 def GetSubList(self):
104 self.updateDelegate()
105 if len(self._object) <= 1:
106 self._object.data[0].alt_parent=self._object
107 return compofact.FACTTreeItem.GetSubList(self)
109 liste=self._object.data
110 sublist=[None]*len(liste)
111 # suppression des items lies aux objets disparus
112 for item in self.sublist:
113 old_obj=item.getObject()
115 pos=liste.index(old_obj)
118 pass # objets supprimes ignores
119 # ajout des items lies aux nouveaux objets
122 if sublist[pos] is None:
123 # nouvel objet : on cree un nouvel item
124 def setfunction(value, object=obj):
126 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
128 #Attention : on ajoute une information supplementaire pour l'actualisation de
129 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
130 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
131 # informations de validite. alt_parent permet de remedier a ce defaut.
132 obj.alt_parent=self._object
138 def GetIconName(self):
139 if self._object.isvalid():
140 return "ast-green-los"
141 elif self._object.isoblig():
147 """ Retourne la clef de doc de l'objet pointé par self """
148 return self.object.get_docu()
150 def iscopiable(self):
151 if len(self._object) > 1:
152 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
154 return compofact.FACTTreeItem.iscopiable(self)
158 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
160 return len(self._object) <= 1
164 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
166 return len(self._object) > 1
168 def get_copie_objet(self):
169 return self._object.data[0].copy()
171 def additem(self,obj,pos):
172 #print "compomclist.additem",obj,pos
173 if len(self._object) <= 1:
174 return compofact.FACTTreeItem.additem(self,obj,pos)
176 o= self.object.addentite(obj,pos)
179 def suppitem(self,item):
181 Retire un objet MCFACT de la MCList (self.object)
183 #print "compomclist.suppitem",item
185 if len(self._object) <= 1:
186 return compofact.FACTTreeItem.suppitem(self,item)
188 if self.object.suppentite(obj):
189 if len(self._object) == 1: self.updateDelegate()
190 message = "Mot-clef " + obj.nom + " supprimé"
191 self.appli.affiche_infos(message)
194 self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
201 def treeitem(appli,labeltext,object,setfunction):
202 """ Factory qui produit un objet treeitem adapte a un objet
203 Accas.MCList (attribut objet de ce module)
205 return MCListTreeItem(appli,labeltext,object,setfunction)