1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 from __future__ import absolute_import
21 from __future__ import print_function
23 from builtins import str
24 from builtins import range
27 import types,sys,os, re
32 from six.moves import range
38 import convert, generator
39 from Editeur import session
40 from Editeur import comploader
41 from Editeur import Objecttreeitem
43 DictExtensions= {"MAP" : ".map", "TELEMAC" : '.cas'}
48 class JDCEditorSsIhm :
49 # ------------------- #
54 # ---------------------------------------------
55 # Methodes Communes ou appelees depuis avec Ihm
56 # ---------------------------------------------
58 def __init__ (self,appli,fichier = None, jdc = None, units = None, include=0 ):
59 #------------------------------------------------------------------------------#
60 # paticularisee avec Ihm
62 if debug : print ('dans le init de JDCEditorSsIhm')
63 self.appliEficas = appli
65 self.fichier = fichier
66 self.fichierComplet = fichier
70 self.dicoNouveauxMC = {}
71 self.dicoNouveauxFact = {}
73 self.liste_simp_reel = []
75 if appli != None : self.salome = self.appliEficas.salome
76 else : self.salome = 0
78 # ces attributs sont mis a jour par definitCode appelee par newEditor
79 self.code = self.appliEficas.maConfiguration.code
80 self.maConfiguration = self.appliEficas.maConfiguration
82 self.version_code = session.d_env.cata
85 if not hasattr ( self.appliEficas, 'readercata') or self.appliEficas.readercata.demandeCatalogue==True or self.appliEficas.multi==True:
86 if self.maConfiguration.typeDeCata == 'XML' :
87 from InterfaceQT4 import readercataXML as readercata
89 from InterfaceQT4 import readercata
90 self.readercata = readercata.ReaderCata( self, self.appliEficas )
91 self.appliEficas.readercata=self.readercata
92 self.appliEficas.code=self.code
94 self.readercata=self.appliEficas.readercata
95 if self.readercata.fic_cata == None : return #Sortie Salome
96 self.titre=self.readercata.titre
98 self.format = self.appliEficas.format_fichier
100 if self.appliEficas.maConfiguration.dumpXSD==True : self.appliEficas.dumpXsd()
102 self.liste_simp_reel=[]
103 self.dicoNouveauxMC={}
104 self.dicoNouveauxFact={}
108 self.maConfiguration.generator_module
109 _module = __import__(self.maConfiguration.generator_module)
110 info = _module.entryPoint()
111 generator.plugins.addEntryPoint(info)
116 self.maConfiguration.convert_module
117 #print self.maConfiguration.convert_module
118 _module = __import__(self.maConfiguration.convert_module)
119 info = _module.entryPoint()
120 convert.plugins.addEntryPoint(info)
124 self.maConfiguration.mesGenerators = generator
125 self.maConfiguration.mesconvertisseurs = convert
128 self.lastModified = 0
130 self.modified = False
131 self.isReadOnly = False
133 #------- construction du jdc --------------
137 if self.fichier is not None: # fichier jdc fourni
139 #print ('PNPN : chgt try en if')
142 self.jdc = self.readFile(self.fichier)
144 print ("mauvaise lecture du fichier")
147 self.appliEficas.addJdcInSalome( self.fichier)
149 print ("mauvais enregistrement dans Salome")
153 if self.jdc is not None and units is not None:
154 self.jdc.recorded_units=units
155 self.jdc.old_recorded_units=units
158 if not self.jdc: # nouveau jdc
160 self.jdc = self._newJDC(units=units)
162 self.jdc = self._newJDCInclude(units=units)
166 self.jdc.appli = self # a resorber
167 self.jdc.editor = self
168 self.jdc.lang = self.appli.langue
169 self.jdc.aReafficher=False
173 txt_exception = self.jdc.cr.getMessException()
176 self.informe('pb chargement jdc',txt_exception)
178 comploader.chargerComposants()
179 self.jdc_item=Objecttreeitem.makeObjecttreeitem( self, "nom", self.jdc )
181 #-------------------------------#
182 def readFile(self, fn):
183 #--------------------------------#
185 Public slot to read the text from a file.
186 @param fn filename to read from (string or QString)
190 # paticularisee avec Ihm
192 fn = six.text_type(fn)
193 jdcName=os.path.basename(fn)
195 # Il faut convertir le contenu du fichier en fonction du format
196 if self.appliEficas.format_fichier_in in convert.plugins:
197 # Le convertisseur existe on l'utilise
199 p=convert.plugins[self.appliEficas.format_fichier_in]()
202 if p.text=="" : self.nouveau=1
203 #print ('PNPN --> CIST a faire')
205 pareil,texteNew=self.verifieChecksum(p.text)
207 self.informe(("fichier modifie"),("Attention! fichier change hors EFICAS"),False)
210 memeVersion,texteNew=self.verifieVersionCataDuJDC(p.text)
211 if memeVersion == 0 : texteNew=self.traduitCatalogue(texteNew)
214 text=p.convert('exec',self.appliEficas)
216 if not p.cr.estvide(): self.afficheInfos("Erreur a la conversion",'red')
218 self.afficheInfos("Type de fichier non reconnu",'red')
219 self.informe( "Type de fichier non reconnu",
220 "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
223 CONTEXT.unsetCurrentStep()
225 #jdc=self.readercata.cata[0].JdC(procedure=text,
226 jdc=self.readercata.cata.JdC(procedure=text,
228 cata=self.readercata.cata,
229 cata_ord_dico=self.readercata.cata_ordonne_dico,
231 rep_mat=self.maConfiguration.rep_mat
233 self.modified = False
237 #--------------------------------#
238 def _newJDC( self ,units = None):
239 #--------------------------------#
241 Initialise un nouveau JDC vierge
244 CONTEXT.unsetCurrentStep()
247 if self.code == "CARMELCND" : texte=self._newJDCCND()
248 if self.code == "ZCRACKS" : texte=self._newZCRACKS()
249 if self.code == "PSEN" : texte = self._newPSEN()
250 if self.code == "PSEN_N1" : texte = self._newPSEN_N1()
252 #if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC
253 if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC
256 #jdc=self.readercata.cata[0].JdC( procedure =texte,
257 #print (self.readercata.cata)
258 jdc=self.readercata.cata.JdC( procedure =texte,
260 cata=self.readercata.cata,
261 cata_ord_dico=self.readercata.cata_ordonne_dico,
262 rep_mat=self.maConfiguration.rep_mat
265 jdc.lang = self.appli.langue
266 if units is not None:
267 jdc.recorded_units=units
268 jdc.old_recorded_units=units
269 ## PNPN est ce que la ligne suivante est bien utile ?
270 # elle positionne le contexte
271 # est ce qu on ne doit pas changer le format en Accas si on vient d accas ?
272 if self.format == 'xml' : return jdc
278 #--------------------------------#
279 def _newJDCInclude( self ,units = None):
280 #--------------------------------#
282 Initialise un nouveau JDC vierge
284 import Extensions.jdc_include
285 JdC_aux=Extensions.jdc_include.JdC_include
286 CONTEXT.unsetCurrentStep()
288 #jaux=self.readercata.cata[0].JdC( procedure="",
289 jaux=self.readercata.cata.JdC( procedure="",
291 cata=self.readercata.cata,
292 cata_ord_dico=self.readercata.cata_ordonne_dico,
293 rep_mat=self.maConfiguration.rep_mat,
297 J=JdC_aux( procedure="",
299 cata=self.readercata.cata,
300 cata_ord_dico=self.readercata.cata_ordonne_dico,
302 rep_mat=self.maConfiguration.rep_mat,
305 if units is not None:
306 J.recorded_units=units
307 J.old_recorded_units=units
312 #-----------------------#
313 def getSource(self,file):
314 #-----------------------#
316 # Il faut convertir le contenu du fichier en fonction du format
317 if self.format in convert.plugins :
318 # Le convertisseur existe on l'utilise
319 p=convert.plugins[self.format]()
321 text=p.convert('execnoparseur')
322 if not p.cr.estvide():
323 self.afficheInfos("Erreur a la conversion",'red')
326 # Il n'existe pas c'est une erreur
327 self.afficheInfos("Type de fichier non reconnu",'red')
328 self.informe( "Type de fichier non reconnu",
329 "EFICAS ne sait pas ouvrir le type de fichier " + self.appliEficas.format_fichier_in)
332 #----------------------------------------------#
333 def __generateTempFilename(self, prefix, suffix):
334 #----------------------------------------------#
336 (fd, filename) = tempfile.mkstemp(prefix=prefix, suffix=suffix)
340 #-----------------------#
342 #-----------------------#
343 if 'dico' in generator.plugins:
344 self.generator=generator.plugins['dico']()
345 #print (self.generator)
346 jdc_formate=self.generator.gener(self.jdc)
348 dico=self.generator.Dico
352 #-----------------------#
353 def viewJdcSource(self):
354 #-----------------------#
355 if self.fichier == None : return
356 f=open(self.fichier,'r')
359 self._viewText(texteSource, "JDC_SOURCE")
361 #-----------------------#
363 #-----------------------#
364 strSource = str( self.getTextJDC(self.format) )
365 self._viewText(strSource, "JDC_RESULTAT")
367 #-----------------------#
368 def viewJdcRapport(self):
369 #-----------------------#
370 # on ajoute les regles
371 strRapport = six.text_type( self.jdc.report() )
372 self._viewText(strRapport, "JDC_RAPPORT")
374 #-----------------------#
375 def viewJdcRegles(self):
376 #-----------------------#
377 # on ajoute les regles
378 texte_global, test_global = self.jdc.verifRegles()
379 self._viewText(texte_global, "JDC_REGLES")
381 #-----------------------#
382 def getJdcRapport(self):
383 #-----------------------#
384 # on ajoute les regles
385 strRapport = six.text_type( self.jdc.report() )
388 #---------------------#
389 def getFileName(self):
390 #---------------------#
393 #-------------------#
395 #-------------------#
397 Met l'attribut modified a 'o' : utilise par Eficas pour savoir
398 si un JDC doit etre sauvegarde avant destruction ou non
403 #--------------------------------------------------#
404 def writeFile(self, fn, txt = None,formatLigne="beautifie"):
405 #--------------------------------------------------#
407 Public slot to write the text to a file.
409 @param fn filename to write to string
410 @return flag indicating success
413 fn = six.text_type(fn)
416 txt = self.getTextJDC(self.format,formatLigne=formatLigne)
418 if len(txt) >= len(eol):
419 if txt[-len(eol):] != eol:
423 txt=self.ajoutVersionCataDsJDC(txt)
424 if self.code != 'PSEN' and self.code != 'PSEN_N1' : checksum=self.getChecksum(txt)
427 if self.code=="TELEMAC" : return 1
433 except IOError as why:
434 self.afficheInfos('Sauvegarde du Fichier', 'Le fichier'+str(fn) + 'n a pas pu etre sauvegarde :' + str(why))
437 #-----------------------------------------------------------#
438 def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"):
439 #-----------------------------------------------------------#
440 if self.code == "MAP" and not(format in generator.plugins): format = "MAP"
441 if format in generator.plugins:
443 # Le generateur existe on l'utilise
444 self.generator=generator.plugins[format]()
446 jdc_formate=self.generator.gener(self.jdc,format=formatLigne,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
447 if pourRun : jdc_formate=self.generator.textePourRun
448 if self.code == 'TELEMAC' : jdc_formate=self.generator.texteDico
449 except ValueError as e:
450 self.informe( "Erreur a la generation",str(e),'red')
453 if not self.generator.cr.estvide():
454 self.informe("Erreur a la generation","EFICAS ne sait pas convertir ce JDC",'red')
459 # Il n'existe pas c'est une erreur
460 self.informe("Format inconnu", self.format + " non reconnu" )
463 #------------------------------#
464 def verifieChecksum(self,text):
465 #------------------------------#
466 # Attention : souci sous Windows
468 indexDeb=text.find("#CHECKSUM:")
469 if indexDeb < 0 : return 1, text
470 indexFin=text.find(":FIN CHECKSUM")
471 checkAvant=text[indexDeb:indexFin+13]
472 textJDC=text[0:indexDeb]+text[indexFin+13:-1]
473 if self.code != 'PSEN' and self.code != 'PSEN_N1':
474 checksum=self.getChecksum(textJDC)
475 pareil=(checkAvant==checksum)
478 return pareil, textJDC
480 #---------------------------#
481 def getChecksum(self,texte):
482 #---------------------------#
484 newtexte=texte.replace('"','\\"')
485 commande='echo "'+newtexte+'"|md5sum'
490 checksum='Fichier trop long \n'
491 ligne="#CHECKSUM:"+checksum[0:-1]+":FIN CHECKSUM"
494 #----------------------#
496 #---------------------#
497 if 'dicoImbrique' in generator.plugins:
498 self.generator=generator.plugins['dicoImbrique']()
499 #print (self.generator)
500 jdc_formate=self.generator.gener(self.jdc)
501 dico=self.generator.Dico
504 self.afficheInfos(tr("Format %s non reconnu" , self.format),Qt.red)
507 #-----------------------------------------#
508 def chercheGroupes(self):
509 #-----------------------------------------#
510 listeMA,listeNO=self.getTextJDC("GroupMA")
511 return listeMA,listeNO
513 #-----------------------------------------#
514 def chercheDico(self):
515 #-----------------------------------------#
517 format = self.appliEficas.format_fichier
518 if format in generator.plugins:
519 # Le generateur existe on l'utilise
520 self.generator=generator.plugins[format]()
521 jdc_formate=self.generator.gener(self.jdc,format='beautifie',config=self.appliEficas.maConfiguration)
522 dicoCourant=self.generator.dico
525 #-----------------------------------------------------------------#
526 def saveFileLegerAs(self, fileName = None) :
527 #-----------------------------------------------------------------#
528 if fileName != None :
529 self.fichier = fileName
530 return self.saveFileLeger(fileName)
531 return self.saveFileLeger()
533 #-----------------------------------------------------------------#
534 def saveFileComplet(self, fichier = None, formatLigne="beautifie"):
535 #-----------------------------------------------------------------#
537 self.generator=generator.plugins[self.format]()
538 print (self.generator)
539 if hasattr(self.generator, "writeComplet"):
540 self.generator.writeComplet(fichier,self.jdc,config=self.appliEficas.maConfiguration,appli=self.appliEficas)
543 # ---------------------------------------------
544 # Methodes Surchargees par avecIhm
545 # ---------------------------------------------
547 #--------------------------------#
548 def ajoutCommentaire(self):
549 #--------------------------------#
550 print ('pas programme sans Ihm')
551 print ('prevenir la maintenance du besoin')
554 #--------------------------------------#
555 def informe(self,titre,txt,critique=True):
556 #--------------------------------------#
557 # methode differenre avec et sans ihm
558 if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
561 if critique : print ('!!!!!!!!!!!!!!!!!!!!!!!!!!!')
563 #--------------------------------------#
564 def afficheInfos(self,txt,couleur=None):
565 #--------------------------------------#
566 # methode differenre avec et sans ihm
569 #-----------------------------------------------------------------------#
570 def _viewText(self, txt, caption = "FILE_VIEWER",largeur=1200,hauteur=600):
571 #--------------------------------------------------------------------#
572 print ('_____________________________')
574 print ('_____________________________')
577 #-----------------------------------------------------------------#
578 def saveFile(self, fichier, formatLigne="beautifie"):
579 #-----------------------------------------------------------------#
581 Public slot to save the text to a file.
583 @param path directory to save the file in (string or QString)
584 @return tuple of two values (boolean, string) giving a success indicator and
585 the name of the saved file
589 if not (self.writeFile(fichier,formatLigne=formatLigne)): return (0, None)
590 self.fichierOut = fichier
592 if self.jdc.isValid() != 0 and hasattr(self.generator, "writeDefault"):
593 self.generator.writeDefault(fichier)
594 elif self.code=="TELEMAC" and hasattr(self.generator, "writeDefault"):
595 self.generator.writeDefault(fichier)
599 return (1, self.fichier)
602 #----------------------------------------------#
603 def sauveLigneFile(self):
604 #----------------------------------------------#
606 return self.saveFile(formatLigne="Ligne")
609 #-----------------------------------#
610 def updateJdc(self, itemApres,texte):
611 #------------------------------------#
612 # ajoute une etape de JdC a partir d un texte
614 etape=monItem.item.object
615 CONTEXT.setCurrentStep(etape)
616 etape.buildIncludeInclude(texte)
617 self.tree.racine.buildChildren()
619 #-----------------------------------#
620 def updateJdcEtape(self, itemApres,texte):
621 #------------------------------------#
622 # ajoute une etape de JdC a partir d un texte
624 etape=monItem.item.object
625 CONTEXT.set_current_step(etape)
627 ok=etape.build_includeEtape(texte)
631 QMessageBox.information( self,
633 tr("Impossible d importer le texte"))
634 self.tree.racine.build_children()
639 #-------------------------------------#
640 def deleteEtape(self,etape):
641 #-------------------------------------#
643 self.jdc.suppentite(etape)
645 #-------------------------------------#
646 def deleteMC(self,etape,MCFils,listeAvant=()):
647 #-------------------------------------#
650 for mot in listeAvant :
651 ouChercher=ouChercher.getChild(mot,restreint="oui")
652 monMC=ouChercher.getChild(MCFils,restreint="oui")
653 if monMC != None : ouChercher.suppentite(monMC)
654 ouChercher.state='changed'
657 #--------------------------------------------------------#
658 def ajoutMC(self,etape,MCFils,valeurs,listeAvant=()):
659 #--------------------------------------------------------#
662 if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
664 if debug : print (ouChercher)
665 for mot in listeAvant :
666 ouChercher=ouChercher.getChild(mot,restreint="oui", debug=1)
667 monMC=ouChercher.getChild(MCFils,restreint="oui")
668 if monMC == None : monMC = ouChercher.addEntite(MCFils)
671 monMC.state='changed'
675 #--------------------------------------------------------#
676 def ajoutMCinMCFactUnique(self,etape,MCFils,valeurs,listeAvant=()):
677 # Attention si +sieursMCFACT
678 #--------------------------------------------------------#
681 if debug : print ('ajoutMC', etape,MCFils,valeurs,listeAvant)
683 if debug : print (ouChercher)
684 for mot in listeAvant :
685 ouChercher=ouChercher.getChild(mot,restreint="oui", debug=1)
686 # Attention si +sieursMCFACT
687 ouChercher=ouChercher[0]
688 if debug : print (ouChercher)
689 monMC=ouChercher.getChild(MCFils,restreint="oui")
690 if monMC == None : monMC = ouChercher.addEntite(MCFils)
693 monMC.state='changed'
697 #----------------------------------------------#
698 def ajoutMCFact(self,etape,MCFils,listeAvant=()):
699 #----------------------------------------------#
702 for mot in listeAvant :
703 ouChercher=ouChercher.getChild(mot,restreint="oui")
704 monMC=etape.getChild(ouChercher,restreint="oui")
705 if monMC== None : monMC= ouChercher.addEntite(MCFils)
708 #-----------------------------------------------------------------#
709 def setValeurMCSimpInEtape(self,etape,listeAvant,valeur):
710 #-----------------------------------------------------------------#
713 for mot in listeAvant :
714 monObj=monObj.getChild(mot,restreint="oui")
715 if monObj==None : return False
716 if monObj == None : return False
717 if monObj.valeur != valeur :
718 # PNPN le setValeur fait des bugs --> pourquoi
719 #monObj.setValeur(valeur)
724 #-------------------------------------------------#
725 def getValeur(self,nomEtape,MCFils,listeAvant=()):
726 #-------------------------------------------------#
731 for e in self.jdc.etapes:
732 if e.nom == nomEtape : ouChercher=e; break
733 if debug : print ('etape trouvee', ouChercher)
734 if ouChercher==None : return None
735 for mot in listeAvant :
736 ouChercher=ouChercher.getChild(mot,restreint="oui")
737 if debug : print (mot, ouChercher)
738 if ouChercher==None : return None
739 monMC=ouChercher.getChild(MCFils,restreint="oui")
740 if debug : print ('monMC', monMC)
741 if monMC== None : return None
744 #-------------------------------------------------#
745 def getMCDsEtape(self,etape,MCFils,listeAvant=()):
746 #-------------------------------------------------#
749 if etape==None : return None
752 for mot in listeAvant :
753 ouChercher=ouChercher.getChild(mot,restreint="oui")
754 if debug : print (mot, ouChercher)
755 if ouChercher==None : return None
756 monMC=ouChercher.getChild(MCFils,restreint="oui")
757 if debug : print ('monMC', monMC)
760 #-----------------------------------------------------------#
761 def setValeur(self,nomEtape,MCFils,valeur,listeAvant=()):
762 #--------------------------------------------------------#
766 for e in self.jdc.etapes:
767 if e.nom == nomEtape : ouChercher=e; break
768 if ouChercher==None : return None
769 for mot in listeAvant :
770 ouChercher=ouChercher.getChild(mot,restreint="oui")
771 #print (mot, ouChercher)
772 if ouChercher==None : return None
773 monMC=ouChercher.getChild(MCFils,restreint="oui")
774 monMC.set_valeur(valeur)
777 #-----------------------------------------------------------#
778 def changeIntoMC(self,etape,MCFils,valeurs, listeAvant=()):
779 #-----------------------------------------------------------#
782 if isinstance (etape, str):
784 for e in self.jdc.etapes:
785 if e.nom == etape : ouChercher=e; break
786 if ouChercher==None : return
788 for mot in listeAvant :
789 ouChercher=ouChercher.getChild(mot,restreint="oui")
790 if ouChercher==None : return
791 monMC=ouChercher.getChild(MCFils,restreint="oui")
792 if monMC== None : monMC= ouChercher.addEntite(MCFils)
794 monMC.definition.into=valeurs
795 from Noyau.N_VALIDATOR import IntoProtocol
796 monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max)
797 monMC.state='changed'
800 #-------------------------------------------------------------------#
801 def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()):
802 #-------------------------------------------------------------------#
804 for e in self.jdc.etapes:
805 if e.nom == nomEtape : ouChercher=e; break
807 for mot in listeAvant :
809 ouChercher=ouChercher.getChild(mot,restreint="oui")
810 # Le mot clef n est pas la
813 monMC=ouChercher.getChild(MCFils,restreint="oui")
814 # Le mot clef n est pas la
816 if monMC == None : return 0
818 if hasattr(monMC.definition,'into') :
819 if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into()
820 else : maListeDeValeur=monMC.definition.into
824 monMC.state='changed'
827 #-------------------------------------#
828 def changeDefautDefMC(self,nomEtape,listeMC,valeurs):
829 #-------------------------------------#
832 #if isinstance (etape, str):
833 # for e in self.jdc.etapes:
834 # if e.nom == etape : etape=e; break
835 #if etape == None : return
836 definitionEtape=getattr(self.jdc.cata,nomEtape)
837 #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
838 ouChercher=definitionEtape
839 if len(listeMC) > 1 :
841 for mc in listeMC[0:-1]:
842 mcfact=ouChercher.entites[mc]
845 mcAccas=ouChercher.entites[listeMC[-1]]
846 mcAccas.defaut=valeurs
849 #------------------------------------------------#
850 def changeIntoDefMC(self,etape,listeMC,valeurs):
851 #------------------------------------------------#
853 #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
854 #definitionEtape=getattr(self.jdc.cata,nomEtape)
855 print ( 'changeIntoDefMC ',etape,listeMC,valeurs)
856 ouChercher=getattr(self.jdc.cata,etape.nom)
858 #if len(listeMC) > 1 :
859 # for mc in listeMC[0:-1]:
860 # mcfact=ouChercher.entites[mc]
862 #mcAccas=ouChercher.entites[listeMC[-1]]
865 mcAccas=ouChercher.entites[mc]
867 if ouChercher == None : return 0
869 if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into
870 else : oldValeurs=None
872 if oldValeurs==valeurs : return 1
874 from Noyau.N_VALIDATOR import IntoProtocol
875 mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max)
878 #-------------------------------------------------------------#
879 def deleteDefinitionMC(self,etape,listeAvant,nomDuMC):
880 #-------------------------------------------------------------#
882 #print 'in deleteDefinitionMC', etape,listeAvant,nomDuMC
883 if isinstance (etape, str):
884 for e in self.jdc.etapes:
885 if e.nom == etape : etape=e; break
886 if etape == None : return
887 #definitionEtape=getattr(self.jdc.cata[0],etape)
888 definitionEtape=getattr(self.jdc.cata,etape)
889 ouChercher=definitionEtape
890 for k in listeAvant :
891 ouChercher=ouChercher.entites[k]
892 MCADetruire=ouChercher.entites[nomDuMC]
893 ouChercher.ordre_mc.remove(nomDuMC)
894 print ('remove de ', nomDuMC)
895 del ouChercher.entites[nomDuMC]
896 del self.dicoNouveauxMC[nomDuMC]
899 #-------------------------------------------------------------#
900 def ajoutDefinitionMC(self,nomEtape,listeAvant,nomDuMC,typ,**args):
901 #-------------------------------------------------------------#
903 #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
904 definitionEtape=getattr(self.jdc.cata,nomEtape)
905 ouChercher=definitionEtape
906 for k in listeAvant :
907 ouChercher=ouChercher.entites[k]
908 from Accas import A_SIMP
909 Nouveau=A_SIMP.SIMP(typ,**args)
910 Nouveau.pere=ouChercher
913 ouChercher.entites[nomDuMC]=Nouveau
914 ouChercher.ordre_mc.append(nomDuMC)
915 #print ('ajout de ', nomDuMC)
916 #traceback.print_stack()
917 # ajout CIST sauvegarde
918 if nomDuMC in self.dicoNouveauxMC : del self.dicoNouveauxMC[nomDuMC]
919 self.dicoNouveauxMC[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,typ,args)
920 #print self.dicoNouveauxMC
922 #---------------------------------------------------------------------#
923 def ajoutDefinitionMCFact(self,nomEtape,listeAvant,nomDuMC,listeMC,**args):
924 #---------------------------------------------------------------------#
926 print ('ajoutDefinitionMCFact', nomDuMC)
927 #definitionEtape=getattr(self.jdc.cata[0],nomEtape)
928 definitionEtape=getattr(self.jdc.cata,nomEtape)
929 ouChercher=definitionEtape
930 for k in listeAvant :
931 ouChercher=ouChercher.entites[k]
932 from Accas import A_SIMP
937 nouveauMC=A_SIMP.SIMP(typMC,**argsMC)
939 args[nomMC]=nouveauMC
940 from Accas import A_FACT
941 nouveauFact=A_FACT.FACT(**args)
942 nouveauFact.pere=ouChercher
943 nouveauFact.nom=nomDuMC
944 from Editeur.autre_analyse_cata import traite_entite
945 traite_entite(nouveauFact,[])
946 ouChercher.entites[nomDuMC]=nouveauFact
947 ouChercher.ordre_mc.append(nomDuMC)
948 self.dicoNouveauxFact[nomDuMC]=('ajoutDefinitionMC',nomEtape,listeAvant,nomDuMC,listeMC,args)
949 #print self.dicoNouveauxMC
951 #----------------------------------------------------#
953 #----------------------------------------------------#
954 def changeIntoMCandSet(self,etape,listeMC,into,valeurs):
955 #----------------------------------------------------#
956 # dans le MDD et le JDC
958 self.changeIntoDefMC(etape,listeMC,into)
960 if isinstance (etape, str):
961 for e in self.jdc.etapes:
962 if e.nom == etape : etape=e; break
963 if etape == None : return
966 for mot in listeMC[:-1] :
967 ouChercher=ouChercher.getChild(mot,restreint="oui")
968 if ouChercher==None : return
970 monMC=ouChercher.getChild(MCFils,restreint="oui")
971 if monMC== None : monMC= etape.addEntite(MCFils)
973 monMC.definition.into=into
976 monMC.state='changed'
979 #-------------------------------------#
980 def ajoutVersionCataDsJDC(self,txt):
981 #-------------------------------------#
982 #if not hasattr(self.readercata.cata[0],'VERSION_CATALOGUE'): return txt
983 if not hasattr(self.readercata.cata,'VERSION_CATALOGUE'): return txt
984 ligneVersion="#VERSION_CATALOGUE:"+self.readercata.cata.VERSION_CATALOGUE+":FIN VERSION_CATALOGUE\n"
985 texte=txt+ligneVersion
988 #-------------------------------------#
989 def verifieVersionCataDuJDC(self,text):
990 #-------------------------------------#
992 indexDeb=text.find("#VERSION_CATALOGUE:")
993 indexFin=text.find(":FIN VERSION_CATALOGUE")
995 self.versionCataDuJDC="sans"
998 self.versionCataDuJDC=text[indexDeb+19:indexFin]
999 textJDC=text[0:indexDeb]+text[indexFin+23:-1]
1001 self.versionCata="sans"
1002 if hasattr(self.readercata.cata,'VERSION_CATALOGUE'): self.versionCata=self.readercata.cata.VERSION_CATALOGUE
1004 if self.versionCata==self.versionCataDuJDC : memeVersion=True
1005 return memeVersion,textJDC
1007 #-------------------------------#
1008 def traduitCatalogue(self,texte):
1009 #-------------------------------#
1010 nomTraducteur="traduit"+self.readercata.code+self.versionCataDuJDC+"To"+self.versionCata
1011 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"../Traducteur")))
1013 traducteur=__import__(nomTraducteur)
1014 monTraducteur=traducteur.MonTraducteur(texte)
1015 nouveauTexte=monTraducteur.traduit()
1021 # Methodes a resorber
1022 # il faut mettre a jour les catalogues avec
1026 #---------------------------#
1028 #---------------------------#
1029 texte="CONDUITE_FORCEE();"
1032 #---------------------------#
1034 #---------------------------#
1035 texte="DIRECTORY() ; PSSE_PARAMETERS() ; SIMULATION() ; sansnom=DISTRIBUTION() ; sansnom=DISTRIBUTION() ; CORRELATION() ;"
1039 #---------------------------#
1040 def _newPSEN_N1(self):
1041 #---------------------------#
1042 texte="CASE_SELECTION();N_PROCESSING_OPTIONS();CONTINGENCY_OPTIONS();CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
1043 #texte="CONTINGENCY_SELECTION();\nCONTINGENCY_PROCESSING(); "
1046 #---------------------------#
1047 def _newZCRACKS(self):
1048 #---------------------------#
1049 texte="MAILLAGES();REMESHING();"
1053 #---------------------------#
1054 def _newJDCCND(self):
1055 #---------------------------#
1056 extensions=tr('Fichiers Med (*.med);;''Tous les Fichiers (*)')
1058 #if self.salome == 0 :
1059 QMessageBox.information( self,
1061 tr("Veuillez selectionner un fichier Med"))
1062 QSfichier = QFileDialog.getOpenFileName(self.appliEficas,
1063 caption='Fichier Med',
1065 QSfichier=QSfichier[0]
1066 self.fichierMED=QSfichier
1067 from acquiertGroupes import getGroupes
1068 erreur,self.listeGroupes,self.nomMaillage,self.dicoCoord=getGroupes(self.fichierMED)
1069 if erreur != "" : print ("a traiter")
1070 texteComm="COMMENTAIRE(u'Cree - fichier : "+self.fichierMED +" - Nom Maillage : "+self.nomMaillage+"');\nPARAMETRES()\n"
1076 for groupe in self.listeGroupes :
1077 if groupe[0:8]=='CURRENT_':
1078 texteSources +=groupe[8:]+"=SOURCE("
1079 texteSources +="VecteurDirecteur=(1.0,2.0,3.0,),);\n"
1080 if groupe[0:5]=='COND_': texteCond +=groupe[5:]+"=CONDUCTEUR();\n"
1081 if groupe[0:7]=='NOCOND_': texteNoCond +=groupe[7:]+"=NOCOND();\n"
1082 if groupe[0:5]=='VCUT_': texteVcut +='V_'+groupe[5:]+"=VCUT();\n"
1083 if groupe[0:3]=='ZS_': texteZs +=groupe[3:]+"=ZS();\n"
1084 texte=texteComm+texteSources+texteCond+texteNoCond+texteVcut+texteZs
1085 self.newTexteCND=texte
1090 if __name__ == "__main__":