--- /dev/null
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2017 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
+from __future__ import absolute_import
+import types,os,sys
+
+from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
+
+class MonWidgetPlusieursCreeAssd (MonWidgetPlusieursBase):
+
+ def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ MonWidgetPlusieursBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
+ self.etablitOrdre()
+ print ('MonWidgetPlusieursBase', nom)
+
+
+
+# def setValeurs(self):
+ # uniquement appele a l initialisation.
+ # les lineEdit ont deja ete crees
+# MonWidgetPlusieursBase.setValeurs(self):
+# self.listeValeursCourantes=self.node.item.getListeValeurs()
+# index=1
+# for valeur in self.listeValeursCourantes :
+# val = self.politique.getValeurTexte(valeur)
+# nomLineEdit = "lineEditVal"+str(index)
+# if hasattr(self,nomLineEdit) :
+# courant = getattr(self,nomLineEdit)
+# if 'R' in self.objSimp.definition.type and str(val) != repr(val) : courant.setText(repr(val))
+# else : courant.setText(str(val))
+# else :
+# self.ajoutLineEdit(val)
+# index=index+1
+# if self.indexDernierLabel < self.monSimpDef.max : self.ajoutLineEdit()
+#
+#
+# def ajoutLineEdit(self,valeur=None,):
+# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+# self.indexDernierLabel=self.indexDernierLabel+1
+# nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
+# if hasattr(self,nomLineEdit) :
+# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+# self.indexDernierLabel=self.indexDernierLabel-1
+# return
+# nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
+# self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
+# nouveauLE.setText("")
+# if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
+# else : nouveauLE.setStyleSheet("background:rgb(235,235,235)")
+# nouveauLE.setFrame(False)
+# # fait dans le init pour pouvoir passer le numero du LE mai 20
+# #nouveauLE.returnPressed.connect(self.changeValeur)
+#
+# setattr(self,nomLineEdit,nouveauLE)
+# self.listeAffichageWidget.append(nouveauLE)
+# self.etablitOrdre()
+# if valeur != None :
+# nouveauLE.setText(str(valeur))
+# self.dictLE[self.indexDernierLabel] = valeur
+# else :
+# self.dictLE[self.indexDernierLabel] = None
+# # deux lignes pour que le ensureVisible fonctionne
+# self.estVisible=nouveauLE
+# if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
+# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
+#
+ def etablitOrdre(self):
+ i=0
+ while(i +1 < len(self.listeAffichageWidget)):
+ self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
+ self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
+ i=i+1
+ # si on boucle on perd l'ordre
+#
+#
+#
+# def rendVisibleLigne(self):
+# QApplication.processEvents()
+# self.estVisible.setFocus()
+# self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
+#
+#
+# def finCommentaire(self):
+# return self.finCommentaireListe()
+#
+# def ajout1Valeur(self,valeur=None):
+# #import traceback
+# #traceback.print_stack()
+# if valeur == None : return
+# liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
+# if validite == 0 : return
+# if liste ==[] : return
+# listeVal=[]
+# for valeur in self.listeValeursCourantes : listeVal.append(valeur)
+# validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
+# if (comm2 != "" and comm != None) : return comm2
+# if validite :
+# self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
+# if len(self.listeValeursCourantes) > self.monSimpDef.min :
+# self.node.item.setValeur(self.listeValeursCourantes)
+# self.reaffiche()
+# return None
+# else :
+# return(comm2+" "+comm)
+#
+# def reaffiche(self):
+# # A priori, on ne fait rien
+# pass
+#
+#
+# def ajoutNValeur(self,liste):
+# #----------------------------
+# # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
+# # car alors le temps de verification devient prohibitif reconstructution et verification a
+# # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
+#
+#
+# listeFormatee=list(liste)
+#
+# min,max=self.node.item.getMinMax()
+# if self.objSimp.valeur == None : listeComplete = listeFormatee
+# else : listeComplete = self.objSimp.valeur + listeFormatee
+#
+# if len(listeComplete) > max :
+# texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
+# self.editor.afficheInfos(texte,Qt.red)
+# return
+#
+# validite,comm,comm2 = self.politique.ajoutNTuple(listeComplete)
+# if not validite :
+# self.editor.afficheInfos(comm2,Qt.red)
+# return
+#
+# self.politique.recordValeur(listeComplete)
+#
+# indexDernierRempli=0
+# while ( indexDernierRempli < len(liste) ) :
+# texte=liste[indexDernierRempli]
+# if indexDernierRempli < self.indexDernierLabel:
+# nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
+# courant=getattr(self,nomLineEdit)
+# courant.setText(str(texte))
+# else :
+# self.ajoutLineEdit(texte)
+# indexDernierRempli = indexDernierRempli + 1
+#
+#
+# def changeValeur(self,changeDePlace=True,oblige=False,numero=None):
+# #print ('monWidgetPlusieursBase changeValeur')
+# self.changeUnLineEdit = False
+# donneFocus=None
+# derniereValeur=None
+# self.listeValeursCourantes = []
+# fin=self.indexDernierLabel
+#
+# for i in range (1, self.indexDernierLabel+1):
+# nomLineEdit="lineEditVal"+str(i)
+# courant=getattr(self,nomLineEdit)
+# valeur=courant.text()
+# if valeur != None and valeur != "" :
+# # c est ce qui est long mais permet d avoir
+# # une bonne connaissance des erreurs
+# # et de traiter le changede place
+# commentaire=self.ajout1Valeur(valeur)
+# if (commentaire != None ):
+# self.editor.afficheInfos(commentaire,Qt.red)
+# courant.setText("")
+# donneFocus=courant
+# self.reaffiche()
+# return
+# else :
+# self.editor.afficheInfos("")
+# elif donneFocus==None : donneFocus=courant
+#
+# nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
+# dernier=getattr(self,nomDernierLineEdit)
+# derniereValeur=dernier.text()
+# if changeDePlace:
+# if donneFocus != None :
+# donneFocus.setFocus()
+# self.scrollArea.ensureWidgetVisible(donneFocus)
+# elif self.indexDernierLabel < self.monSimpDef.max :
+# self.ajoutLineEdit()
+# if self.listeValeursCourantes == [] : return
+# min,max = self.node.item.getMinMax()
+# if len(self.listeValeursCourantes) < self.monSimpDef.min :
+# self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
+# if len(self.listeValeursCourantes) < min and oblige==True: return
+# if len(self.listeValeursCourantes) > max : return
+# self.node.item.setValeur(self.listeValeursCourantes)
+# #print (self.listeValeursCourantes)
+# if len(self.listeValeursCourantes) == self.monSimpDef.max :
+# self.editor.afficheInfos(tr('nb max de valeurs atteint'))
+# self.setValide()
+# self.reaffiche()
+#
+#
+# def leaveEventScrollArea(self,event):
+# #print ('monWidgetPlusBase leaveEventScrollArea', self.changeUnLineEdit)
+# if self.changeUnLineEdit : self.changeValeur(changeDePlace=False)
+# QScrollArea.leaveEvent(self.scrollArea,event)
+#
+#
+#
+#
# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2017 EDF R&D
+# Copyright (C) 2007-2020 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
#
# Modules Python
from __future__ import absolute_import
-import types,os,sys
+import types,os
-from InterfaceQT4.monWidgetPlusieursCreeUserAssd import MonWidgetPlusieursCreeUserAssd
-class MonWidgetPlusieursCreeAssd (MonWidgetPlusieursBase):
+# Modules Eficas
+from Extensions.i18n import tr
+from .monWidgetSimpTxt import MonWidgetSimpTxt
+from .monWidgetPlusieursBase import MonWidgetPlusieursBase
+from copy import copy,deepcopy
+from PyQt5.QtCore import Qt
+
+
+class MonWidgetPlusieursCreeUserAssd ( MonWidgetPlusieursBase):
def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- MonWidgetPlusieursBase.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
- print ('MonWidgetPlusieursBase', nom)
-#
-#
-#
-# def setValeurs(self):
-# # uniquement appele a l initialisation.
-# # les lineEdit ont deja ete crees
-# self.listeValeursCourantes=self.node.item.getListeValeurs()
-# index=1
-# for valeur in self.listeValeursCourantes :
-# val = self.politique.getValeurTexte(valeur)
-# nomLineEdit = "lineEditVal"+str(index)
-# if hasattr(self,nomLineEdit) :
-# courant = getattr(self,nomLineEdit)
-# if 'R' in self.objSimp.definition.type and str(val) != repr(val) : courant.setText(repr(val))
-# else : courant.setText(str(val))
-# else :
-# self.ajoutLineEdit(val)
-# index=index+1
-# if self.indexDernierLabel < self.monSimpDef.max : self.ajoutLineEdit()
-#
-#
-# def ajoutLineEdit(self,valeur=None,):
-# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-# self.indexDernierLabel=self.indexDernierLabel+1
-# nomLineEdit="lineEditVal"+str(self.indexDernierLabel)
-# if hasattr(self,nomLineEdit) :
-# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-# self.indexDernierLabel=self.indexDernierLabel-1
-# return
-# nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
-# self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
-# nouveauLE.setText("")
-# if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
-# else : nouveauLE.setStyleSheet("background:rgb(235,235,235)")
-# nouveauLE.setFrame(False)
-# # fait dans le init pour pouvoir passer le numero du LE mai 20
-# #nouveauLE.returnPressed.connect(self.changeValeur)
-#
-# setattr(self,nomLineEdit,nouveauLE)
-# self.listeAffichageWidget.append(nouveauLE)
-# self.etablitOrdre()
-# if valeur != None :
-# nouveauLE.setText(str(valeur))
-# self.dictLE[self.indexDernierLabel] = valeur
-# else :
-# self.dictLE[self.indexDernierLabel] = None
-# # deux lignes pour que le ensureVisible fonctionne
-# self.estVisible=nouveauLE
-# if self.inInit==False :QTimer.singleShot(1, self.rendVisibleLigne)
-# #print ('ajoutLineEdit, monWidgetPlusieursBase', self.indexDernierLabel)
-#
-# def etablitOrdre(self):
-# i=0
-# while(i +1 < len(self.listeAffichageWidget)):
-# self.listeAffichageWidget[i].setFocusPolicy(Qt.StrongFocus)
-# self.setTabOrder(self.listeAffichageWidget[i],self.listeAffichageWidget[i+1])
-# i=i+1
-# # si on boucle on perd l'ordre
-#
-#
-#
-# def rendVisibleLigne(self):
-# QApplication.processEvents()
-# self.estVisible.setFocus()
-# self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
-#
-#
-# def finCommentaire(self):
-# return self.finCommentaireListe()
-#
-# def ajout1Valeur(self,valeur=None):
-# #import traceback
-# #traceback.print_stack()
-# if valeur == None : return
-# liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
-# if validite == 0 : return
-# if liste ==[] : return
-# listeVal=[]
-# for valeur in self.listeValeursCourantes : listeVal.append(valeur)
-# validite,comm,comm2,listeRetour=self.politique.ajoutValeurs(liste,-1,listeVal)
-# if (comm2 != "" and comm != None) : return comm2
-# if validite :
-# self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
-# if len(self.listeValeursCourantes) > self.monSimpDef.min :
-# self.node.item.setValeur(self.listeValeursCourantes)
-# self.reaffiche()
-# return None
-# else :
-# return(comm2+" "+comm)
-#
-# def reaffiche(self):
-# # A priori, on ne fait rien
-# pass
-#
-#
-# def ajoutNValeur(self,liste):
-# #----------------------------
-# # attention quand on charge par un fichier, on ne peut pas se contenter d ajouter N fois 1 valeur
-# # car alors le temps de verification devient prohibitif reconstructution et verification a
-# # chaque valeur. d ou l ajout de ajoutNTuple a politique plusieurs
-#
-#
-# listeFormatee=list(liste)
-#
-# min,max=self.node.item.getMinMax()
-# if self.objSimp.valeur == None : listeComplete = listeFormatee
-# else : listeComplete = self.objSimp.valeur + listeFormatee
-#
-# if len(listeComplete) > max :
-# texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint")
-# self.editor.afficheInfos(texte,Qt.red)
-# return
-#
-# validite,comm,comm2 = self.politique.ajoutNTuple(listeComplete)
-# if not validite :
-# self.editor.afficheInfos(comm2,Qt.red)
-# return
-#
-# self.politique.recordValeur(listeComplete)
-#
-# indexDernierRempli=0
-# while ( indexDernierRempli < len(liste) ) :
-# texte=liste[indexDernierRempli]
-# if indexDernierRempli < self.indexDernierLabel:
-# nomLineEdit="lineEditVal"+str(indexDernierRempli+1)
-# courant=getattr(self,nomLineEdit)
-# courant.setText(str(texte))
-# else :
-# self.ajoutLineEdit(texte)
-# indexDernierRempli = indexDernierRempli + 1
-#
-#
-# def changeValeur(self,changeDePlace=True,oblige=False,numero=None):
-# #print ('monWidgetPlusieursBase changeValeur')
-# self.changeUnLineEdit = False
-# donneFocus=None
-# derniereValeur=None
-# self.listeValeursCourantes = []
-# fin=self.indexDernierLabel
-#
-# for i in range (1, self.indexDernierLabel+1):
-# nomLineEdit="lineEditVal"+str(i)
-# courant=getattr(self,nomLineEdit)
-# valeur=courant.text()
-# if valeur != None and valeur != "" :
-# # c est ce qui est long mais permet d avoir
-# # une bonne connaissance des erreurs
-# # et de traiter le changede place
-# commentaire=self.ajout1Valeur(valeur)
-# if (commentaire != None ):
-# self.editor.afficheInfos(commentaire,Qt.red)
-# courant.setText("")
-# donneFocus=courant
-# self.reaffiche()
-# return
-# else :
-# self.editor.afficheInfos("")
-# elif donneFocus==None : donneFocus=courant
-#
-# nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel)
-# dernier=getattr(self,nomDernierLineEdit)
-# derniereValeur=dernier.text()
-# if changeDePlace:
-# if donneFocus != None :
-# donneFocus.setFocus()
-# self.scrollArea.ensureWidgetVisible(donneFocus)
-# elif self.indexDernierLabel < self.monSimpDef.max :
-# self.ajoutLineEdit()
-# if self.listeValeursCourantes == [] : return
-# min,max = self.node.item.getMinMax()
-# if len(self.listeValeursCourantes) < self.monSimpDef.min :
-# self.editor.afficheInfos(tr('nb min de valeurs : ')+str( self.monSimpDef.min))
-# if len(self.listeValeursCourantes) < min and oblige==True: return
-# if len(self.listeValeursCourantes) > max : return
-# self.node.item.setValeur(self.listeValeursCourantes)
-# #print (self.listeValeursCourantes)
-# if len(self.listeValeursCourantes) == self.monSimpDef.max :
-# self.editor.afficheInfos(tr('nb max de valeurs atteint'))
-# self.setValide()
-# self.reaffiche()
-#
-#
-# def leaveEventScrollArea(self,event):
-# #print ('monWidgetPlusBase leaveEventScrollArea', self.changeUnLineEdit)
-# if self.changeUnLineEdit : self.changeValeur(changeDePlace=False)
-# QScrollArea.leaveEvent(self.scrollArea,event)
-#
-#
-#
-#
+ MonWidgetPlusieursBase. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
+ self.etablitOrdre()
+
+ def ajout1Valeur(self,valeur=None):
+ if not valeur in list(self.dictValeurs.keys()):
+ validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeur)
+ MonWidgetPlusieursBase.ajout1Valeur(self,valeur)
+
+ #def changeValeur(self,changeDePlace=False,oblige=False,numero=None):
+ def changeValeur(self,changeDePlace=False,oblige=False ):
+ print ('dans changeValeur du CreeUserAssd', changeDePlace, self.numLineEditEnCours)
+ self.changeUnLineEdit=False
+ valeur = self.lineEditEnCours.text()
+ if self.numLineEditEnCours in list(self.dictLE.keys()) :
+ oldValeurUserAssd = self.dictLE[self.numLineEditEnCours]
+ if oldValeurUserAssd == None or oldValeurUserAssd == "" : enCreation = True
+ else : enCreation = False
+ else :
+ enCreation = True
+ oldValeurUserAssd = ""
+ if enCreation : validite, objASSD, commentaire=self.objSimp.creeUserASSD(valeur)
+ elif oldValeurUserAssd.nom == valeur : self.selectionneNext();return
+ else :
+ validite, commentaire=self.node.item.renommeSdCreeDsListe(oldValeurUserAssd,valeur)
+ nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+ dernier=getattr(self,nomDernierLineEdit)
+ dernier.setFocus()
+ return
+
+ if commentaire != "" and not validite:
+ self.editor.afficheInfos(commentaire,Qt.red)
+ self.lineEditEnCours.setText("")
+ return
+ # on relit tout pour tenir compte des lignes blanches
+ liste=[]
+ for i in range (1, self.indexDernierLabel+1):
+ if i == self.numLineEditEnCours : liste.append(objASSD)
+ if i in list(self.dictLE.keys()) :
+ if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+ self.node.item.object.state='changed'
+ validite=self.node.item.setValeur(liste)
+ self.setValide()
+ validite=self.node.item.isValid()
+ if validite :
+ self.dictLE[self.numLineEditEnCours] = objASSD
+ self.node.item.rattacheUserASSD(objASSD)
+ if self.indexDernierLabel < len(liste) : self.ajoutLineEdit()
+ nomDernierLineEdit="lineEditVal"+str(self.numLineEditEnCours+1)
+ self.listeValeursCourantes=liste
+ dernier=getattr(self,nomDernierLineEdit)
+ dernier.setFocus()
+ else :
+ self.editor.afficheInfos('ajout impossible' ,Qt.red)
+ if objASSD : objASSD.supprime()
+ self.lineEditEnCours.setText("")
+ self.parentQt.propageChange(self.objSimp.definition.type[0])
+ self.selectionneNext()
+
+ def selectionneNext(self):
+ print ('a programmer')
+
+ def leaveEventScrollArea(self,event):
+ pass
+
+ def echangeDeuxValeurs(self):
+ self.changeUnLineEdit=False
+ obj1=self.dictLE[self.num1]
+ obj2=self.dictLE[self.num2]
+ self.dictLE[self.num1]=obj2
+ self.dictLE[self.num2]=obj1
+ nomLineEdit=self.nomLine+str(self.num1)
+ courant=getattr(self,nomLineEdit)
+ if self.dictLE[self.num1] != None : courant.setText(self.dictLE[self.num1].nom)
+ else : courant.setText("")
+ nomLineEdit=self.nomLine+str(self.num2)
+ courant=getattr(self,nomLineEdit)
+ if self.dictLE[self.num2] != None : courant.setText(self.dictLE[self.num2].nom)
+ else : courant.setText("")
+ liste=[]
+ for i in list(self.dictLE.keys()):
+ if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+ validite=self.node.item.setValeur(liste)
+ courant.setFocus(True)
+
+ def descendLesLignes(self):
+ self.changeUnLineEdit=False
+ if self.numlineEditEnCours==self.indexDernierLabel : return
+ nouvelleValeur=None
+ for i in range (self.numlineEditEnCours+1, self.indexDernierLabel):
+ valeurAGarder=self.dictLE[i]
+ self.dictLE[i]=nouvelleValeur
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if nouvelleValeur != None : courant.setText(nouvelleValeur.nom)
+ else : courant.setText("")
+ nouvelleValeur=valeurAGarder
+
+
+ def moinsPushed(self):
+ if self.numlineEditEnCours == 0 : return
+ if self.indexDernierLabel == 0 : return
+ objASSD=self.dictLE[self.numlineEditEnCours]
+ if objASSD : objASSD.supprime()
+ self.lineEditEnEdition.setText("")
+
+ #self.dictLE.pop(self.numlineEditEnCours)
+ for i in range (self.numlineEditEnCours, self.indexDernierLabel-1):
+ self.dictLE[i]= self.dictLE[i+1]
+ nomLineEdit=self.nomLine+str(i)
+ courant=getattr(self,nomLineEdit)
+ if self.dictLE[i] != None : courant.setText(self.dictLE[i].nom)
+ else : courant.setText("")
+ nomLineEdit=self.nomLine+str(self.indexDernierLabel)
+ courant=getattr(self,nomLineEdit)
+ courant.setText("")
+ self.dictLE[self.indexDernierLabel]=None
+ liste=[]
+ for i in list(self.dictLE.keys()):
+ if self.dictLE[i] != None and self.dictLE[i] != "" : liste.append(self.dictLE[i])
+ validite=self.node.item.setValeur(liste)
+
--- /dev/null
+# -*- 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
+#
+from __future__ import absolute_import
+from __future__ import print_function
+try :
+ from builtins import str
+ from builtins import range
+except : pass
+
+import types,sys,os, re
+import subprocess
+import traceback
+
+
+import traceback
+
+# Modules Eficas
+
+import convert, generator
+from Editeur import session
+from Editeur import comploader
+from Editeur import Objecttreeitem
+
+DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
+debug = False
+
+
+
+class JDCEditorSsIhm :
+# ------------------- #
+ """
+ Editeur de jdc
+ """
+
+# ---------------------------------------------
+# Methodes Communes ou appelees depuis avec Ihm
+# ---------------------------------------------
+
+ def __init__ (self,appliEficas,fichier = None, jdc = None, units = None, include=0 ):
+ #-----------------------------------------------------------------------------------#
+ # paticularisee avec Ihm
+
+ if debug : print ('dans le init de JDCEditorSsIhm')
+ self.appliEficas = appliEficas
+ self.fichier = fichier
+ self.fichierComplet = fichier
+ self.extensionFichier = os.path.splitext(fichier)[1]
+ self.jdc = jdc
+ self.first = True
+ self.jdc_item = None
+ self.dicoNouveauxMC = {}
+ self.dicoNouveauxFact = {}
+ self.dict_reels = {}
+ self.liste_simp_reel = []
+
+ if self.appliEficas != None : self.salome = self.appliEficas.salome
+ else : self.salome = 0
+
+ # ces attributs sont mis a jour par definitCode appelee par newEditor
+ self.code = self.appliEficas.maConfiguration.code
+ self.maConfiguration = self.appliEficas.maConfiguration
+
+
+ if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
+ if self.maConfiguration.typeDeCata == 'XML' :
+ from InterfaceQT4 import readercataXML as readercata
+ else :
+ from InterfaceQT4 import readercata
+ self.readercata = readercata.ReaderCata( self, self.appliEficas )
+ self.appliEficas.readercata=self.readercata
+ self.appliEficas.code=self.code
+ else :
+ self.readercata=self.appliEficas.readercata
+ if self.readercata.fichierCata == None : return #Sortie Salome
+ self.titre=self.readercata.titre
+
+ self.formatFichierOut = self.appliEficas.formatFichierOut
+ self.formatFichierIn = self.appliEficas.formatFichierIn
+
+ if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
+ self.dict_reels={}
+ self.liste_simp_reel=[]
+ self.dicoNouveauxMC={}
+ self.dicoNouveauxFact={}
+
+
+ try:
+ self.maConfiguration.generator_module
+ _module = __import__(self.maConfiguration.generator_module)
+ info = _module.entryPoint()
+ generator.plugins.addEntryPoint(info)
+ except:
+ pass
+
+ try:
+ self.maConfiguration.convert_module
+ #print self.maConfiguration.convert_module
+ _module = __import__(self.maConfiguration.convert_module)
+ info = _module.entryPoint()
+ convert.plugins.addEntryPoint(info)
+ except :
+ pass
+
+ self.maConfiguration.mesGenerators = generator
+ self.maConfiguration.mesconvertisseurs = convert
+ try : self.XMLReader=convert.plugins['xml']()
+ except : self.XMLReader=None
+ try : self.XMLgenerator=generator.plugins['xml']()
+ except : self.XMLgenerator=None
+
+
+ if self.formatFichierOut in generator.plugins.keys():
+ self.generator = generator.plugins[self.formatFichierOut]()
+
+
+ self.fileInfo = None
+ self.lastModified = 0
+
+ self.modified = False
+ self.isReadOnly = False
+
+ #------- construction du jdc --------------
+
+
+ self.nouveau=0
+ if self.fichier is not None: # fichier jdc fourni
+ if jdc==None :
+ #print ('PNPN : chgt try en if')
+ try :
+ #if 1 :
+ self.jdc = self.readFile(self.fichier)
+ except :
+ print ("mauvaise lecture du fichier")
+ if self.salome :
+ try : self.appliEficas.addJdcInSalome( self.fichier)
+ except : print ("mauvais enregistrement dans Salome")
+ else :
+ self.jdc=jdc
+
+ if self.jdc is not None and units is not None:
+ self.jdc.recorded_units=units
+ self.jdc.old_recorded_units=units
+
+ else:
+ if not self.jdc: # nouveau jdc
+ if not include : self.jdc = self._newJDC(units=units)
+ else : self.jdc = self._newJDCInclude(units=units)
+ self.nouveau=1
+
+ if self.jdc:
+ self.jdc.editor = self
+ self.jdc.lang = self.appliEficas.langue
+ self.jdc.aReafficher=False
+ txt_exception = None
+ if not jdc:
+ if self.extensionFichier == '.xml' :
+ if self.appliEficas.maConfiguration.withXSD: self.jdc.analyseXML()
+ else : print ('run MDM with -x option (MDM for XML)'); exit()
+ else : self.jdc.analyse()
+ txt_exception = self.jdc.cr.getMessException()
+ if txt_exception :
+ self.jdc = None
+ self.informe('pb chargement jdc',txt_exception)
+ #else:
+ #comploader.chargerComposants()
+ #self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
+
+ #-------------------------------#
+ def readFile(self, fn):
+ #--------------------------------#
+ """
+ Public slot to read the text from a file.
+ @param fn filename to read from (string or QString)
+ """
+
+ # charge un JDC
+ # paticularisee avec Ihm
+
+ fn = str(fn)
+ jdcName=os.path.basename(fn)
+
+ # Il faut convertir le contenu du fichier en fonction du format
+ formatIn=self.appliEficas.formatFichierIn
+ if self.extensionFichier == '.xml' and self.appliEficas.maConfiguration.withXSD: formatIn='xml'
+ if formatIn in convert.plugins:
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[formatIn]()
+ p.readfile(fn)
+ if p.text=="" : self.nouveau=1
+ #print ('PNPN --> CIST a faire')
+ #print ('PNPN --> XML a faire')
+ if formatIn != 'xml':
+ pareil,texteNew=self.verifieChecksum(p.text)
+ if not pareil :
+ self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
+ p.text=texteNew
+ memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
+ if memeVersion == 0 :
+ texteNew=self.traduitCatalogue(texteNew)
+ p.text=texteNew
+ text=p.convert('exec',self.appliEficas)
+ if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
+ else :
+ self.afficheInfos("Type de fichier non reconnu",'red')
+ self.informe( "Type de fichier non reconnu",
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+ return None
+
+ CONTEXT.unsetCurrentStep()
+
+ #jdc=self.readercata.cata[0].JdC(procedure=text,
+ jdc=self.readercata.cata.JdC(procedure=text,
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ nom=jdcName,
+ rep_mat=self.maConfiguration.rep_mat
+ )
+ self.modified = False
+ return jdc
+
+
+ #--------------------------------#
+ def _newJDC( self ,units = None):
+ #--------------------------------#
+ """
+ Initialise un nouveau JDC vierge
+ """
+ self.modified=1
+ CONTEXT.unsetCurrentStep()
+
+ texte=""
+ if self.code == "CARMELCND" : texte=self._newJDCCND()
+ if self.code == "ZCRACKS" : texte=self._newZCRACKS()
+ if self.code == "PSEN" : texte = self._newPSEN()
+ if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
+
+ if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
+
+
+ jdc=self.readercata.cata.JdC( procedure =texte,
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ rep_mat=self.maConfiguration.rep_mat
+ )
+
+ jdc.lang = self.appliEficas.langue
+ if units is not None:
+ jdc.recorded_units=units
+ jdc.old_recorded_units=units
+ # chgt le 15/10/19
+ # Attention positionne contexte ?
+ # est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
+ jdc.editor=self
+ return jdc
+
+ #--------------------------------#
+ def _newJDCInclude( self ,units = None):
+ #--------------------------------#
+ """
+ Initialise un nouveau JDC vierge
+ """
+ import Extensions.jdc_include
+ JdC_aux=Extensions.jdc_include.JdC_include
+ CONTEXT.unsetCurrentStep()
+
+ #jaux=self.readercata.cata[0].JdC( procedure="",
+ jaux=self.readercata.cata.JdC( procedure="",
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ rep_mat=self.maConfiguration.rep_mat,
+ )
+ jaux.editor=self
+ jaux.analyse()
+
+ J=JdC_aux( procedure="",
+ appliEficas=self.appliEficas,
+ cata=self.readercata.cata,
+ cata_ord_dico=self.readercata.cata_ordonne_dico,
+ jdc_pere=jaux,
+ rep_mat=self.maConfiguration.rep_mat,
+ )
+ J.editor=self
+ J.analyse()
+ if units is not None:
+ J.recorded_units=units
+ J.old_recorded_units=units
+ return J
+
+
+
+ #-----------------------#
+ def getSource(self,file):
+ #-----------------------#
+
+ # Il faut convertir le contenu du fichier en fonction du format
+ if self.formatFichierIn in convert.plugins :
+ # Le convertisseur existe on l'utilise
+ p=convert.plugins[self.formatFichierIn]()
+ p.readfile(file)
+ text=p.convert('execnoparseur')
+ if not p.cr.estvide():
+ self.afficheInfos("Erreur a la conversion",'red')
+ return text
+ else:
+ # Il n'existe pas c'est une erreur
+ self.afficheInfos("Type de fichier non reconnu",'red')
+ self.informe( "Type de fichier non reconnu",
+ "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.formatFichierIn)
+ return None
+
+ #----------------------------------------------#
+ def __generateTempFilename(self, prefix, suffix):
+ #----------------------------------------------#
+ import tempfile
+ (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
+ os.close(fd)
+ return filename
+
+ #-----------------------#
+ def generDico(self):
+ #-----------------------#
+ if 'dico' in generator.plugins:
+ self.generator=generator.plugins['dico']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ #print (jdc_formate)
+ dico=self.generator.Dico
+ #print (dico)
+ return dico
+
+ #-----------------------#
+ def viewJdcSource(self):
+ #-----------------------#
+ if self.fichier == None : return
+ if os.path.isfile(self.fichier):
+ f=open(self.fichier,'r')
+ texteSource=f.read()
+ f.close()
+ self._viewText(texteSource, "JDC_SOURCE")
+ else :
+ self._viewText("file doesn't exist", "JDC_SOURCE")
+
+
+ #-----------------------#
+ def viewJdcPy(self):
+ #-----------------------#
+ strSource = str( self.getTextJDC(self.formatFichierOut) )
+ self._viewText(strSource, "JDC_RESULTAT")
+
+ #-----------------------#
+ def viewJdcRapport(self):
+ #-----------------------#
+ # on ajoute les regles
+ strRapport = str( self.jdc.report() )
+ self._viewText(strRapport, "JDC_RAPPORT")
+
+ #-----------------------#
+ def viewJdcRegles(self):
+ #-----------------------#
+ # on ajoute les regles
+ texte_global, test_global = self.jdc.verifRegles()
+ self._viewText(texte_global, "JDC_REGLES")
+
+ #-----------------------#
+ def getJdcRapport(self):
+ #-----------------------#
+ # on ajoute les regles
+ strRapport = str( self.jdc.report() )
+ return strRapport
+
+ #---------------------#
+ def getFileName(self):
+ #---------------------#
+ return self.fichier
+
+ #-------------------#
+ def initModif(self):
+ #-------------------#
+ """
+ Met l'attribut modified a 'o' : utilise par Eficas pour savoir
+ si un JDC doit etre sauvegarde avant destruction ou non
+ """
+ self.modified = True
+
+
+ #--------------------------------------------------#
+ def writeFile(self, fn, txt = None,formatLigne="beautifie"):
+ #--------------------------------------------------#
+ """
+ Public slot to write the text to a file.
+
+ @param fn filename to write to string
+ @return flag indicating success
+ """
+
+ fn = str(fn)
+
+ if txt == None :
+ txt = self.getTextJDC(self.formatFichierOut,formatLigne=formatLigne)
+ eol = '\n'
+ if len(txt) >= len(eol):
+ if txt[-len(eol):] != eol:
+ txt += eol
+ else:
+ txt += eol
+ txt=self.ajoutVersionCataDsJDC(txt)
+ if self.code != 'PSEN' and self.code != 'PSEN_N1' : checksum=self.getChecksum(txt)
+ else : checksum=''
+ txt=txt+checksum
+ if self.code=="TELEMAC" : return 1
+ try:
+ f = open(fn, 'w')
+ f.write(txt)
+ f.close()
+ return 1
+ except IOError as why:
+ print('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' , str(why))
+ self.afficheInfos('Le fichier'+str(fn) + 'n a pas pu etre sauvegarde ' , 'red')
+ return 0
+
+
+ #-----------------------------------------------------------#
+ def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"):
+ #-----------------------------------------------------------#
+ if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
+ if format == None : format = self.formatFichierOut
+ if format in generator.plugins:
+
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ try :
+ jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+ if pourRun : jdc_formate=self.generator.textePourRun
+ if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
+ except ValueError as e:
+ self.informe( "Erreur a la generation",str(e),'red')
+ return
+
+ if not self.generator.cr.estvide():
+ self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
+ return ""
+ else:
+ return jdc_formate
+ else:
+ # Il n'existe pas c'est une erreur
+ self.informe("Format inconnu", self.format + " non reconnu" )
+ return ""
+
+ #------------------------------#
+ def verifieChecksum(self,text):
+ #------------------------------#
+ # Attention : souci sous Windows
+ #
+ indexDeb=text.find("#CHECKSUM:")
+ if indexDeb < 0 : return 1, text
+ indexFin=text.find(":FIN CHECKSUM")
+ checkAvant=text[indexDeb:indexFin+13]
+ textJDC=text[0:indexDeb]+text[indexFin+13:-1]
+ if self.code != 'PSEN' and self.code != 'PSEN_N1':
+ checksum=self.getChecksum(textJDC)
+ pareil=(checkAvant==checksum)
+ else :
+ pareil=1
+ return pareil, textJDC
+
+ #---------------------------#
+ def getChecksum(self,texte):
+ #---------------------------#
+ newtexte=texte.replace('"','\\"')
+ commande='echo "'+newtexte+'"|md5sum'
+ a=os.popen(commande)
+ checksum=a.read()
+ a.close()
+ ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
+ return ligne
+
+ #----------------------#
+ def getDico(self):
+ #---------------------#
+ if 'dicoImbrique' in generator.plugins:
+ self.generator=generator.plugins['dicoImbrique']()
+ #print (self.generator)
+ jdc_formate=self.generator.gener(self.jdc)
+ dico=self.generator.Dico
+ return dico
+ else :
+ self.afficheInfos(tr("Format %s non reconnu" , 'Dictionnaire Imbrique' ),'red')
+ return ""
+
+ #-----------------------------------------#
+ def chercheGroupes(self):
+ #-----------------------------------------#
+ listeMA,listeNO=self.getTextJDC("GroupMA")
+ return listeMA,listeNO
+
+ #-----------------------------------------#
+ def chercheDico(self):
+ #-----------------------------------------#
+ dicoCourant={}
+ format = self.appliEficas.formatFichierOut
+ if format in generator.plugins:
+ # Le generateur existe on l'utilise
+ self.generator=generator.plugins[format]()
+ jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
+ dicoCourant=self.generator.dico
+ return dicoCourant
+
+ #-----------------------------------------------------------------#
+ def saveFileLegerAs(self, fileName = None) :
+ #-----------------------------------------------------------------#
+ if fileName != None :
+ self.fichier = fileName
+ return self.saveFileLeger(fileName)
+ return self.saveFileLeger()
+
+ #-----------------------------------------------------------------#
+ def saveFileComplet(self, fichier = None, formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
+ fn = fichier
+ self.generator=generator.plugins[self.format]()
+ print (self.generator)
+ if hasattr(self.generator, "writeComplet"):
+ self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appliEficas=self.appliEficas)
+
+
+# ---------------------------------------------
+# Methodes Surchargees par avecIhm
+# ---------------------------------------------
+
+ #--------------------------------#
+ def ajoutCommentaire(self):
+ #--------------------------------#
+ print ('pas programme sans Ihm')
+ print ('prevenir la maintenance du besoin')
+
+
+ #--------------------------------------#
+ def informe(self,titre,txt,critique=True):
+ #--------------------------------------#
+ # methode differenre avec et sans ihm
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+ print (titre)
+ print (txt)
+ if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
+
+ #--------------------------------------#
+ def afficheInfos(self,txt,couleur=None):
+ #--------------------------------------#
+ # methode differenre avec et sans ihm
+ print (txt)
+
+ #-----------------------------------------------------------------------#
+ def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
+ #--------------------------------------------------------------------#
+ print ('_____________________________')
+ print (txt)
+ print ('_____________________________')
+
+
+ #-----------------------------------------------------------------#
+ def saveFile(self, fichier, formatLigne="beautifie"):
+ #-----------------------------------------------------------------#
+ """
+ Public slot to save the text to a file.
+
+ @param path directory to save the file in (string or QString)
+ @return tuple of two values (boolean, string) giving a success indicator and
+ the name of the saved file
+ """
+
+
+ if self.jdc.cata.modeleMetier and self.jdc.isValid():
+ if self.generator != self.XMLgenerator :
+ self.XMLgenerator.gener(self.jdc)
+ self.XMLgenerator.writeDefault(fichier)
+ if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
+ self.fichierOut = fichier
+
+ if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
+ self.generator.writeDefault(fichier)
+ elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
+ self.generator.writeDefault(fichier)
+
+ self.modified = 0
+
+ return (1, self.fichier)
+#
+
+ #----------------------------------------------#
+ def sauveLigneFile(self):
+ #----------------------------------------------#
+ self.modified=1
+ return self.saveFile(formatLigne="Ligne")
+
+
+ #-----------------------------------#
+ def updateJdc(self, itemApres,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ monItem=itemApres
+ etape=monItem.item.object
+ CONTEXT.setCurrentStep(etape)
+ etape.buildIncludeInclude(texte)
+ self.tree.racine.buildChildren()
+
+ #-----------------------------------#
+ def updateJdcEtape(self, itemApres,texte):
+ #------------------------------------#
+ # ajoute une etape de JdC a partir d un texte
+ monItem=itemApres
+ etape=monItem.item.object
+ CONTEXT.set_current_step(etape)
+ try :
+ ok=etape.build_includeEtape(texte)
+ except :
+ ok=0
+ if not ok :
+ QMessageBox.information( self,
+ tr("Import texte"),
+ tr("Impossible d importer le texte"))
+ self.tree.racine.build_children()
+ return ok
+
+
+
+ #-------------------------------------#
+ def deleteEtape(self,etape):
+ #-------------------------------------#
+ # dans le JDC
+ self.jdc.suppentite(etape)
+
+ #-------------------------------------#
+ def deleteMC(self,etape,MCFils,listeAvant=()):
+ #-------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC != None : ouChercher.suppentite(monMC)
+ ouChercher.state='changed'
+ ouChercher.isvalid()
+
+ #--------------------------------------------------------#
+ def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
+ #--------------------------------------------------------#
+ # dans le JDC
+ debug=False
+ if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+ ouChercher=etape
+ if debug : print (ouChercher)
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC == None : monMC = ouChercher.addEntite(MCFils)
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isvalid()
+ return 1
+
+ #--------------------------------------------------------#
+ def ajoutMCinMCFactUnique(self,etape,MCFils,valeurs,listeAvant=()):
+ # Attention si +sieursMCFACT
+ #--------------------------------------------------------#
+ # dans le JDC
+ debug=False
+ if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
+ ouChercher=etape
+ if debug : print (ouChercher)
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ # Attention si +sieursMCFACT
+ ouChercher=ouChercher[0]
+ if debug : print (ouChercher)
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC == None : monMC = ouChercher.addEntite(MCFils)
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isValid()
+ return 1
+
+ #----------------------------------------------#
+ def ajoutMCFact(self,etape,MCFils,listeAvant=()):
+ #----------------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ monMC=etape.getChild(ouChercher,restreint="oui")
+ if monMC== None : monMC= ouChercher.addEntite(MCFils)
+ monMC.isvalid()
+
+ #-----------------------------------------------------------------#
+ def setValeurMCSimpInEtape(self,etape,listeAvant,valeur):
+ #-----------------------------------------------------------------#
+ # pour VP
+ monObj=etape
+ for mot in listeAvant :
+ monObj=monObj.getChild(mot,restreint="oui")
+ if monObj==None : return False
+ if monObj == None : return False
+ if monObj.valeur != valeur :
+ # PNPN le setValeur fait des bugs --> pourquoi
+ #monObj.setValeur(valeur)
+ monObj.valeur=valeur
+ monObj.isValid()
+ return True
+
+ #-------------------------------------------------#
+ def getValeur(self,nomEtape,MCFils,listeAvant=()):
+ #-------------------------------------------------#
+ # dans le JDC
+
+ debug=0
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+ if debug : print ('etape trouvee', ouChercher)
+ if ouChercher==None : return None
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if debug : print ('monMC', monMC)
+ if monMC== None : return None
+ return monMC.valeur
+
+ #-------------------------------------------------#
+ def getMCDsEtape(self,etape,MCFils,listeAvant=()):
+ #-------------------------------------------------#
+ # dans le JDC
+
+ if etape==None : return None
+ ouChercher=etape
+ debug=0
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if debug : print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if debug : print ('monMC', monMC)
+ return monMC
+
+ #-----------------------------------------------------------#
+ def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()):
+ #--------------------------------------------------------#
+ # dans le JDC
+
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+ if ouChercher==None : return None
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ #print (mot, ouChercher)
+ if ouChercher==None : return None
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ monMC.set_valeur(valeur)
+ monMC.isvalid()
+
+ #-----------------------------------------------------------#
+ def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
+ #-----------------------------------------------------------#
+ # dans le JDC
+ ouChercher=etape
+ if isinstance (etape, str):
+ ouChercher=None
+ for e in self.jdc.etapes:
+ if e.nom == etape : ouChercher=e; break
+ if ouChercher==None : return
+
+ for mot in listeAvant :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC== None : monMC= ouChercher.addEntite(MCFils)
+
+ monMC.definition.into=valeurs
+ from Noyau.N_VALIDATOR import IntoProtocol
+ monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max)
+ monMC.state='changed'
+ monMC.isvalid()
+
+ #-------------------------------------------------------------------#
+ def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()):
+ #-------------------------------------------------------------------#
+ # dans le JDC
+ for e in self.jdc.etapes:
+ if e.nom == nomEtape : ouChercher=e; break
+
+ for mot in listeAvant :
+ try :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ # Le mot clef n est pas la
+ except : return 0
+ try :
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ # Le mot clef n est pas la
+ except : return 0
+ if monMC == None : return 0
+
+ if hasattr(monMC.definition,'into') :
+ if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
+ else : maListeDeValeur=monMC.definition.into
+ else :
+ return 0
+
+ monMC.state='changed'
+ return 1
+
+ #-------------------------------------#
+ def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
+ #-------------------------------------#
+ # dans le MDD
+
+ #if isinstance (etape, str):
+ # for e in self.jdc.etapes:
+ # if e.nom == etape : etape=e; break
+ #if etape == None : return
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ ouChercher=definitionEtape
+ if len(listeMC) > 1 :
+
+ for mc in listeMC[0:-1]:
+ mcfact=ouChercher.entites[mc]
+ ouChercher=mcfact
+
+ mcAccas=ouChercher.entites[listeMC[-1]]
+ mcAccas.defaut=valeurs
+ return 1
+
+ #------------------------------------------------#
+ def changeIntoDefMC(self,etape,listeMC,valeurs):
+ #------------------------------------------------#
+ # dans le MDD
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ #definitionEtape=getattr(self.jdc.cata,nomEtape)
+ print ( 'changeIntoDefMC ',etape,listeMC,valeurs)
+ ouChercher=getattr(self.jdc.cata,etape.nom)
+
+ #if len(listeMC) > 1 :
+ # for mc in listeMC[0:-1]:
+ # mcfact=ouChercher.entites[mc]
+ # ouChercher=mcfact
+ #mcAccas=ouChercher.entites[listeMC[-1]]
+
+ for mc in listeMC :
+ mcAccas=ouChercher.entites[mc]
+ ouChercher=mcAccas
+ if ouChercher == None : return 0
+
+ if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
+ else : oldValeurs=None
+
+ if oldValeurs==valeurs : return 1
+ mcAccas.into=valeurs
+ from Noyau.N_VALIDATOR import IntoProtocol
+ mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max)
+ return 1
+
+ #-------------------------------------------------------------#
+ def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
+ #-------------------------------------------------------------#
+ # dans le MDD
+ #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
+ if isinstance (etape, str):
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
+ if etape == None : return
+ #definitionEtape=getattr(self.jdc.cata[0],etape)
+ definitionEtape=getattr(self.jdc.cata,etape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ MCADetruire=ouChercher.entites[nomDuMC]
+ ouChercher.ordre_mc.remove(nomDuMC)
+ print ('remove de ', nomDuMC)
+ del ouChercher.entites[nomDuMC]
+ del self.dicoNouveauxMC[nomDuMC]
+
+
+ #-------------------------------------------------------------#
+ def ajoutDefinitionMC(self,nomEtape,listeAvant,nomDuMC,typ,**args):
+ #-------------------------------------------------------------#
+ # dans le MDD
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ from Accas import A_SIMP
+ Nouveau=A_SIMP.SIMP(typ,**args)
+ Nouveau.pere=ouChercher
+ Nouveau.nom=nomDuMC
+ #Nouveau.ordre_mc=[]
+ ouChercher.entites[nomDuMC]=Nouveau
+ ouChercher.ordre_mc.append(nomDuMC)
+ #print ('ajout de ', nomDuMC)
+ #traceback.print_stack()
+ # ajout CIST sauvegarde
+ if nomDuMC in self.dicoNouveauxMC : del self.dicoNouveauxMC[nomDuMC]
+ self.dicoNouveauxMC[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,typ,args)
+ #print self.dicoNouveauxMC
+
+ #---------------------------------------------------------------------#
+ def ajoutDefinitionMCFact(self,nomEtape,listeAvant,nomDuMC,listeMC,**args):
+ #---------------------------------------------------------------------#
+ # dans le MDD
+ print ('ajoutDefinitionMCFact', nomDuMC)
+ #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
+ definitionEtape=getattr(self.jdc.cata,nomEtape)
+ ouChercher=definitionEtape
+ for k in listeAvant :
+ ouChercher=ouChercher.entites[k]
+ from Accas import A_SIMP
+ for mc in listeMC :
+ nomMC=mc[0]
+ typMC=mc[1]
+ argsMC=mc[2]
+ nouveauMC=A_SIMP.SIMP(typMC,**argsMC)
+ nouveauMC.nom=nomMC
+ args[nomMC]=nouveauMC
+ from Accas import A_FACT
+ nouveauFact=A_FACT.FACT(**args)
+ nouveauFact.pere=ouChercher
+ nouveauFact.nom=nomDuMC
+ from Editeur.autre_analyse_cata import traite_entite
+ traite_entite(nouveauFact,[])
+ ouChercher.entites[nomDuMC]=nouveauFact
+ ouChercher.ordre_mc.append(nomDuMC)
+ self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args)
+ #print self.dicoNouveauxMC
+
+ #----------------------------------------------------#
+
+ #----------------------------------------------------#
+ def changeIntoMCandSet(self,etape,listeMC,into,valeurs):
+ #----------------------------------------------------#
+ # dans le MDD et le JDC
+
+ self.changeIntoDefMC(etape,listeMC,into)
+
+ if isinstance (etape, str):
+ for e in self.jdc.etapes:
+ if e.nom == etape : etape=e; break
+ if etape == None : return
+
+ ouChercher = etape
+ for mot in listeMC[:-1] :
+ ouChercher=ouChercher.getChild(mot,restreint="oui")
+ if ouChercher==None : return
+ MCFils=listeMC[-1]
+ monMC=ouChercher.getChild(MCFils,restreint="oui")
+ if monMC== None : monMC= etape.addEntite(MCFils)
+
+ monMC.definition.into=into
+ monMC.valeur=valeurs
+ monMC.val=valeurs
+ monMC.state='changed'
+ monMC.isvalid()
+
+ #-------------------------------------#
+ def ajoutVersionCataDsJDC(self,txt):
+ #-------------------------------------#
+ #if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt
+ if not hasattr(self.readercata.cata,'VERSION_CATALOGUE'): return txt
+ ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata.VERSION_CATALOGUE+":FIN VERSION_CATALOGUE\n"
+ texte=txt+ligneVersion
+ return texte
+
+ #-------------------------------------#
+ def verifieVersionCataDuJDC(self,text):
+ #-------------------------------------#
+ memeVersion=False
+ indexDeb=text.find("#VERSION_CATALOGUE:")
+ indexFin=text.find(":FIN VERSION_CATALOGUE")
+ if indexDeb < 0 :
+ self.versionCataDuJDC="sans"
+ textJDC=text
+ else :
+ self.versionCataDuJDC=text[indexDeb+19:indexFin]
+ textJDC=text[0:indexDeb]+text[indexFin+23:-1]
+
+ self.versionCata="sans"
+ if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
+
+ if self.versionCata==self.versionCataDuJDC : memeVersion=True
+ return memeVersion,textJDC
+
+ #-------------------------------#
+ def traduitCatalogue(self,texte):
+ #-------------------------------#
+ nomTraducteur="traduit"+self.readercata.code+self.versionCataDuJDC+"To"+self.versionCata
+ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../Traducteur")))
+ try :
+ traducteur=__import__(nomTraducteur)
+ monTraducteur=traducteur.MonTraducteur(texte)
+ nouveauTexte=monTraducteur.traduit()
+ return nouveauTexte
+ except :
+ return texte
+
+
+# Methodes a resorber
+# il faut mettre a jour les catalogues avec
+# TEXTE_NEW_JDC
+#
+
+ #---------------------------#
+ def _new_CF(self):
+ #---------------------------#
+ texte="CONDUITE_FORCEE();"
+ return texte
+
+ #---------------------------#
+ def _newPSEN(self):
+ #---------------------------#
+ texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
+ #texte=""
+ return texte
+
+ #---------------------------#
+ def _newPSEN_N1(self):
+ #---------------------------#
+ texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+ #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
+ return texte
+
+ #---------------------------#
+ def _newZCRACKS(self):
+ #---------------------------#
+ texte="MAILLAGES();REMESHING();"
+ return texte
+
+
+ #---------------------------#
+ def _newJDCCND(self):
+ #---------------------------#
+ extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
+
+ #if self.salome == 0 :
+ QMessageBox.information( self,
+ tr("Fichier Med"),
+ tr("Veuillez selectionner un fichier Med"))
+ QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
+ caption='Fichier Med',
+ filter=extensions)
+ QSfichier=QSfichier[0]
+ self.fichierMED=QSfichier
+ from acquiertGroupes import getGroupes
+ erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
+ if erreur != "" : print ("a traiter")
+ texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
+ texteSources=""
+ texteCond=""
+ texteNoCond=""
+ texteVcut=""
+ texteZs=""
+ for groupe in self.listeGroupes :
+ if groupe[0:8]=='CURRENT_':
+ texteSources +=groupe[8:]+"=SOURCE("
+ texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
+ if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
+ if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
+ if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
+ if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
+ texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
+ self.newTexteCND=texte
+ self.modified=1
+ return texte
+
+
+if __name__ == "__main__":
+ print ('a faire')