1 # -*- coding: utf-8 -*-
2 # CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002 EDF R&D WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 # 1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
20 # ======================================================================
28 class MCLISTPanel(panels.Panel):
30 test_ajout = self.node.item.ajout_possible()
31 nom_mcfact = self.node.item.get_nom()
33 texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
35 texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
36 self.label = Label(self,text = texte)
37 self.label.place(relx=0.5,rely=0.4,anchor='center')
39 self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence)
40 self.but.place(relx=0.5,rely=0.6,anchor='center')
41 #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
43 def ajout_occurrence(self,event=None):
44 self.node.parent.append_child(self.node.item.get_nom())
48 class Node(treewidget.Node):
49 def doPaste(self,node_selected):
50 objet_a_copier = self.item.get_copie_objet()
51 child=node_selected.doPaste_MCF(objet_a_copier)
52 #print "doPaste",child
55 def doPaste_MCF(self,objet_a_copier):
56 if self.item.isMCList() :
57 # le noeud courant est une MCList
58 child = self.append_child(objet_a_copier,pos='first',retour='oui')
59 #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
60 elif self.item.isMCFact() :
61 # le noeud courant est un MCFACT
62 if self.parent.item.isMCList():
63 # le noeud selectionne est un MCFACT dans une MCList
64 child = self.parent.append_child(objet_a_copier,
68 # le noeud MCFACT selectionne n'est pas dans une MCList
69 child = self.parent.append_child(objet_a_copier,retour='oui')
71 showinfo("Copie impossible",
72 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
73 self.appli.affiche_infos("Copie refusée")
75 #print "doPaste_MCF",child
78 def replace_enfant(self,item):
79 """ Retourne le noeud fils à éventuellement remplacer """
81 if self.item.isMCList():return None
82 return self.get_node_fils(item.get_nom())
84 def verif_condition(self):
86 if self.item.isMCList():
87 self.children[-1].verif_condition()
89 treewidget.Node.verif_condition(self)
91 def after_delete(self):
92 """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
93 ou réduite à un seul élément suite à une destruction
96 # self représente une MCList
97 if len(self.item) == 0 :
98 # la liste est vide : il faut la supprimer
100 elif len(self.item) == 1:
101 # il ne reste plus qu'un élément dans la liste
102 noeud = self.children[0]
103 # maintenant l'item mclist gere tout seul ce
105 self.delete_node_child(noeud)
106 self.children=noeud.children or []
107 self.state=noeud.state
111 def delete_child(self,child):
113 Supprime child des enfants de self, tous les id associés
117 if self.item.isMCList():
118 if self.item.suppitem(child.item):
119 self.delete_node_child(child)
125 if self.item.suppitem(child.item):
126 self.delete_node_child(child)
132 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
133 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
134 du noyau Accas instances de la classe MCLIST.
135 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
136 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
137 Cette classe délègue les appels de méthode et les accès
138 aux attributs à l'objet du noyau soit manuellement soit
139 automatiquement (voir classe Delegate et attribut object).
144 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
145 # on utilise directement ce mot cle facteur comme delegue
146 self.updateDelegate()
148 def updateDelegate(self):
149 if len(self._object) > 1:
150 self.setdelegate(self._object)
152 self.setdelegate(self._object.data[0])
154 def panel(self,jdcdisplay,pane,node):
155 """ Retourne une instance de l'objet panneau associe a l'item (self)
156 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
158 Si la liste est plus longue on utilise le panneau MCLISTPanel.
160 if len(self._object) > 1:
161 return MCLISTPanel(jdcdisplay,pane,node)
163 return compofact.FACTPanel(jdcdisplay,pane,node)
165 def IsExpandable(self):
166 if len(self._object) > 1:
167 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
169 return compofact.FACTTreeItem.IsExpandable(self)
171 def GetSubList(self):
172 self.updateDelegate()
173 if len(self._object) <= 1:
174 self._object.data[0].alt_parent=self._object
175 return compofact.FACTTreeItem.GetSubList(self)
177 liste=self._object.data
178 sublist=[None]*len(liste)
179 # suppression des items lies aux objets disparus
180 for item in self.sublist:
181 old_obj=item.getObject()
183 pos=liste.index(old_obj)
186 pass # objets supprimes ignores
187 # ajout des items lies aux nouveaux objets
190 if sublist[pos] is None:
191 # nouvel objet : on cree un nouvel item
192 def setfunction(value, object=obj):
194 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
196 #Attention : on ajoute une information supplementaire pour l'actualisation de
197 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
198 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
199 # informations de validite. alt_parent permet de remedier a ce defaut.
200 obj.alt_parent=self._object
206 def GetIconName(self):
207 if self._object.isvalid():
208 return "ast-green-los"
209 elif self._object.isoblig():
215 """ Retourne la clé de doc de l'objet pointé par self """
216 return self.object.get_docu()
218 def iscopiable(self):
219 if len(self._object) > 1:
220 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
222 return compofact.FACTTreeItem.iscopiable(self)
226 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
228 return len(self._object) <= 1
232 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
234 return len(self._object) > 1
236 def get_copie_objet(self):
237 return self._object.data[0].copy()
239 def additem(self,obj,pos):
240 #print "compomclist.additem",obj,pos
241 if len(self._object) <= 1:
242 return compofact.FACTTreeItem.additem(self,obj,pos)
244 o= self.object.addentite(obj,pos)
247 def suppitem(self,item):
249 Retire un objet MCFACT de la MCList (self.object)
251 #print "compomclist.suppitem",item
253 if len(self._object) <= 1:
254 return compofact.FACTTreeItem.suppitem(self,item)
256 if self.object.suppentite(obj):
257 if len(self._object) == 1: self.updateDelegate()
258 message = "Mot-clé " + obj.nom + " supprimé"
259 self.appli.affiche_infos(message)
262 self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
269 def treeitem(appli,labeltext,object,setfunction):
270 """ Factory qui produit un objet treeitem adapte a un objet
271 Accas.MCList (attribut objet de ce module)
273 return MCListTreeItem(appli,labeltext,object,setfunction)