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 != {} : valid=0
106 return "ast-red-square"
109 # on traite ici le cas d include materiau
110 # print self.object.definition.nom
111 if self.object.fichier_ini != self.object.nom_mater :
112 return "ast-red-square"
115 return "ast-yellow-square"
117 def getLabelText(self):
118 """ Retourne 3 valeurs :
119 - le texte a afficher dans le noeud représentant l'item
120 - la fonte dans laquelle afficher ce texte
121 - la couleur du texte
123 return self.labeltext,None,None
124 #if self.object.isActif():
125 # None --> fonte et couleur par défaut
126 # return self.labeltext,None,None
128 # return self.labeltext, None, None #CS_pbruno todo
130 #def get_objet(self,name) :
131 # for v in self.object.mcListe:
132 # if v.nom == name : return v
135 # def getType_sd_prod(self):
137 # Retourne le nom du type du concept résultat de l'étape
139 # sd_prod=self.object.getType_produit()
141 # return sd_prod.__name__
145 def addItem(self,name,pos):
146 mcent = self._object.addEntite(name,pos)
150 def suppItem(self,item) :
151 # item : item du MOCLE de l'ETAPE a supprimer
152 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
153 itemobject=item.getObject()
154 if itemobject.isOblig() :
155 return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
156 if self.object.suppEntite(itemobject):
157 message = tr("Mot-clef %s supprime " , itemobject.nom)
160 return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
164 return self.object.getSdname()
170 # keys=self.object.mc_dict
173 def getSubList(self):
175 Reactualise la liste des items fils stockes dans self.sublist
178 liste=self.object.mcListe
182 sublist=[None]*len(liste)
183 # suppression des items lies aux objets disparus
184 for item in self.sublist:
185 old_obj=item.getObject()
187 pos=liste.index(old_obj)
190 pass # objets supprimes ignores
192 # ajout des items lies aux nouveaux objets
195 if sublist[pos] is None:
196 # nouvel objet : on cree un nouvel item
197 def setFunction(value, object=obj):
199 item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
207 return self.object.isValid()
209 def isCopiable(self):
211 Retourne 1 si l'objet est copiable, 0 sinon
215 def updateDeplace(self,item):
216 if item.sd and item.sd.nom:
217 self.object.sd=item.sd
218 self.object.sd.nom=item.sd.nom
220 def update(self,item):
221 if item.sd and item.sd.nom:
222 self.nommeSd(item.sd.nom)
224 def nommeSd(self,nom):
225 """ Lance la méthode de nommage de la SD """
227 if self.object.sd != None :
228 oldnom=self.object.sd.nom
229 test,mess= self.object.nommeSd(nom)
230 if test:self.object.parent.resetContext()
231 if (test and oldnom in self.appliEficas.dict_reels ):
232 self.appliEficas.dict_reels[nom]=self.appliEficas.dict_reels[oldnom]
235 def isReentrant(self):
236 return self.object.isReentrant()
238 def getNomsSdOperReentrant(self):
239 return self.object.getNomsSdOperReentrant()
241 def getObjetCommentarise(self):
243 Cette méthode retourne un objet commentarisé
244 représentatif de self.object
246 # Format de fichier utilisé
247 format=self.appliEficas.formatFichierIn
248 return self.object.getObjetCommentarise(format)
250 def getObjetCommentarise_BAK(self):
252 Cette méthode retourne un objet commentarisé
253 représentatif de self.object
255 import generator,Accas
256 # Format de fichier utilisé
257 format=self.appliEficas.format_fichier
258 g=generator.plugins[format]()
259 texte_commande = g.gener(self.object,format='beautifie')
260 # Il faut enlever la premiere ligne vide de texte_commande que
261 # rajoute le generator
262 rebut,texte_commande = texte_commande.split('\n',1)
263 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
264 # enregistré dans le jdc
265 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
266 parent=self.object.parent)
267 commande_comment.niveau = self.object.niveau
268 commande_comment.jdc = commande_comment.parent = self.object.jdc
270 pos=self.object.parent.etapes.index(self.object)
271 parent=self.object.parent
272 self.object.parent.suppEntite(self.object)
273 parent.addEntite(commande_comment,pos)
275 return commande_comment
279 treeitem = EtapeTreeItem