1 #-*- coding: iso-8859-1 -*-
2 # Copyright (C) 2007-2013 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
22 from determine import monEnvQT5
24 from PyQt5.QtWidgets import QMessageBox, QAction, QApplication
25 from PyQt5.QtGui import QCursor
26 from PyQt5.QtCore import Qt
28 from PyQt4.QtGui import *
29 from PyQt4.QtCore import *
31 from Extensions.i18n import tr
32 from Extensions.eficas_exception import EficasException
34 from Editeur import Objecttreeitem
38 class Node(browser.JDCNode, typeNode.PopUpMenuNode):
42 browser.JDCNode.select(self)
43 #self.treeParent.tree.openPersistentEditor(self,1)
44 #self.monWidgetNom=self.treeParent.tree.itemWidget(self,1)
45 #self.treeParent.tree.connect(self.monWidgetNom,SIGNAL("returnPressed()"), self.nomme)
46 #if self.item.GetIconName() == "ast-red-square" : self.monWidgetNom.setDisabled(True)
47 #else : self.monWidgetNom.setFocus() ;self.monWidgetNom.setDisabled(False)
50 nom=str(self.monWidgetNom.text())
51 self.editor.init_modif()
52 test,mess = self.item.nomme_sd(nom)
54 self.editor.affiche_infos(mess,Qt.red)
55 old=self.item.GetText()
56 self.monWidgetNom.setText(old)
58 self.editor.affiche_commentaire(tr("Nommage du concept effectue"))
61 self.editor.panel.LENomConcept.setText(nom)
67 from monWidgetCommande import MonWidgetCommande
68 return MonWidgetCommande(self,self.editor,self.item.object)
70 def createPopUpMenu(self):
71 typeNode.PopUpMenuNode.createPopUpMenu(self)
72 if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome:
73 self.ViewElt = QAction(tr('View3D'),self.tree)
74 self.tree.connect(self.ViewElt,SIGNAL("triggered()"),self.view3D)
75 self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
76 self.menu.addAction(self.ViewElt)
77 if self.item.isvalid() :
78 self.ViewElt.setEnabled(1)
80 self.ViewElt.setEnabled(0)
81 if self.item.get_nom() == "DISTRIBUTION" :
82 self.Graphe = QAction(tr('Graphique'),self.tree)
83 if monEnvQT5 : self.Graphe.triggered.connect(self.viewPng)
84 else : self.tree.connect(self.Graphe,SIGNAL("triggered()"),self.viewPng)
85 self.Graphe.setStatusTip(tr("affiche la distribution "))
86 self.menu.addAction(self.Graphe)
87 if self.item.isvalid() :
88 self.Graphe.setEnabled(1)
90 self.Graphe.setEnabled(0)
93 from Editeur import TroisDPal
94 troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
98 from monPixmap import MonLabelPixmap
101 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
102 g = generator.plugins[self.appliEficas.format_fichier]()
103 g.gener(self.item.object, format='beautifie')
104 stdGener = g.getGenerateur()
105 loi = g.dictMCLois.keys()[0]
106 nomLoi = loi.get_name()
107 (fd, fichier) = tempfile.mkstemp(prefix = "openturns_graph_", suffix = ".png")
109 chemin = os.path.dirname(fichier)
110 base = os.path.splitext(os.path.basename(fichier))[0]
111 script = stdGener.GraphiquePDF(loi, chemin, base)
115 widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
117 QApplication.restoreOverrideCursor()
120 QApplication.restoreOverrideCursor()
123 tr("Erreur interne"),
124 tr("La PDF de la loi ne peut pas etre affichee."),
127 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
128 """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
129 Accas. Elle leur permet d'etre affichés comme des noeuds
130 d'un arbre graphique.
131 Cette classe a entre autres deux attributs importants :
132 - _object qui est un pointeur vers l'objet du noyau
133 - object qui pointe vers l'objet auquel sont délégués les
134 appels de méthode et les acces aux attributs
135 Dans le cas d'une ETAPE, _object et object pointent vers le
140 def IsExpandable(self):
143 def GetIconName(self):
145 Retourne le nom de l'icone a afficher dans l'arbre
146 Ce nom depend de la validite de l'objet
148 if not self.object.isactif():
149 return "ast-white-square"
150 elif self.object.isvalid():
151 return "ast-green-square"
153 valid=self.valid_child()
154 valid=valid * self.valid_regles("non")
155 if self.reste_val != {}:
158 return "ast-red-square"
161 # on traite ici le cas d include materiau
162 # print self.object.definition.nom
163 if self.object.fichier_ini != self.object.nom_mater :
164 return "ast-red-square"
167 return "ast-yellow-square"
169 def GetLabelText(self):
170 """ Retourne 3 valeurs :
171 - le texte a afficher dans le noeud représentant l'item
172 - la fonte dans laquelle afficher ce texte
173 - la couleur du texte
175 return self.labeltext,None,None
176 #if self.object.isactif():
177 # None --> fonte et couleur par défaut
178 # return self.labeltext,None,None
180 # return self.labeltext, None, None #CS_pbruno todo
182 def get_objet(self,name) :
183 for v in self.object.mc_liste:
184 if v.nom == name : return v
187 def get_type_sd_prod(self):
189 Retourne le nom du type du concept résultat de l'étape
191 sd_prod=self.object.get_type_produit()
193 return sd_prod.__name__
197 def additem(self,name,pos):
198 mcent = self._object.addentite(name,pos)
202 def suppitem(self,item) :
203 # item : item du MOCLE de l'ETAPE a supprimer
204 # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList
205 itemobject=item.getObject()
206 if itemobject.isoblig() :
207 #self.editor.affiche_infos(tr('Impossible de supprimer un mot-clef obligatoire '),Qt.red)
208 return (0,tr('Impossible de supprimer un mot-clef obligatoire '))
209 if self.object.suppentite(itemobject):
210 message = tr("Mot-clef %s supprime " , itemobject.nom)
211 #self.editor.affiche_commentaire(message)
214 #self.editor.affiche_commentaire(tr('Pb interne : impossible de supprimer ce mot-clef'),Qt.red)
215 return (0,tr('Pb interne : impossible de supprimer ce mot-clef'))
219 return self.object.get_sdname()
224 keys=self.object.mc_dict.keys()
227 def GetSubList(self):
229 Reactualise la liste des items fils stockes dans self.sublist
232 liste=self.object.mc_liste
236 sublist=[None]*len(liste)
237 # suppression des items lies aux objets disparus
238 for item in self.sublist:
239 old_obj=item.getObject()
241 pos=liste.index(old_obj)
244 pass # objets supprimes ignores
246 # ajout des items lies aux nouveaux objets
249 if sublist[pos] is None:
250 # nouvel objet : on cree un nouvel item
251 def setfunction(value, object=obj):
253 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
261 return self.object.isvalid()
263 def iscopiable(self):
265 Retourne 1 si l'objet est copiable, 0 sinon
269 def updateDeplace(self,item):
270 if item.sd and item.sd.nom:
271 self.object.sd=item.sd
272 self.object.sd.nom=item.sd.nom
274 def update(self,item):
275 if item.sd and item.sd.nom:
276 self.nomme_sd(item.sd.nom)
278 def nomme_sd(self,nom):
279 """ Lance la méthode de nommage de la SD """
281 if self.object.sd != None :
282 oldnom=self.object.sd.nom
283 test,mess= self.object.nomme_sd(nom)
284 if test:self.object.parent.reset_context()
285 if (test and self.appli.dict_reels.has_key(oldnom) ):
286 self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
289 def is_reentrant(self):
290 return self.object.is_reentrant()
292 def get_noms_sd_oper_reentrant(self):
293 return self.object.get_noms_sd_oper_reentrant()
295 def get_objet_commentarise(self):
297 Cette méthode retourne un objet commentarisé
298 représentatif de self.object
300 # Format de fichier utilisé
301 format=self.appli.appliEficas.format_fichier
302 return self.object.get_objet_commentarise(format)
304 def get_objet_commentarise_BAK(self):
306 Cette méthode retourne un objet commentarisé
307 représentatif de self.object
309 import generator,string,Accas
310 # Format de fichier utilisé
311 format=self.appli.appliEficas.format_fichier
312 g=generator.plugins[format]()
313 texte_commande = g.gener(self.object,format='beautifie')
314 # Il faut enlever la premiere ligne vide de texte_commande que
315 # rajoute le generator
316 rebut,texte_commande = string.split(texte_commande,'\n',1)
317 # on construit l'objet COMMANDE_COMM repésentatif de self mais non
318 # enregistré dans le jdc
319 commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
320 parent=self.object.parent)
321 commande_comment.niveau = self.object.niveau
322 commande_comment.jdc = commande_comment.parent = self.object.jdc
324 pos=self.object.parent.etapes.index(self.object)
325 parent=self.object.parent
326 self.object.parent.suppentite(self.object)
327 parent.addentite(commande_comment,pos)
329 return commande_comment
333 treeitem = EtapeTreeItem