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,
55 # le noeud MCFACT selectionne n'est pas dans une MCList
57 child = self.parent.append_child(objet_a_copier,retour='oui')
60 QMessageBox.information( self, "Copie impossible",
61 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
62 self.editor.affiche_infos("Copie refusée")
66 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
67 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
68 du noyau Accas instances de la classe MCLIST.
69 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
70 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
71 Cette classe délègue les appels de méthode et les accès
72 aux attributs à l'objet du noyau soit manuellement soit
73 automatiquement (voir classe Delegate et attribut object).
78 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
79 # on utilise directement ce mot cle facteur comme delegue
82 def updateDelegate(self):
83 if len(self._object) > 1:
84 self.setdelegate(self._object)
86 self.setdelegate(self._object.data[0])
88 def panel(self,jdcdisplay,pane,node):
89 """ Retourne une instance de l'objet panneau associe a l'item (self)
90 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
92 Si la liste est plus longue on utilise le panneau MCLISTPanel.
94 if len(self._object) > 1:
95 return MCLISTPanel(jdcdisplay,pane,node)
96 elif isinstance(self._object.data[0],ErrorObj):
97 return compoerror.ERRORPanel(jdcdisplay,pane,node)
99 return compofact.FACTPanel(jdcdisplay,pane,node)
101 def IsExpandable(self):
102 if len(self._object) > 1:
103 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
105 return compofact.FACTTreeItem.IsExpandable(self)
107 def GetSubList(self):
108 self.updateDelegate()
109 if len(self._object) <= 1:
110 self._object.data[0].alt_parent=self._object
111 return compofact.FACTTreeItem.GetSubList(self)
113 liste=self._object.data
114 sublist=[None]*len(liste)
115 # suppression des items lies aux objets disparus
116 for item in self.sublist:
117 old_obj=item.getObject()
119 pos=liste.index(old_obj)
122 pass # objets supprimes ignores
123 # ajout des items lies aux nouveaux objets
126 if sublist[pos] is None:
127 # nouvel objet : on cree un nouvel item
128 def setfunction(value, object=obj):
130 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
132 #Attention : on ajoute une information supplementaire pour l'actualisation de
133 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
134 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
135 # informations de validite. alt_parent permet de remedier a ce defaut.
136 obj.alt_parent=self._object
142 def GetIconName(self):
143 if self._object.isvalid():
144 return "ast-green-los"
145 elif self._object.isoblig():
151 """ Retourne la clef de doc de l'objet pointé par self """
152 return self.object.get_docu()
154 def iscopiable(self):
155 if len(self._object) > 1:
156 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
158 return compofact.FACTTreeItem.iscopiable(self)
162 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
164 return len(self._object) <= 1
168 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
170 return len(self._object) > 1
172 def get_copie_objet(self):
173 return self._object.data[0].copy()
175 def additem(self,obj,pos):
176 #print "compomclist.additem",obj,pos
177 if len(self._object) <= 1:
178 return compofact.FACTTreeItem.additem(self,obj,pos)
180 o= self.object.addentite(obj,pos)
183 def suppitem(self,item):
185 Retire un objet MCFACT de la MCList (self.object)
187 #print "compomclist.suppitem",item
189 if len(self._object) <= 1:
190 return compofact.FACTTreeItem.suppitem(self,item)
192 if self.object.suppentite(obj):
193 if len(self._object) == 1: self.updateDelegate()
194 message = "Mot-clef " + obj.nom + " supprimé"
195 self.appli.affiche_infos(message)
198 self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
205 def treeitem(appli,labeltext,object,setfunction):
206 """ Factory qui produit un objet treeitem adapte a un objet
207 Accas.MCList (attribut objet de ce module)
209 return MCListTreeItem(appli,labeltext,object,setfunction)