1 # -*- coding: utf-8 -*-
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
21 import string,types,os,re,sys
23 from determine import monEnvQT5
25 from PyQt5.QtWidgets import QMessageBox, QFileDialog
26 from PyQt5.QtGui import QIcon
27 from PyQt5.QtCore import QFileInfo, Qt, QSize
30 from PyQt4.QtGui import *
31 from PyQt4.QtCore import *
34 from Extensions.i18n import tr
35 listeSuffixe=('bmp','png','jpg' ,'txt','med')
38 class FacultatifOuOptionnel:
40 def setReglesEtAide(self):
43 listeRegles = self.node.item.get_regles()
46 if hasattr(self,"RBRegle"):
47 if listeRegles==() : self.RBRegle.close()
49 icon3=QIcon(self.repIcon+"/lettreRblanc30.png")
50 self.RBRegle.setIcon(icon3)
51 if monEnvQT5 :self.RBRegle.clicked.connect(self.viewRegles)
52 else : self.connect( self.RBRegle,SIGNAL("clicked()"),self.viewRegles)
55 if not hasattr(self,"RBInfo"):return
56 icon=QIcon(self.repIcon+"/point-interrogation30.png")
57 self.RBInfo.setIcon(icon)
59 from monWidgetCommande import MonWidgetCommande
60 if isinstance(self,MonWidgetCommande) and self.editor.code =="MAP":
61 self.cle_doc = self.chercheDocMAP()
63 self.cle_doc = self.node.item.get_docu()
64 if self.cle_doc == None : self.RBInfo.close()
65 elif monEnvQT5 : self.RBInfo.clicked.connect (self.viewDoc)
66 else : self.connect (self.RBInfo,SIGNAL("clicked()"),self.viewDoc)
69 def chercheDocMAP(self):
71 clef=self.editor.CONFIGURATION.adresse+"/"
74 for k in self.editor.readercata.cata[0].JdC.dict_groupes.keys():
75 if self.obj.nom in self.editor.readercata.cata[0].JdC.dict_groupes[k]:
78 clef+="/"+ self.obj.nom[0:-5].lower()+"/spec_"+self.obj.nom[0:-5].lower()+".html"
84 if sys.platform[0:5]=="linux" : cmd="xdg-open "+self.cle_doc
85 else : cmd="start "+self.cle_doc
88 QMessageBox.warning( self,tr( "Aide Indisponible"),tr( "l'aide n est pas installee "))
91 self.node.AppelleBuildLBRegles()
94 def setIconePoubelle(self):
95 if not(hasattr(self,"RBPoubelle")):return
96 if self.node.item.object.isoblig() :
97 icon=QIcon(self.repIcon+"/deleteRondVide.png")
98 self.RBPoubelle.setIcon(icon)
100 icon=QIcon(self.repIcon+"/deleteRond.png")
101 self.RBPoubelle.setIcon(icon)
102 if monEnvQT5 : self.RBPoubelle.clicked.connect(self.aDetruire)
103 else : self.connect(self.RBPoubelle,SIGNAL("clicked()"),self.aDetruire)
105 def setIconesSalome(self):
106 if not (hasattr(self,"RBSalome")): return
107 from Accas import SalomeEntry
108 mc = self.node.item.get_definition()
110 enable_salome_selection = self.editor.salome and \
111 (('grma' in repr(mctype)) or ('grno' in repr(mctype)) or ('SalomeEntry' in repr(mctype)) or \
112 (hasattr(mctype, "enable_salome_selection") and mctype.enable_salome_selection))
114 if enable_salome_selection:
115 icon=QIcon(self.repIcon+"/flecheSalome.png")
116 self.RBSalome.setIcon(icon)
117 if monEnvQT5 : self.RBSalome.pressed.connect(self.BSalomePressed)
118 else : self.connect(self.RBSalome,SIGNAL("pressed()"),self.BSalomePressed)
120 #PNPN --> Telemac A revoir surement
121 # cela ou le catalogue grpma ou salomeEntry
122 if not(('grma' in repr(mctype)) or ('grno' in repr(mctype))) or not(self.editor.salome):
123 if hasattr(self,"RBSalomeVue") : self.RBSalomeVue.close()
125 icon1=QIcon(self.repIcon+"/eye.png")
126 self.RBSalomeVue.setIcon(icon1)
127 if monEnvQT5 : self.RBSalomeVue.clicked.connect(self.BView2DPressed)
128 else : self.connect(self.RBSalomeVue,SIGNAL("clicked()"),self.BView2DPressed)
130 self.RBSalome.close()
131 self.RBSalomeVue.close()
134 def setIconesFichier(self):
135 if not ( hasattr(self,"BFichier")): return
136 mc = self.node.item.get_definition()
138 if mctype == "Repertoire":
139 self.BRepertoire=self.BFichier
140 if monEnvQT5 : self.BRepertoire.clicked.connect(self.BRepertoirePressed)
141 else : self.connect(self.BRepertoire,SIGNAL("clicked()"),self.BRepertoirePressed)
142 self.BVisuFichier.close()
144 if monEnvQT5 : self.BFichier.clicked.connect(self.BFichierPressed)
145 else : self.connect(self.BFichier,SIGNAL("clicked()"),self.BFichierPressed)
146 if monEnvQT5 : self.BVisuFichier.clicked.connect(self.BFichierVisu)
147 else : self.connect(self.BVisuFichier,SIGNAL("clicked()"),self.BFichierVisu)
151 def setIconesGenerales(self):
152 repIcon=self.node.editor.appliEficas.repIcon
153 if hasattr(self,"BVisuListe") :
154 fichier=os.path.join(repIcon, 'plusnode.png')
155 icon = QIcon(fichier)
156 self.BVisuListe.setIcon(icon)
157 if hasattr(self,"RBDeplie") :
158 fichier=os.path.join(repIcon, 'plusnode.png')
159 icon = QIcon(fichier)
160 self.RBDeplie.setIcon(icon)
161 if hasattr(self,"RBPlie") :
162 fichier=os.path.join(repIcon, 'minusnode.png')
163 icon = QIcon(fichier)
164 self.RBPlie.setIcon(icon)
169 if hasattr(self.editor.appliEficas, 'mesScripts'):
170 if hasattr(self.editor,'tree') and self.editor.tree.currentItem().item.get_nom() in self.appliEficas.mesScripts.dict_commandes.keys() :
171 print 'il faut programmer le self.ajoutScript()'
174 if hasattr(self,"RBRun"): self.RBRun.close()
181 #print " c est le moment de gerer le passage au suivant"
182 if not(hasattr (self,'RBValide')) : return
184 if self.node.item.object.isvalid() :
185 icon=QIcon(self.repIcon+"/ast-green-ball.png")
187 icon=QIcon(self.repIcon+"/ast-red-ball.png")
188 self.RBValide.setIcon(icon)
190 # il faut chercher la bonne fenetre
191 def rendVisible(self):
192 #print "je passe par rendVisible de FacultatifOuOptionnel"
194 #print self.node.fenetre
195 #print "return pour etre sure"
198 newNode=self.node.treeParent.chercheNoeudCorrespondant(self.node.item.object)
200 self.editor.fenetreCentraleAffichee.scrollAreaCommandes.ensureWidgetVisible(newNode.fenetre)
201 #newNode.fenetre.setFocus()
204 class ContientIcones:
206 def BFichierVisu(self):
207 fichier=self.lineEditVal.text()
208 if fichier == None or str(fichier)=="" : return
209 from monViewTexte import ViewText
211 if sys.platform[0:5]=="linux" :
212 cmd="xdg-open "+ str(fichier)
215 os.startfile(str(fichier))
220 nomFichier=QFileInfo(fichier).baseName()
221 maVue=ViewText(self,entete=nomFichier)
226 QMessageBox.warning( None,
227 tr("Visualisation Fichier "),
228 tr("Impossibilite d'afficher le Fichier"),)
230 def BFichierPressed(self):
231 mctype = self.node.item.get_definition().type
234 elif hasattr(mctype[0], "filters"):
235 filters = mctype[0].filters
238 if len(mctype) > 2 and mctype[2] == "Sauvegarde":
239 fichier = QFileDialog.getSaveFileName(self.appliEficas,
240 tr('Sauvegarder Fichier'),
241 self.appliEficas.CONFIGURATION.savedir,
244 fichier = QFileDialog.getOpenFileName(self.appliEficas,
245 tr('Ouvrir Fichier'),
246 self.appliEficas.CONFIGURATION.savedir,
249 if monEnvQT5 : fichier=fichier[0]
251 ulfile = os.path.abspath(unicode(fichier))
252 self.appliEficas.CONFIGURATION.savedir=os.path.split(ulfile)[0]
253 self.lineEditVal.setText(fichier)
254 self.editor.affiche_commentaire(tr("Fichier selectionne"))
255 self.LEValeurPressed()
256 if (QFileInfo(fichier).suffix() in listeSuffixe ):
258 if (not hasattr(self,"BSelectInFile")):
259 self.BSelectInFile = QPushButton(self.Widget8)
260 self.BSelectInFile.setMinimumSize(QSize(140,40))
261 self.BSelectInFile.setObjectName("BSelectInFile")
262 self.gridLayout.addWidget(self.BSelectInFile,1,1,1,1)
263 self.BSelectInFile.setText(tr("Selection"))
264 if monEnvQT5 : self.BSelectInFile.clicked.connect(self.BSelectInFilePressed)
265 else : self.connect(self.BSelectInFile,SIGNAL("clicked()"),self.BSelectInFilePressed)
267 self.BSelectInFile.setVisible(1)
268 elif hasattr(self, "BSelectInFile"):
269 self.BSelectInFile.setVisible(0)
271 def BRepertoirePressed(self):
272 directory = QFileDialog.getExistingDirectory(self.appliEficas,
273 directory = self.appliEficas.CONFIGURATION.savedir,
274 options = QFileDialog.ShowDirsOnly)
276 if not directory.isNull():
277 absdir = os.path.abspath(unicode(directory))
278 self.appliEficas.CONFIGURATION.savedir = os.path.dirname(absdir)
279 self.lineEditVal.setText(directory)
280 self.LEValeurPressed()
282 def BSelectInFilePressed(self):
283 from monSelectImage import MonSelectImage
284 MonSelectImage(file=self.image,parent=self).show()
288 def BSalomePressed(self):
289 self.editor.affiche_commentaire(QString(""))
292 genea=self.node.item.get_genealogie()
293 kwType = self.node.item.get_definition().type[0]
295 if "GROUP_NO" in e: kwType = "GROUP_NO"
296 if "GROUP_MA" in e: kwType = "GROUP_MA"
298 if 'grno' in repr(kwType): kwType = "GROUP_NO"
299 if 'grma' in repr(kwType): kwType = "GROUP_NO"
301 if kwType in ("GROUP_NO","GROUP_MA"):
302 selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
304 mc = self.node.item.get_definition()
306 if (isinstance(mc.type,types.TupleType) and len(mc.type) > 1 and "(*.med)" in mc.type[1] ):
307 selection, commentaire = self.appliEficas.selectMeshFile(editor=self.editor)
308 print selection, commentaire
309 if commentaire != "" :
310 QMessageBox.warning( None,
311 tr("Export Med vers Fichier "),
312 tr("Impossibilite d exporter le Fichier"),)
315 self.lineEditVal.setText(QString(selection))
318 from Accas import SalomeEntry
319 if isinstance(kwType, types.ClassType) and issubclass(kwType, SalomeEntry):
320 selection, commentaire = self.appliEficas.selectEntryFromSalome(kwType,editor=self.editor)
322 if commentaire !="" :
323 self.editor.affiche_infos(QString(tr(str(commentaire))))
325 if selection == [] : return
326 for geomElt in selection:
328 monTexte= monTexte[0:-1]
329 self.lineEditVal.setText(QString(monTexte))
330 self.LEValeurPressed()
332 def BView2DPressed(self):
333 valeur=self.lineEditVal.text()
335 if valeur == str("") : return
337 ok, msgError = self.appliEficas.displayShape(valeur)
339 self.editor.affiche_infos(msgError,Qt.red)
341 def BParametresPressed(self):
342 liste=self.node.item.get_liste_param_possible()
343 from monListeParamPanel import MonListeParamPanel
344 MonListeParamPanel(liste=liste,parent=self).show()