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 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
79 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
80 du noyau Accas instances de la classe MCLIST.
81 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
82 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
83 Cette classe délègue les appels de méthode et les accès
84 aux attributs à l'objet du noyau soit manuellement soit
85 automatiquement (voir classe Delegate et attribut object).
90 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
91 # on utilise directement ce mot cle facteur comme delegue
94 def updateDelegate(self):
95 if len(self._object) > 1:
96 self.setdelegate(self._object)
98 self.setdelegate(self._object.data[0])
100 def panel(self,jdcdisplay,pane,node):
101 """ Retourne une instance de l'objet panneau associe a l'item (self)
102 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
104 Si la liste est plus longue on utilise le panneau MCLISTPanel.
106 if len(self._object) > 1:
107 return MCLISTPanel(jdcdisplay,pane,node)
109 return compofact.FACTPanel(jdcdisplay,pane,node)
111 def IsExpandable(self):
112 if len(self._object) > 1:
113 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
115 return compofact.FACTTreeItem.IsExpandable(self)
117 def GetSubList(self):
118 self.updateDelegate()
119 if len(self._object) <= 1:
120 self._object.data[0].alt_parent=self._object
121 return compofact.FACTTreeItem.GetSubList(self)
123 liste=self._object.data
124 sublist=[None]*len(liste)
125 # suppression des items lies aux objets disparus
126 for item in self.sublist:
127 old_obj=item.getObject()
129 pos=liste.index(old_obj)
132 pass # objets supprimes ignores
133 # ajout des items lies aux nouveaux objets
136 if sublist[pos] is None:
137 # nouvel objet : on cree un nouvel item
138 def setfunction(value, object=obj):
140 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
142 #Attention : on ajoute une information supplementaire pour l'actualisation de
143 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
144 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
145 # informations de validite. alt_parent permet de remedier a ce defaut.
146 obj.alt_parent=self._object
152 def GetIconName(self):
153 if self._object.isvalid():
154 return "ast-green-los"
155 elif self._object.isoblig():
161 """ Retourne la clé de doc de l'objet pointé par self """
162 return self.object.get_docu()
164 def iscopiable(self):
165 if len(self._object) > 1:
166 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
168 return compofact.FACTTreeItem.iscopiable(self)
172 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
174 return len(self._object) <= 1
178 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
180 return len(self._object) > 1
182 def get_copie_objet(self):
183 return self._object.data[0].copy()
185 def additem(self,obj,pos):
186 #print "compomclist.additem",obj,pos
187 if len(self._object) <= 1:
188 return compofact.FACTTreeItem.additem(self,obj,pos)
190 o= self.object.addentite(obj,pos)
193 def suppitem(self,item):
195 Retire un objet MCFACT de la MCList (self.object)
197 #print "compomclist.suppitem",item
199 if len(self._object) <= 1:
200 return compofact.FACTTreeItem.suppitem(self,item)
202 if self.object.suppentite(obj):
203 if len(self._object) == 1: self.updateDelegate()
204 message = "Mot-clé " + obj.nom + " supprimé"
205 self.appli.affiche_infos(message)
208 self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
215 def treeitem(appli,labeltext,object,setfunction):
216 """ Factory qui produit un objet treeitem adapte a un objet
217 Accas.MCList (attribut objet de ce module)
219 return MCListTreeItem(appli,labeltext,object,setfunction)