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 # ======================================================================
25 from Noyau.N_OBJECT import ErrorObj
26 from Editeur import Objecttreeitem
30 class MCLISTPanel(panels.Panel):
32 test_ajout = self.node.item.ajout_possible()
33 nom_mcfact = self.node.item.get_nom()
35 texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
37 texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
38 self.label = Label(self,text = texte)
39 self.label.place(relx=0.5,rely=0.4,anchor='center')
41 self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence)
42 self.but.place(relx=0.5,rely=0.6,anchor='center')
43 #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
45 def ajout_occurrence(self,event=None):
46 self.node.parent.append_child(self.node.item.get_nom())
52 class Node(treewidget.Node):
53 def doPaste(self,node_selected):
54 objet_a_copier = self.item.get_copie_objet()
55 child=node_selected.doPaste_MCF(objet_a_copier)
56 #print "doPaste",child
59 def doPaste_MCF(self,objet_a_copier):
60 if self.item.isMCList() :
61 # le noeud courant est une MCList
62 child = self.append_child(objet_a_copier,pos='first',retour='oui')
63 #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
64 elif self.item.isMCFact() :
65 # le noeud courant est un MCFACT
66 if self.parent.item.isMCList():
67 # le noeud selectionne est un MCFACT dans une MCList
68 child = self.parent.append_child(objet_a_copier,
72 # le noeud MCFACT selectionne n'est pas dans une MCList
73 child = self.parent.append_child(objet_a_copier,retour='oui')
75 showinfo("Copie impossible",
76 "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
77 self.appli.affiche_infos("Copie refusée")
79 #print "doPaste_MCF",child
82 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
83 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
84 du noyau Accas instances de la classe MCLIST.
85 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
86 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
87 Cette classe délègue les appels de méthode et les accès
88 aux attributs à l'objet du noyau soit manuellement soit
89 automatiquement (voir classe Delegate et attribut object).
94 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
95 # on utilise directement ce mot cle facteur comme delegue
98 def updateDelegate(self):
99 if len(self._object) > 1:
100 self.setdelegate(self._object)
102 self.setdelegate(self._object.data[0])
104 def panel(self,jdcdisplay,pane,node):
105 """ Retourne une instance de l'objet panneau associe a l'item (self)
106 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
108 Si la liste est plus longue on utilise le panneau MCLISTPanel.
110 if len(self._object) > 1:
111 return MCLISTPanel(jdcdisplay,pane,node)
112 elif isinstance(self._object.data[0],ErrorObj):
113 return compoerror.ERRORPanel(jdcdisplay,pane,node)
115 return compofact.FACTPanel(jdcdisplay,pane,node)
117 def IsExpandable(self):
118 if len(self._object) > 1:
119 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
121 return compofact.FACTTreeItem.IsExpandable(self)
123 def GetSubList(self):
124 self.updateDelegate()
125 if len(self._object) <= 1:
126 self._object.data[0].alt_parent=self._object
127 return compofact.FACTTreeItem.GetSubList(self)
129 liste=self._object.data
130 sublist=[None]*len(liste)
131 # suppression des items lies aux objets disparus
132 for item in self.sublist:
133 old_obj=item.getObject()
135 pos=liste.index(old_obj)
138 pass # objets supprimes ignores
139 # ajout des items lies aux nouveaux objets
142 if sublist[pos] is None:
143 # nouvel objet : on cree un nouvel item
144 def setfunction(value, object=obj):
146 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
148 #Attention : on ajoute une information supplementaire pour l'actualisation de
149 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
150 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
151 # informations de validite. alt_parent permet de remedier a ce defaut.
152 obj.alt_parent=self._object
158 def GetIconName(self):
159 if self._object.isvalid():
160 return "ast-green-los"
161 elif self._object.isoblig():
167 """ Retourne la clé de doc de l'objet pointé par self """
168 return self.object.get_docu()
170 def iscopiable(self):
171 if len(self._object) > 1:
172 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
174 return compofact.FACTTreeItem.iscopiable(self)
178 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
180 return len(self._object) <= 1
184 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
186 return len(self._object) > 1
188 def get_copie_objet(self):
189 return self._object.data[0].copy()
191 def additem(self,obj,pos):
192 #print "compomclist.additem",obj,pos
193 if len(self._object) <= 1:
194 return compofact.FACTTreeItem.additem(self,obj,pos)
196 o= self.object.addentite(obj,pos)
199 def suppitem(self,item):
201 Retire un objet MCFACT de la MCList (self.object)
203 #print "compomclist.suppitem",item
205 if len(self._object) <= 1:
206 return compofact.FACTTreeItem.suppitem(self,item)
208 if self.object.suppentite(obj):
209 if len(self._object) == 1: self.updateDelegate()
210 message = "Mot-clef " + obj.nom + " supprime"
211 self.appli.affiche_infos(message)
214 self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
221 def treeitem(appli,labeltext,object,setfunction):
222 """ Factory qui produit un objet treeitem adapte a un objet
223 Accas.MCList (attribut objet de ce module)
225 return MCListTreeItem(appli,labeltext,object,setfunction)