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 # ======================================================================
27 class MCLISTPanel(panels.Panel):
29 test_ajout = self.node.item.ajout_possible()
30 nom_mcfact = self.node.item.get_nom()
32 texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
34 texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
35 self.label = Label(self,text = texte)
36 self.label.place(relx=0.5,rely=0.4,anchor='center')
38 Button(self,text="AJOUTER",command=self.ajout_occurrence).place(relx=0.5,rely=0.6,anchor='center')
39 #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
41 def ajout_occurrence(self,event=None):
42 self.node.parent.append_child(self.node.item.get_nom())
47 class Node(treewidget.Node):
48 def doPaste(self,node_selected):
49 objet_a_copier = self.item.get_copie_objet()
50 child=node_selected.doPaste_MCF(objet_a_copier)
53 def doPaste_MCF(self,objet_a_copier):
54 if self.item.isMCList() :
55 # le noeud courant est une MCList
56 child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
57 elif self.item.isMCFact():
58 # le noeud courant est un MCFACT
59 if self.parent.item.isMCList():
60 # le noeud selectionne est un MCFACT dans une MCList
61 child = self.parent.append_child(objet_a_copier,
65 # le noeud MCFACT selectionne n'est pas dans une MCList
66 child = self.parent.append_child(objet_a_copier,retour='oui')
68 showinfo("Copie impossible",
69 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
70 self.appli.affiche_infos("Copie refusée")
74 def replace_enfant(self,item):
75 """ Retourne le noeud fils à éventuellement remplacer """
76 if self.item.isMCList():return None
77 return self.get_node_fils(item.get_nom())
79 def verif_condition(self):
80 if self.item.isMCList():
81 self.children[-1].verif_condition()
83 treewidget.Node.verif_condition(self)
85 def after_delete(self):
86 """ Dans le cas d'une MCList il faut vérifier qu'elle n'est pas vide
87 ou réduite à un seul élément suite à une destruction
89 # self représente une MCList
90 if len(self.item) == 0 :
91 # la liste est vide : il faut la supprimer
93 elif len(self.item) == 1:
94 # il ne reste plus qu'un élément dans la liste
95 noeud = self.children[0]
96 # maintenant l'item mclist gere tout seul ce
98 self.delete_node_child(noeud)
99 self.children=noeud.children or []
100 self.state=noeud.state
104 def delete_child(self,child):
106 Supprime child des enfants de self, tous les id associés
109 if self.item.isMCList():
110 if self.item.suppitem(child.item):
111 self.delete_node_child(child)
117 if self.item.suppitem(child.item):
118 self.delete_node_child(child)
124 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
125 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
126 du noyau Accas instances de la classe MCLIST.
127 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
128 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
129 Cette classe délègue les appels de méthode et les accès
130 aux attributs à l'objet du noyau soit manuellement soit
131 automatiquement (voir classe Delegate et attribut object).
136 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
137 # on utilise directement ce mot cle facteur comme delegue
138 self.updateDelegate()
140 def updateDelegate(self):
141 if len(self._object) > 1:
142 self.setdelegate(self._object)
144 self.setdelegate(self._object.data[0])
146 def panel(self,jdcdisplay,pane,node):
147 """ Retourne une instance de l'objet panneau associe a l'item (self)
148 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
150 Si la liste est plus longue on utilise le panneau MCLISTPanel.
152 if len(self._object) > 1:
153 return MCLISTPanel(jdcdisplay,pane,node)
155 return compofact.FACTPanel(jdcdisplay,pane,node)
157 def IsExpandable(self):
158 if len(self._object) > 1:
159 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
161 return compofact.FACTTreeItem.IsExpandable(self)
163 def GetSubList(self):
164 self.updateDelegate()
165 if len(self._object) > 1:
166 return Objecttreeitem.SequenceTreeItem.GetSubList(self)
168 return compofact.FACTTreeItem.GetSubList(self)
170 def GetIconName(self):
171 if self._object.isvalid():
172 return "ast-green-los"
173 elif self._object.isoblig():
179 """ Retourne la clé de doc de l'objet pointé par self """
180 return self.object.get_docu()
182 def iscopiable(self):
183 if len(self._object) > 1:
184 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
186 return compofact.FACTTreeItem.iscopiable(self)
190 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
192 return len(self._object) <= 1
196 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
198 return len(self._object) > 1
200 def additem(self,obj,pos):
202 Ajoute un objet MCFACT à la MCList (self.object) à la position pos
204 if len(self._object) <= 1:
205 return compofact.FACTTreeItem.additem(self,obj,pos)
207 if type(obj)==types.StringType :
208 # on est en mode création d'un motcle
209 raise "traitement non prevu"
211 if not self._object.ajout_possible():
214 if self._object.nom != obj.nom:
217 self.object.init_modif()
218 obj.verif_existence_sd()
219 obj.reparent(self.object.parent)
220 self.object.insert(pos,obj)
221 self.object.fin_modif()
223 item = self.make_objecttreeitem(self.appli, obj.nom + ":", obj)
226 def suppitem(self,item):
228 Retire un objet MCFACT de la MCList (self.object)
231 if len(self._object) <= 1:
232 return compofact.FACTTreeItem.suppitem(self,item)
234 self.object.init_modif()
235 self.object.remove(obj)
236 if len(self._object) == 1:
237 self.updateDelegate()
238 message = "Mot-clé " + obj.nom + " supprimé"
239 self.appli.affiche_infos(message)
245 def treeitem(appli,labeltext,object,setfunction):
246 """ Factory qui produit un objet treeitem adapte a un objet
247 Accas.MCList (attribut objet de ce module)
249 return MCListTreeItem(appli,labeltext,object,setfunction)