1 #-*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2021 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 from __future__ import absolute_import
22 from builtins import str
28 from Extensions.i18n import tr
29 from Extensions.eficas_exception import EficasException
31 from Editeur import Objecttreeitem
33 from . import typeNode
35 class Node(browser.JDCNode, typeNode.PopUpMenuNode):
39 browser.JDCNode.select(self)
40 self.treeParent.tree.openPersistentEditor(self,1)
41 self.monWidgetNom=self.treeParent.tree.itemWidget(self,1)
42 self.monWidgetNom.returnPressed.connect(self.nomme)
43 if self.item.getIconName() == "ast-red-square" : self.monWidgetNom.setDisabled(True)
44 #else : self.monWidgetNom.setFocus() ;self.monWidgetNom.setDisabled(False)
47 nom=str(self.monWidgetNom.text())
48 self.editor.initModif()
49 test,mess = self.item.nommeSd(nom)
51 self.editor.afficheInfos(mess,'red')
52 old=self.item.getText()
53 self.monWidgetNom.setText(old)
55 self.editor.afficheCommentaire(tr("Nommage du concept effectue"))
58 self.fenetre.LENom.setText(nom)
64 from .monWidgetCommande import MonWidgetCommande
65 return MonWidgetCommande(self,self.editor,self.item.object)
67 def createPopUpMenu(self):
68 typeNode.PopUpMenuNode.createPopUpMenu(self)
71 # from Editeur import TroisDPal
72 # troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
76 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
77 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
78 Accas. Elle leur permet d'etre affichés comme des noeuds
80 Cette classe a entre autres deux attributs importants :
81 - _object qui est un pointeur vers l'objet du noyau
82 - object qui pointe vers l'objet auquel sont délégués les
83 appels de méthode et les acces aux attributs
84 Dans le cas d'une ETAPE, _object et object pointent vers le
89 def isExpandable(self):
92 def getIconName(self):
94 Retourne le nom de l'icone a afficher dans l'arbre
95 Ce nom depend de la validite de l'objet
97 if not self.object.isActif():
98 return "ast-white-square"
99 elif self.object.isValid():
100 return "ast-green-square"
102 valid=self.validChild()
103 valid=valid * self.validRegles("non")
104 if self.reste_val != {}:
107 return "ast-red-square"
110 # on traite ici le cas d include materiau
111 # print self.object.definition.nom
112 if self.object.fichier_ini != self.object.nom_mater :
113 return "ast-red-square"
116 return "ast-yellow-square"
118 def getLabelText(self):
119 """ Retourne 3 valeurs :
120 - le texte a afficher dans le noeud représentant l'item
121 - la fonte dans laquelle afficher ce texte
122 - la couleur du texte
124 return self.labeltext,None,None
125 #if self.object.isActif():
126 # None --> fonte et couleur par défaut
127 # return self.labeltext,None,None
129 # return self.labeltext, None, None #CS_pbruno todo
131 #def get_objet(self,name) :
132 # for v in self.object.mcListe:
133 # if v.nom == name : return v
136 # def getType_sd_prod(self):
138 # Retourne le nom du type du concept résultat de l'étape
140 # sd_prod=self.object.getType_produit()
142 # return sd_prod.__name__
146 def addItem(self,name,pos):
147 mcent = self._object.addEntite(name,pos)
151 def suppItem(self,item) :
152 # item : item du MOCLE de l'ETAPE a supprimer
153 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
154 itemobject=item.getObject()
155 if itemobject.isOblig() :
156 return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
157 if self.object.suppEntite(itemobject):
158 message = tr("Mot-clef %s supprime " , itemobject.nom)
161 return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
165 return self.object.getSdname()
171 # keys=self.object.mc_dict
174 def getSubList(self):
176 Reactualise la liste des items fils stockes dans self.sublist
179 liste=self.object.mcListe
183 sublist=[None]*len(liste)
184 # suppression des items lies aux objets disparus
185 for item in self.sublist:
186 old_obj=item.getObject()
188 pos=liste.index(old_obj)
191 pass # objets supprimes ignores
193 # ajout des items lies aux nouveaux objets
196 if sublist[pos] is None:
197 # nouvel objet : on cree un nouvel item
198 def setFunction(value, object=obj):
200 item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
208 return self.object.isValid()
210 def isCopiable(self):
212 Retourne 1 si l'objet est copiable, 0 sinon
216 def updateDeplace(self,item):
217 if item.sd and item.sd.nom:
218 self.object.sd=item.sd
219 self.object.sd.nom=item.sd.nom
221 def update(self,item):
222 if item.sd and item.sd.nom:
223 self.nommeSd(item.sd.nom)
225 def nommeSd(self,nom):
226 """ Lance la méthode de nommage de la SD """
228 if self.object.sd != None :
229 oldnom=self.object.sd.nom
230 test,mess= self.object.nommeSd(nom)
231 if test:self.object.parent.resetContext()
232 if (test and oldnom in self.appliEficas.dict_reels ):
233 self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
236 def isReentrant(self):
237 return self.object.isReentrant()
239 def getNomsSdOperReentrant(self):
240 return self.object.getNomsSdOperReentrant()
242 def getObjetCommentarise(self):
244 Cette méthode retourne un objet commentarisé
245 représentatif de self.object
247 # Format de fichier utilisé
248 format=self.appliEficas.formatFichierIn
249 return self.object.getObjetCommentarise(format)
251 def getObjetCommentarise_BAK(self):
253 Cette méthode retourne un objet commentarisé
254 représentatif de self.object
256 import generator,Accas
257 # Format de fichier utilisé
258 format=self.appliEficas.format_fichier
259 g=generator.plugins[format]()
260 texte_commande = g.gener(self.object,format='beautifie')
261 # Il faut enlever la premiere ligne vide de texte_commande que
262 # rajoute le generator
263 rebut,texte_commande = texte_commande.split('\n',1)
264 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
265 # enregistré dans le jdc
266 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
267 parent=self.object.parent)
268 commande_comment.niveau = self.object.niveau
269 commande_comment.jdc = commande_comment.parent = self.object.jdc
271 pos=self.object.parent.etapes.index(self.object)
272 parent=self.object.parent
273 self.object.parent.suppEntite(self.object)
274 parent.addEntite(commande_comment,pos)
276 return commande_comment
280 treeitem = EtapeTreeItem