From: pascale.noyret Date: Fri, 10 Jun 2016 15:23:00 +0000 (+0200) Subject: sauve du 10/06 X-Git-Tag: V8_1_0p0~25 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e57a61fe25c3abf804095d8027afe0dc788877a0;p=modules%2Feficas.git sauve du 10/06 --- diff --git a/Extensions/localisation.py b/Extensions/localisation.py index 0de1f72e..c5d8bff5 100644 --- a/Extensions/localisation.py +++ b/Extensions/localisation.py @@ -30,7 +30,7 @@ else : qt_translator = QTranslator() eficas_translator = QTranslator() -def localise(application, locale=None ): +def localise(application, locale=None,file=None ): """ localise(QApplication) -> None @@ -74,8 +74,16 @@ def localise(application, locale=None ): # print "Unable to load Qt base translator!" global eficas_translator + print locale if locale=="ang" : locale="en" #print "eficas_" + locale, monPath + if file != None : + print 'chagrement de ', file,monPath + print eficas_translator.load(file,monPath) + print QApplication.installTranslator(eficas_translator) + return + + if eficas_translator.load("eficas_" + locale, monPath): QApplication.installTranslator(eficas_translator) print "chargement eficas_", locale, monPath diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 18ed98ff..71eca1b1 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -95,7 +95,7 @@ class MCSIMP(I_OBJECT.OBJECT): if self.jdc.appli.appliEficas.dict_reels[clefobj].has_key(self.valeur): txt=self.jdc.appli.appliEficas.dict_reels[clefobj][self.valeur] elif type(self.valeur) in (types.ListType,types.TupleType) : - if self.valeur==[]: return str(self.valeur) + if self.valeur==[] or self.valeur == (): return str(self.valeur) # Traitement des listes txt='(' sep='' diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 720c6060..3732351f 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -144,7 +144,6 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): #if maDefinition.into != [] and maDefinition.into != None: # Attention pas fini --> on attend une liste de ASSD avec ordre if self.item.wait_assd() and self.item.is_list_SansOrdreNiDoublon(): - #print 1 from monWidgetPlusieursInto import MonWidgetPlusieursInto widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif self.item.wait_assd() : @@ -152,11 +151,9 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): widget=MonWidgetPlusieursASSDIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif self.item.wait_tuple() : if self.item.object.definition.type[0].ntuple == 2: - #print 3 from monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2 widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif self.item.object.definition.type[0].ntuple == 3 : - #print 4 from monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3 widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande) else : @@ -164,7 +161,10 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): print "Prevenir la maintenance " elif self.item.has_into(): if self.item.is_list_SansOrdreNiDoublon(): - #print 6 + print 6 + print self.editor.listeDesListesOuvertes + print self.item in self.editor.listeDesListesOuvertes + print self.editor.afficheListesPliees if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) : from monWidgetPlusieursInto import MonWidgetPlusieursInto widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande) @@ -172,7 +172,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): from monWidgetPlusieursPlie import MonWidgetPlusieursPlie widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande) else : - #print 7 + print 7 # tres vite pour le tag mais devra etre gere dans configuration if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) : from monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne @@ -181,7 +181,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): from monWidgetPlusieursPlie import MonWidgetPlusieursPlie widget=MonWidgetPlusieursPlie(self,maDefinition,monNom,monObjet,parentQt,maCommande) else : - #print 8 + print 8 if self.item in self.editor.listeDesListesOuvertes or not(self.editor.afficheListesPliees) : from monWidgetPlusieursBase import MonWidgetPlusieursBase widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande) diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index b1d54b7e..5516ae55 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -1255,7 +1255,26 @@ class JDCEditor(Ui_baseWidget,QWidget): etape.build_includeInclude(texte) self.tree.racine.build_children() - + def ajoutMC(self,etape,MCFils,valeurs): + print etape.nom + #print etape,MCFils,valeurs + print dir(etape) + #print 'etape' , etape + #print MCFils.valeur + #print MCFils.val + print etape.liste_mc_presents() + monMC= etape.addentite('TransfosList') + #print etape.append_child + #monMC=etape.append_child('TransfosList','last') + print etape.liste_mc_presents() + # Attention ne pas faire de setValeurs + monMC.valeur=valeurs + monMC.val=valeurs + print monMC.val + #print MCFils.valeur + #print MCFils.val + print etape.liste_mc_presents() + print "________" #-------------------------------------# diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py old mode 100644 new mode 100755 index b89b25a0..3d8e098d --- a/InterfaceQT4/eficas_go.py +++ b/InterfaceQT4/eficas_go.py @@ -49,7 +49,7 @@ def lance_eficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'): from qtEficas import Appli from Extensions import localisation app = QApplication(sys.argv) - #localisation.localise(app,langue) + localisation.localise(app,langue) Eficas=Appli(code=code,ssCode=ssCode,multi=multi,langue=langue) Eficas.show() diff --git a/InterfaceQT4/feuille.py b/InterfaceQT4/feuille.py index 961c4195..d7d564f3 100644 --- a/InterfaceQT4/feuille.py +++ b/InterfaceQT4/feuille.py @@ -83,10 +83,10 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): def setNom(self): self.debutToolTip="" - print "kkkkkkkkkkkkkkkkkk" - print self.objSimp.nom + #print "kkkkkkkkkkkkkkkkkk" + #print self.objSimp.nom nomTraduit=tr(self.objSimp.nom) - print nomTraduit + #print nomTraduit #if len(nomTraduit) >= nomMax : # nom=nomTraduit[0:nomMax]+'...' # self.label.setText(nomTraduit) @@ -126,7 +126,10 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): if mc.min == mc.max: commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")+'\n' else : - commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")+'\n' + if mc.max != "**" : + commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")+'\n' + else : + commentaire="" else : if mc.min == mc.max: commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])+'\n' @@ -199,7 +202,7 @@ class Feuille(QWidget,ContientIcones,SaisieValeur,FacultatifOuOptionnel): #self.editor.affiche_infos(info) def reaffiche(self): - #print "dans reaffiche de feuille", self.nom + print "dans reaffiche de feuille", self.nom if self.editor.jdc.aReafficher==True : self.parentQt.reaffiche() diff --git a/InterfaceQT4/gereIcones.py b/InterfaceQT4/gereIcones.py index 36d63a85..80316865 100644 --- a/InterfaceQT4/gereIcones.py +++ b/InterfaceQT4/gereIcones.py @@ -22,9 +22,9 @@ import string,types,os,re,sys import traceback from determine import monEnvQT5 if monEnvQT5 : - from PyQt5.QtWidgets import QMessageBox, QFileDialog + from PyQt5.QtWidgets import QMessageBox, QFileDialog , QMenu from PyQt5.QtGui import QIcon - from PyQt5.QtCore import QFileInfo, Qt, QSize + from PyQt5.QtCore import QFileInfo, Qt, QSize, QVariant else: from PyQt4.QtGui import * @@ -168,10 +168,10 @@ class FacultatifOuOptionnel: def setRun(self): if hasattr(self.editor.appliEficas, 'mesScripts'): if hasattr(self.editor,'tree') and self.editor.tree.currentItem().item.get_nom() in self.appliEficas.mesScripts.dict_commandes.keys() : - print 'il faut programmer le self.ajoutScript()' - print '#PNPNPNPN' + self.ajoutScript() return if hasattr(self,"RBRun"): self.RBRun.close() + if hasattr(self,"CBScripts"): self.CBScripts.close() def aDetruire(self): @@ -201,6 +201,55 @@ class FacultatifOuOptionnel: #newNode.fenetre.setFocus() + def ajoutScript(self): + # cochon mais je n arrive pas a faire mieux avec le mecanisme de plugin + listeCommandes=self.appliEficas.mesScripts.dict_commandes[self.node.item.get_nom()] + if type(listeCommandes) != types.TupleType: listeCommandes=(listeCommandes,) + numero=-1 + for commande in listeCommandes : + numero+=1 + conditionSalome=commande[3] + if (self.appliEficas.salome == 0 and conditionSalome == True): continue + self.CBScripts.addItem(commande[1]) + #self.CBScripts.addItem(commande[1],QVariant((numero))) + return + if 1 : + label=commande[1] + tip=commande[5] + self.action=QAction(label,self.tree) + self.action.setStatusTip(tip) + if monEnvQT5 : + if numero==4: + self.action.triggered.connect(self.AppelleFonction4) + if numero==3: + self.action.triggered.connect(self.AppelleFonction3) + numero=4 + if numero==2: + self.action.triggered.connect(self.AppelleFonction2) + numero=3 + if numero==1: + self.action.triggered.connect(self.AppelleFonction1) + numero=2 + if numero==0: + self.action.triggered.connect(self.AppelleFonction0) + numero=1 + else: + if numero==4: + self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction4) + if numero==3: + self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction3) + numero=4 + if numero==2: + self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction2) + numero=3 + if numero==1: + self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction1) + numero=2 + if numero==0: + self.tree.connect(self.action,SIGNAL("triggered()"),self.AppelleFonction0) + numero=1 + self.menu.addAction(self.action) + class ContientIcones: def BFichierVisu(self): diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index 640dc907..3c5e585c 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -283,6 +283,7 @@ class GerePlie: def gereIconePlier(self): if not(hasattr(self,'BFermeListe')) : return + self.editor.listeDesListesOuvertes.add(self.node.item) repIcon=self.node.editor.appliEficas.repIcon if not (self.editor.afficheListesPliees): fichier=os.path.join(repIcon, 'empty.png') diff --git a/InterfaceQT4/monChoixCode.py b/InterfaceQT4/monChoixCode.py index 34ef7c28..45babb13 100644 --- a/InterfaceQT4/monChoixCode.py +++ b/InterfaceQT4/monChoixCode.py @@ -60,7 +60,7 @@ class MonChoixCode(Ui_ChoixCode,QDialog): def verifieInstall(self): self.groupCodes=QButtonGroup(self.groupBox) vars=os.environ.items() - listeCode=('Aster','Adao','Carmel3D','CarmelCND','CF','MAP','MT','PSEN','Telemac','ZCracks',) + listeCode=('Aster','Adao','Carmel3D','CarmelCND','CF','MAP','MT','PSEN','PSEN_N1','Telemac','ZCracks',) i=1 for code in listeCode: nom='rB_'+code diff --git a/InterfaceQT4/monSelectVal.py b/InterfaceQT4/monSelectVal.py index b4a32be6..4fc9f223 100644 --- a/InterfaceQT4/monSelectVal.py +++ b/InterfaceQT4/monSelectVal.py @@ -21,8 +21,8 @@ # Modules Eficas from desSelectVal import Ui_DSelVal +from determine import monEnvQT5 -fromm determine import monEnvQT5 if monEnvQT5: from PyQt5.QtWidgets import QDialog from PyQt5.QtCore import QTimer @@ -51,7 +51,8 @@ class MonSelectVal(DSelVal): self.file=str(file) self.readVal() self.initVal() - self.connecterSignaux() + if monEnvQT5: self.connecterSignaux() + else : self.connecterSignauxQT4() def connecterSignaux(self) : self.Bespace.clicked.connect(self.SelectEsp) @@ -59,7 +60,7 @@ class MonSelectVal(DSelVal): self.Bvirgule.clicked.connect(self.SelectVir) self.BImportSel.clicked.connect(self.BImportSelPressed) self.BImportTout.clicked.connect(self.BImportToutPressed) - self.parent.editor.sb.messageChanged(self.messageAChanger) + self.parent.editor.sb.messageChanged.connect(self.messageAChanger) def connecterSignauxQT4(self) : self.connect(self.Bespace,SIGNAL("clicked()"),self.SelectEsp) diff --git a/InterfaceQT4/monSelectValPSEN.py b/InterfaceQT4/monSelectValPSEN.py new file mode 100644 index 00000000..01130fc2 --- /dev/null +++ b/InterfaceQT4/monSelectValPSEN.py @@ -0,0 +1,40 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2007-2013 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Modules Python +# Modules Eficas + +from monSelectVal import MonSelectVal + +class MonSelectValPSEN(MonSelectVal): + """ + Classe definissant le panel associe aux mots-cles qui demandent + a l'utilisateur de choisir une seule valeur parmi une liste de valeurs + discretes + """ + def __init__(self,file,parent,name = None,fl = 0): + self.MonSelectVal.__init__(file,parent,name = None,fl = 0): + + def Traitement(self): + print "kkkkkkkkkkkkkkkkkkkllllllllllllllllll" + liste1=self.textTraite.split(self.separateur) + print liste1 + #self.parent.ajoutNValeur(liste) + + diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index 5d4cc30c..9e0868c0 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -62,11 +62,6 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): maPolice= QFont("Times", 10,) self.setFont(maPolice) - print 'jjjjjjjjjjjjjjjjjjjjjjjjj' - print self.obj.nom - print tr(self.obj.nom) - print tr("TITLE") - print 'jjjjjjjjjjjjjjjjjjjjjjjjj' self.labelNomCommande.setText(tr(self.obj.nom)) self.commandesLayout.addStretch() diff --git a/InterfaceQT4/monWidgetPlusieursInto.py b/InterfaceQT4/monWidgetPlusieursInto.py index 25c11595..c3c01fb9 100644 --- a/InterfaceQT4/monWidgetPlusieursInto.py +++ b/InterfaceQT4/monWidgetPlusieursInto.py @@ -23,8 +23,9 @@ import string,types,os # Modules Eficas from determine import monEnvQT5 if monEnvQT5: - from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication - from PyQt5.QtGui import QPalette + from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel + from PyQt5.QtWidgets import QSizePolicy,QSpacerItem + from PyQt5.QtGui import QPalette, QFont from PyQt5.QtCore import Qt else : from PyQt4.QtGui import * @@ -46,7 +47,6 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) self.index=1 self.alpha=0 self.listeCB=[] - self.toto=0 self.listeCbRouge=[] self.listeValeursCourantes=node.item.GetListeValeurs() if self.listeValeursCourantes == None : self.listeValeursCourantes=[] @@ -59,9 +59,21 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) else : self.connect(self.CBCheck, SIGNAL('stateChanged(int)'),self.changeTout) self.gereIconePlier() + self.editor.listeDesListesOuvertes.add(self.node.item) self.inhibe=False self.finCommentaireListe() + if self.listeAAfficher== None or self.listeAAfficher==[] : + spacerItem = QSpacerItem(30, 20, QSizePolicy.Fixed, QSizePolicy.Minimum) + self.CBLayout.addItem(spacerItem) + nouveauCommentaire=QLabel() + maPolice= QFont("Times", 16) + nouveauCommentaire.setFont(maPolice); + nouveauCommentaire.setText(tr('Pas de valeurs possibles')) + self.CBLayout.addWidget(nouveauCommentaire) + spacerItem2 = QSpacerItem(40, 70, QSizePolicy.Fixed, QSizePolicy.Minimum) + self.CBLayout.addItem(spacerItem2) + # try except si la liste des possibles est vide # prevoir qqchose try : @@ -115,23 +127,22 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) else : self.listeAAfficher=self.node.item.get_liste_possible([]) - maListe=[] - for i in self.listeAAfficher: maListe.append(i) - if self.alpha==1 : maListe.sort() + if self.objSimp.wait_assd() : + self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type() + if self.listeAAfficher== None or self.listeAAfficher==[] : self.listeAAfficher=[] + if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400) else : self.setMinimumHeight(len(self.listeAAfficher)*30) - self.PourEtreCoche=[] if self.objSimp.wait_assd() : - self.listeAAfficher=self.node.item.get_sd_avant_du_bon_type() - for concept in self.listeValeursCourantes: - self.PourEtreCoche.append(concept.nom) + for concept in self.listeValeursCourantes: self.PourEtreCoche.append(concept.nom) else : - for val in self.listeValeursCourantes: - self.PourEtreCoche.append(val) - print self.PourEtreCoche + for val in self.listeValeursCourantes: self.PourEtreCoche.append(val) + maListe=[] + for i in self.listeAAfficher: maListe.append(i) + if self.alpha==1 : maListe.sort() for i in range(1,len(maListe)+1): self.ajoutCB(i) self.inhibe=True @@ -235,3 +246,5 @@ class MonWidgetPlusieursInto (Ui_WidgetPlusieursInto,Feuille,GerePlie,GereListe) def clearAll(self): for cb in self.listeCB : cb.setText("") + + diff --git a/InterfaceQT4/monWidgetPlusieursTuple.py b/InterfaceQT4/monWidgetPlusieursTuple.py index 3d4934bf..b2536bb4 100644 --- a/InterfaceQT4/monWidgetPlusieursTuple.py +++ b/InterfaceQT4/monWidgetPlusieursTuple.py @@ -23,9 +23,9 @@ import string,types,os,sys # Modules Eficas from determine import monEnvQT5 if monEnvQT5: - from PyQt5.QtWidgets import QFrame,QApplication - from PyQt5.QtGui import QIcon, QFrame - from PyQt5.QtCore import QSize + from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget + from PyQt5.QtGui import QIcon + from PyQt5.QtCore import QSize, Qt else : from PyQt4.QtGui import * from PyQt4.QtCore import * @@ -147,6 +147,7 @@ class TupleCustom3(QWidget,Ui_Tuple3,TupleCustom): class MonWidgetPlusieursTuple(Feuille,GereListe): def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): + print "MonWidgetPlusieursTuple" self.indexDernierLabel=0 self.nomLine="TupleVal" self.listeAffichageWidget=[] @@ -302,6 +303,11 @@ class MonWidgetPlusieursTuple(Feuille,GereListe): def RBListePush(self): # PN a rendre generique avec un truc tel prerempli if self.objSimp.valeur != None and self.objSimp.valeur != [] : return + if not hasattr(self.editor.readercata.cata[0],'sd_ligne') : self.editor.readercata.cata[0].sd_ligne=None + if not hasattr(self.editor.readercata.cata[0],'sd_generateur') : self.editor.readercata.cata[0].sd_generateur=None + if not hasattr(self.editor.readercata.cata[0],'sd_transfo') : self.editor.readercata.cata[0].sdtransfo=None + if not hasattr(self.editor.readercata.cata[0],'sd_charge') : self.editor.readercata.cata[0].sd_charge=None + if not hasattr(self.editor.readercata.cata[0],'sd_moteur') : self.editor.readercata.cata[0].sd_moteur=None if self.objSimp.definition.validators.typeDesTuples[0]==self.editor.readercata.cata[0].sd_ligne : val=[] for k in self.objSimp.jdc.LineDico.keys() : diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index 4d281f76..fd35cd2f 100755 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -58,12 +58,13 @@ class Appli(Ui_Eficas,QMainWindow): self.QWParent=None #(Pour lancement sans IHM) self.code=code self.indice=0 + self.first=1 self.dict_reels={} if monEnvQT5 : self.recent = [] else : self.recent = QStringList() self.ficRecents={} self.listeAEnlever=[] - self.ListeCode=['Aster','Carmel3D','Cuve2dg','Openturns_Study','Openturns_Wrapper','MAP','ZCracks', 'CarmelCND','MT'] + self.ListeCode=['Aster','Carmel3D','Cuve2dg','Openturns_Study','Openturns_Wrapper','MAP','ZCracks', 'CarmelCND','MT','PSEN','PSEN_N1'] self.repIcon=os.path.join( os.path.dirname(os.path.abspath(__file__)),'..','Editeur','icons') if self.salome: @@ -72,17 +73,24 @@ class Appli(Ui_Eficas,QMainWindow): Accas.SalomeEntry = eficasSalome.SalomeEntry self.multi=multi + self.demande=multi # specifique PSEN if self.multi == False : self.definitCode(code,ssCode) if code==None: return - if not self.salome and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang + if not self.salome and hasattr (self, 'CONFIGURATION') and hasattr(self.CONFIGURATION,'lang') : langue=self.CONFIGURATION.lang if langue=='fr': self.langue=langue else : self.langue="ang" - from Extensions import localisation - app=QApplication - localisation.localise(app,langue) + #from Extensions import localisation + #app=QApplication + #localisation.localise(app,langue) + #print tr('FORTRAN_FILE') + #localisation.localise(app,langue,'titi_fr.qm') + #print tr('titi1') + #localisation.localise(app,langue,'toto.qm') + #print tr('titi1') + #print pomu self.setupUi(self) if self.code in ['MAP',] : self.resize(1440,self.height()) @@ -153,7 +161,7 @@ class Appli(Ui_Eficas,QMainWindow): self.initPatrons() self.initRecents() self.initAides() - for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution"): + for intituleMenu in ("menuTraduction","menuOptions","menuMesh","menuExecution","menuN1"): if hasattr(self,intituleMenu): menu=getattr(self,intituleMenu) menu.setAttribute(Qt.WA_DeleteOnClose) @@ -184,6 +192,37 @@ class Appli(Ui_Eficas,QMainWindow): self.actionCode.setEnabled(True) self.menuAide.addAction(self.actionCode) + def newN1(self): + ssCode=None + code="PSEN_N1" + self.cleanPath() + dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code)) + sys.path.insert(0,dirCode) + self.code=code + self.definitCode(code,ssCode) + self.multi=True + self.demande=False + self.fileNew() + + def newPSEN(self): + ssCode=None + code="PSEN" + self.cleanPath() + dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code)) + sys.path.insert(0,dirCode) + self.code=code + self.definitCode(code,ssCode) + self.multi=True + self.demande=False + self.fileNew() + + def ajoutN1(self): + self.menuN1 = self.menubar.addMenu(tr("Etude N-1")) + self.actionN1 = QAction(self) + self.actionN1.setText(tr("Etude N1")) + self.menuN1.addAction(self.actionN1) + if monEnvQT5 : self.actionN1.triggered.connect(self.newN1) + else : self.connect(self.actionN1,SIGNAL("triggered()"),self.newN1) def ajoutExecution(self): self.menuExecution = self.menubar.addMenu(tr("Execution")) @@ -292,11 +331,21 @@ class Appli(Ui_Eficas,QMainWindow): self.menuOptions.setTitle(tr("Options")) def PSEN(self): + if self.first: + self.first=0 + if monEnvQT5: + self.action_Nouveau.triggered.disconnect(self.fileNew) + self.action_Nouveau.triggered.connect(self.newPSEN) + self + else : + self.disconnect(self.action_Nouveau,SIGNAL("triggered()"),self.fileNew) + self.connect(self.action_Nouveau,SIGNAL("triggered()"),self.newPSEN) self.enleverActionsStructures() self.enleverParametres() self.enleverRechercherDsCatalogue() self.enleverNewInclude() self.ajoutExecution() + self.ajoutN1() self.ajoutHelpPSEN() self.ajoutIcones() diff --git a/InterfaceQT4/readercata.py b/InterfaceQT4/readercata.py index 70783a58..aa804fd4 100644 --- a/InterfaceQT4/readercata.py +++ b/InterfaceQT4/readercata.py @@ -324,10 +324,10 @@ class READERCATA: # self.cree_rubrique(e,self.dico,0) #print self.dicoInverse - from Extensions import localisation - app=QApplication + #from Extensions import localisation + #app=QApplication # tres dommage A Revoir - localisation.localise(app,"fr") + #localisation.localise(app,"fr") self.dicoInverseFrancais={} self.dicoFrancaisAnglais={} self.dicoAnglaisFrancais={} @@ -340,6 +340,7 @@ class READERCATA: self.dicoInverseFrancais[tr(k)]=listefr #print tr(k),listefr if self.appliEficas.langue=="ang" : localisation.localise(app,"en") + def traite_entite(self,e): diff --git a/InterfaceQT4/sauveTELEMAC.py b/InterfaceQT4/sauveTELEMAC.py new file mode 100644 index 00000000..71f9e21f --- /dev/null +++ b/InterfaceQT4/sauveTELEMAC.py @@ -0,0 +1,372 @@ +# Copyright (C) 2007-2013 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +import re, string +from Extensions.i18n import tr +from Accas.A_BLOC import BLOC +from Accas import * + + +from convert_python import PythonParser + +pattern_comment_slash = re.compile(r"^\s*/") +pattern_eta = re.compile(r".*&ETA.*") +pattern_fin = re.compile(r".*&FIN.*") +pattern_blanc = re.compile(r"^ *$") +pattern_OUI = re.compile(r"^ *OUI *") +pattern_oui = re.compile(r"^ *oui *") +pattern_NON = re.compile(r"^ *NON *") +pattern_non = re.compile(r"^ *non *") +pattern_vide = re.compile(r"^ *$") +pattern_texte =re.compile(r"^[\w*'-]+[ *[\w*'-]* *]*[:=] *['](?P.*)[']") +# le pattern texte reconnait +#nom1 nom 2 : ou = chaine entre ' +# avec eventuellement des quotes au milieu par exemple +# TITRE = 'TELEMAC 2D : GOUTTE D''EAU DANS UN BASSIN$' +# m.group("texte") va rendre 'TELEMAC 2D : GOUTTE D''EAU DANS UN BASSIN$' + + +#Si le code n est pas Telemac +try : + from aideAuxConvertisseurs import DicoEficasToCas, ListeSupprimeCasToEficas + from aideAuxConvertisseurs import ListeCalculCasToEficas, DicoAvecMajuscules + from enumDicoTelemac2 import DicoEnumCasEn +except : + pass + +from Extensions import localisation + +from determine import monEnvQT5 + + + +def entryPoint(): + """ + Return a dictionary containing the description needed to load the plugin + """ + return { + 'name' : 'TELEMAC', + 'factory' : TELEMACParser + } + +class TELEMACParser(PythonParser): + """ + This converter works like PythonParser, except that it also initializes all + model variables to None in order to avoid Python syntax errors when loading + a file with a different or inexistent definition of variables. + """ + + def convert(self, outformat, appli=None): + self.dicoInverseFrancais=appli.readercata.dicoInverseFrancais + self.dicoAnglaisFrancais=appli.readercata.dicoAnglaisFrancais + self.dicoFrancaisAnglais=appli.readercata.dicoFrancaisAnglais + self.dicoMC=appli.readercata.dicoMC + self.Ordre_Des_Commandes=appli.readercata.Ordre_Des_Commandes + + + #print self.dicoInverseFrancais + #text = PythonParser.convert(self, outformat, appli) + + text="" + l_lignes = string.split(self.text,'\n') + self.dictSimp={} + lignesATraiter=[] + for ligne in l_lignes : + if pattern_comment_slash.match(ligne) : continue + if pattern_eta.match(ligne) : continue + if pattern_fin.match(ligne) : continue + if pattern_texte.match(ligne) : + lignesATraiter.append(l) + continue + + for l in ligne.split('\t'): + lignesATraiter.append(l) + + for ligne in lignesATraiter : + if pattern_blanc.match(ligne) : continue + ligneInitiale=ligne + + if pattern_texte.match(ligne) : + self.traiteLigneTexte(ligne) + continue + + + ligne=re.sub("'",' ',ligne) + ligne=re.sub(":",'=',ligne) + if ligne.count('=') != 1 : + print "pb avec la ligne " , ligne + continue + + + motsInLigne=string.split(ligne,' ') + listeMotsSimp=() + simp="" + for mot in motsInLigne: + if mot == "" : continue + if mot == "=" : + simp=simp[0:-1] + while simp[-1] == " " : simp=simp[0:-1] + if simp.find('-') > 0 : simp=self.redecoupeSimp(simp) + break + + mot=mot.replace('_','__') + simp=simp+mot[0].upper() +mot[1:].lower()+'_' + valeur=ligne.split('=')[1] + self.dictSimp[simp]=valeur + + + + #print dictSimp + #print self.dicoInverseFrancais + + dicoParMC={} + #print ListeCalculCasToEficas + + print self.dictSimp.keys() + if 'Title' not in self.dictSimp.keys(): + import os + self.dictSimp['Titre']=os.path.basename(self.filename) + + for simp in self.dictSimp.keys(): + if simp in TELEMACParser.__dict__.keys() : apply(TELEMACParser.__dict__[simp],(self,)) + + for simp in self.dictSimp.keys(): + if simp in ListeSupprimeCasToEficas: continue + if simp not in self.dicoInverseFrancais.keys() : + print "************" + print "pb avec ", simp,'------' + print "************" + continue + listeGenea=self.dicoInverseFrancais[simp] + listeGeneaReverse=[] + for (u,v) in listeGenea : + if isinstance(v,BLOC): continue + listeGeneaReverse.append(u) + listeGeneaReverse.reverse() + dicoTravail=dicoParMC + i=0 + #print (listeGeneaReverse[0:-1]) + while i < len(listeGeneaReverse[0:-1]) : + mot=listeGeneaReverse[i] + i=i+1 + if mot not in dicoTravail.keys(): dicoTravail[mot]={} + dicoTravail=dicoTravail[mot] + dicoTravail[simp]=self.dictSimp[simp] + + self.textePy="" + #print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + #print dicoParMC + #print "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" + listeMC=self.tri(dicoParMC.keys()) + for k in listeMC : + #print "----------- traitement de " , k + self.textePy += self.dicoFrancaisAnglais[k] + "(" + self.traiteMC(dicoParMC[k]) + self.textePy += ");\n" + #print "----------- " + + + print self.textePy + return self.textePy + + def traiteLigneTexte(self,ligne): + m=pattern_texte.match(ligne) + valeur=m.group("texte") + ligne=ligne[0:ligne.find(valeur)] + ligne=re.sub("'",' ',ligne) + ligne=re.sub(":",'=',ligne) + motsInLigne=string.split(ligne,' ') + simp="" + for mot in motsInLigne: + if mot == "" : continue + if mot == "=" : + simp=simp[0:-1] + while simp[-1] == " " : simp=simp[0:-1] + if simp.find('-') > 0 : simp=self.redecoupeSimp(simp) + break + + mot=mot.replace('_','__') + simp=simp+mot[0].upper() +mot[1:].lower()+'_' + self.dictSimp[simp]=valeur + + def traiteMC(self,dico) : + for k in dico.keys() : + valeur= dico[k] + if k not in self.dicoMC.keys() : kA=self.dicoFrancaisAnglais[k] + else : kA=k + obj=self.dicoMC[kA] + if isinstance(obj,FACT): self.generFACT(obj,kA,valeur) + elif isinstance(obj,BLOC): self.generBLOC(obj,kA,valeur) + elif isinstance(obj,SIMP): self.generSIMP(obj,kA,valeur) + else : print "%%%%%%%%%%%\n", "pb generation pour", k, obj, "\n%%%%%%%%%%%" + + #print "_____________" + + def generFACT(self,obj,nom,valeur): + if nom in TELEMACParser.__dict__.keys() : + apply(TELEMACParser.__dict__[nom],(self,)) + return + self.textePy += nom + "=_F( " + self.traiteMC(valeur) + self.textePy += '),\n' + + + def generBLOC(self,obj,nom,valeur): + print "BLOC " + print nom + + def generSIMP(self,obj,nom,valeur): + if nom in ("Prescribed_Flowrates", "Prescribed_Velocities", "Prescribed_Elevations" ): return + if obj.max==1 : + if 'TXM' in obj.type : + valeur=str(valeur) + while valeur[-1] == " " : valeur=valeur[0:-1] + while valeur[0] == " " : valeur=valeur[1:] + valeur=valeur[0].upper()+valeur[1:].lower() + valeur=tr(valeur) + try : valeur=eval(valeur,{}) + except : pass + if nom in DicoEnumCasEn.keys(): + try : valeur=DicoEnumCasEn[nom][valeur] + except : pass + if 'Fichier' in obj.type or 'TXM' in obj.type or 'Repertoire' in obj.type : + valeur=str(valeur) + while valeur[-1] == " " : valeur=valeur[0:-1] + while valeur[0] == " " : valeur=valeur[1:] + self.textePy += nom + "= '" + str(valeur) +"' ," + return + if bool in obj.type : + if pattern_OUI.match(valeur) or pattern_oui.match(valeur) : self.textePy += nom + "= True," + if pattern_NON.match(valeur) or pattern_non.match(valeur) : self.textePy += nom + "= False," + return + self.textePy += nom + "=" + str(valeur) +"," + else : + if pattern_vide.match(valeur) : return + while valeur[-1] == " " : valeur=valeur[0:-1] + while valeur[0] == " " : valeur=valeur[1:] + + if ";" in valeur : valeur=valeur.split(';') + elif "," in valeur : valeur=valeur.split(',') + + if valeur == None : return + newVal=[] + for v in valeur : + try : v==eval(v,{}) + except : pass + if nom in DicoEnumCasEn.keys(): + try : v=DicoEnumCasEn[nom][v] + except : pass + newVal.append(v) + self.textePy += nom + "=" + str(newVal) +"," + + + + def tri(self, listeIn): + if len(listeIn) == 1 : return listeIn + if self.Ordre_Des_Commandes == None : return listeIn + #print self.Ordre_Des_Commandes + listeOut=[listeIn[0],] + for kF in listeIn[1:]: + k=str(self.dicoFrancaisAnglais[kF]) + ordreK=self.Ordre_Des_Commandes.index(k) + i=0 + while i < len(listeOut): + ordreI=self.Ordre_Des_Commandes.index(self.dicoFrancaisAnglais[listeOut[i]]) + if ordreK < ordreI : break + i=i+1 + listeOut.insert(i,kF) + return listeOut + + def Processeurs_Paralleles(self): + #YOANN + if self.dictSimp["Processeurs_Paralleles"] == 0 : del self.dictSimp["Processeurs_Paralleles"] + else : self.dictSimp["Parallel_Computation"]="Parallel" + + def decoupeSUPG(self,valeurs,label): + i=0 + for prefixe in ('_U_And_V','_H'): + labelComplet=label+prefixe + self.dictSimp["labelComplet"]=valeurs[i] + i=i+1 + if len(valeurs)==2 : return + for prefixe in ('_K_And_Epsilon','_Tracers'): + labelComplet=label+prefixe + self.dictSimp["labelComplet"]=valeurs[i] + i=i+1 + + def Option_De_Supg(self): + print "ds Option_De_Supg" + self.decoupeSUPG( self.dictSimp["Option_De_Supg"],"Option_De_Supg") + del self.dictSimp["Option_De_Supg"] + + def Forme_De_La_Convection(self): + self.decoupeSUPG( self.dictSimp["Forme_De_La_Convection"],"Forme_De_La_Convection") + del self.dictSimp["Forme_De_La_Convection"] + + def redecoupeSimp(self,simp): + # replace('-','_') uniquement dans les identifiants + while simp.find('-') > 0 : + ind=simp.find('-') + if ind==len(simp)-1 : break + simp=simp[0:ind]+'_'+simp[ind+1].upper()+simp[ind+2:] + return simp + + + + def Liquid_Boundaries(self): + texte_Boundaries="Liquid_Boundaries=( " + premier=0 + if 'Prescribed_Elevations' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Elevations"].split(";") + elif 'Cotes_Imposees' in self.dictSimp.keys(): + valeurs=self.dictSimp["Cotes_Imposees"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Elevations',\n" + texte_Boundaries += "Prescribed_Elevations = " + str(valeurs[e]) + "),\n" + + if 'Prescribed_Flowrates' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Flowrates"].split(";") + elif 'Debits_Imposes' in self.dictSimp.keys(): + valeurs=self.dictSimp["Debits_Imposes"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Flowrates',\n" + texte_Boundaries += "Prescribed_Flowrates = " + str(valeurs[e]) + "),\n" + + if 'Prescribed_Velocity' in self.dictSimp.keys(): + valeurs=self.dictSimp["Prescribed_Velocity"].split(";") + elif 'Vitesses_Imposees' in self.dictSimp.keys(): + valeurs=self.dictSimp["Vitesses_Imposees"].split(";") + else : valeurs=() + for e in range(len(valeurs)): + if valeurs[e] == "" or valeurs[e] == "\n" : continue + if eval(valeurs[e],{})==0 : continue + if not premier : premier=1 + texte_Boundaries += "_F(Type_Condition = 'Prescribed Velocity',\n" + texte_Boundaries += "Prescribed_Velocity = " + str(valeurs[e]) + "),\n" + if premier : texte_Boundaries +="),\n" + else : texte_Boundaries="" ; print "pb texte_Boundaries " + self.textePy += texte_Boundaries + diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py index f19f5126..bb413220 100644 --- a/InterfaceQT4/typeNode.py +++ b/InterfaceQT4/typeNode.py @@ -71,6 +71,7 @@ class PopUpMenuNodeMinimal : self.ajoutScript() def ajoutScript(self): + # cochon mais je n arrive pas a faire mieux avec le mecanisme de plugin listeCommandes=self.appliEficas.mesScripts.dict_commandes[self.tree.currentItem().item.get_nom()] if type(listeCommandes) != types.TupleType: listeCommandes=(listeCommandes,) diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 82f67770..b75e31a3 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -63,7 +63,7 @@ class MyTabview: def handleOpen(self,fichier=None,patron=0,units=None): result = None if fichier is None: - if self.appliEficas.multi==True : + if self.appliEficas.demande==True : self.appliEficas.definitCode(None,None) if self.appliEficas.code == None:return @@ -173,7 +173,7 @@ class MyTabview: editor.handleSupprimer() def newEditor(self,include=0): - if self.appliEficas.multi==True : + if self.appliEficas.demande==True : self.appliEficas.definitCode(None,None) if self.appliEficas.code == None:return maPage=self.getEditor(include=include) diff --git a/PSEN_Eficas/mesScripts_PSEN.py b/PSEN_Eficas/mesScripts_PSEN.py new file mode 100644 index 00000000..a64083aa --- /dev/null +++ b/PSEN_Eficas/mesScripts_PSEN.py @@ -0,0 +1,28 @@ +def exportToCsv(editor,cmd) : + #from PyQt4.QtGui import QFileDialog + # selection fichier + #fn = QFileDialog.getOpenFileName() + #if not fn : return + #FichieraTraduire=str(fn) + print "je suis la" + print editor + print cmd + +def importFromCsv(editor,cmd) : + print "et ici" + +# le dictionnaire des commandes a la structure suivante : +# la clef est la commande qui va proposer l action +# puis un tuple qui contient +# - la fonction a appeler +# - le label dans le menu du clic droit +# - un tuple contenant les parametres attendus par la fonction +# - appelable depuis Salome uniquement -) +# - appelable depuis un item valide uniquement +# - toolTip +dict_commandes={ + 'N_1_GENERATORS':( + (exportToCsv,"exportToCsv",('editor','self'),False,False,"export values to cvs File"), + (importFromToCsv,"importFromToCsv",('editor','self'),False,False,"import values from cvs File"), + ) + } diff --git a/PSEN_Eficas/opsPSEN.py b/PSEN_Eficas/opsPSEN.py index ef56370d..1e641cfd 100755 --- a/PSEN_Eficas/opsPSEN.py +++ b/PSEN_Eficas/opsPSEN.py @@ -18,8 +18,8 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # -from ExtractGeneratorLoadLineandTransfoDico import ExtractGeneratorLoadLineandTransfoDico -#from ExtractGeneratorLoadLineandTransfoDico import ExtractGeneratorLoadLineandTransfoDico2 +#from ExtractGeneratorLoadLineandTransfoDico import ExtractGeneratorLoadLineandTransfoDico +from ExtractGeneratorLoadLineandTransfoDico import ExtractGeneratorLoadLineandTransfoDico2 def INCLUDE(self,PSSE_path,sav_file,**args): """ diff --git a/PSEN_Eficas/qtEficas_PSEN.py b/PSEN_Eficas/qtEficas_PSEN.py index af53e5f6..94598c5f 100755 --- a/PSEN_Eficas/qtEficas_PSEN.py +++ b/PSEN_Eficas/qtEficas_PSEN.py @@ -30,7 +30,6 @@ import prefs name='prefs_'+prefs.code __import__(name) -from PyQt4.QtCore import * from InterfaceQT4 import eficas_go eficas_go.lance_eficas(code=prefs.code) diff --git a/UiQT4/desWidgetCommande.ui b/UiQT4/desWidgetCommande.ui index ac31d2d3..6912bb56 100644 --- a/UiQT4/desWidgetCommande.ui +++ b/UiQT4/desWidgetCommande.ui @@ -332,6 +332,13 @@ QLineEdit:disabled + + + + true + + + diff --git a/UiQT4/desWidgetPlusieursInto.ui b/UiQT4/desWidgetPlusieursInto.ui index 0b3e5099..9d63c15b 100644 --- a/UiQT4/desWidgetPlusieursInto.ui +++ b/UiQT4/desWidgetPlusieursInto.ui @@ -7,7 +7,7 @@ 0 0 938 - 236 + 200 @@ -19,7 +19,7 @@ 0 - 60 + 200 @@ -36,10 +36,10 @@ 2 - 2 + 0 - 0 + 5 @@ -198,8 +198,32 @@ + + 0 + + + + + + + 0 + 0 + + + + + 250 + 0 + + + + + 250 + 16777215 + + background:rgb(255,255,255) @@ -207,6 +231,22 @@ + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 5 + 20 + + + + @@ -222,7 +262,7 @@ - Détruit une ligne + Cherche la valeur border : 0px @@ -232,7 +272,8 @@ - .. + + @@ -242,6 +283,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -279,23 +333,14 @@ 0 0 300 - 122 + 92 - - 0 - - - 0 - - - 0 - - + 0 - + 0 @@ -394,7 +439,10 @@ background : rgb(247,247,247) - QFrame::Box + QFrame::NoFrame + + + QFrame::Plain 1 @@ -410,8 +458,8 @@ 0 0 - 419 - 230 + 424 + 193 @@ -424,18 +472,22 @@ 0 - - 0 - - - 0 - - - 0 - - + 0 + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -522,6 +574,7 @@ horizontalSpacer scrollArea +