Ce module contient la classe BUREAU qui gere les JDC ouverts
"""
# Modules Python
-import os,string
+import os,string,sys
import traceback
import Pmw
from widgets import askopenfilename,asksaveasfilename
import convert
import generator
import AIDE
+import os
from jdcdisplay import JDCDISPLAY
from utils import extension_fichier,stripPath,save_in_file
-from widgets import Fenetre,Ask_Format_Fichier
+from widgets import Fenetre,Ask_Format_Fichier,FenetreSurLigneWarning
from fenetre_mc_inconnus import fenetre_mc_inconnus
+from Ihm import CONNECTOR
+from Traducteur import traduitV7V8
import comploader
('Mots-clés inconnus','mc_inconnus'),
]
),
+ ('Traduction',[
+ ('Traduction v7 en v8','TraduitFichier','<Control-t>','Ctrl+T')
+ ]
+ ),
('Aide',[
('Aide EFICAS','aideEFICAS'),
]
button_defs = (('New24',"newJDC","Création d'un nouveau fichier",'always'),
('Open24',"openJDC","Ouverture d'un fichier existant",'always'),
('Save24',"saveJDC","Sauvegarde du fichier courant",'always'),
+ ('Fermer24',"closeJDC","Fermeture du fichier courant",'always'),
('Zoom24',"visuJDC","Visualisation du fichier de commandes",'always'),
None,
('Copy24',"copy","Copie l'objet courant",'jdc'),
self.liste_JDCDisplay=[]
comploader.charger_composants()
self.cree_cataitem()
+ self.text_reel=""
+ self.initialdir = self.appli.CONFIGURATION.initialdir
def cree_cataitem(self):
"""
if len(self.liste_JDCDisplay) == 0 : return
#if self.JDCDisplay_courant : self.JDCDisplay_courant.jdc.unset_context()
numero_jdc = self.nb.index(self.nb.getcurselection())
+ self.JDCDisplay_courant.unselect()
self.JDCDisplay_courant = self.liste_JDCDisplay[numero_jdc]
self.JDC = self.JDCDisplay_courant.jdc
- #self.JDC.set_context()
self.JDCName = self.JDC.nom
+ self.JDCDisplay_courant.select()
+ #print "selectJDC",numero_jdc,self.JDCDisplay_courant,self.JDCName
+
+
+ def newJDC_include(self,event=None):
+ """
+ Initialise un nouveau JDC include vierge
+ """
+ import Extensions.jdc_include
+ JdC_aux=Extensions.jdc_include.JdC_include
+
+ self.appli.statusbar.reset_affichage_infos()
+
+ CONTEXT.unset_current_step()
+ jaux=self.cata[0].JdC(procedure="",appli=self.appli,
+ cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+ rep_mat=self.appli.CONFIGURATION.rep_mat,
+ )
+ jaux.analyse()
+
+ J=JdC_aux(procedure="",appli=self.appli,
+ cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
+ jdc_pere=jaux,
+ rep_mat=self.appli.CONFIGURATION.rep_mat,
+ )
+ J.analyse()
+ self.JDCName=J.nom
+ self.fileName=None
+ self.ShowJDC(J,self.JDCName)
+ self.appli.toolbar.active_boutons()
+ return J
def newJDC(self,event=None):
"""
self.appli.statusbar.reset_affichage_infos()
CONTEXT.unset_current_step()
- J=self.cata[0].JdC(cata=self.cata,
- cata_ord_dico=self.cata_ordonne_dico,
- appli=self.appli,
+ J=self.cata[0].JdC(procedure="",appli=self.appli,
+ cata=self.cata,cata_ord_dico=self.cata_ordonne_dico,
rep_mat=self.appli.CONFIGURATION.rep_mat,
)
+ J.analyse()
self.JDCName=J.nom
self.fileName=None
self.ShowJDC(J,self.JDCName)
self.appli.toolbar.active_boutons()
+ return J
- def ShowJDC(self,JDC,nom,label_onglet=None):
+ def ShowJDC(self,JDC,nom,label_onglet=None,JDCDISPLAY=JDCDISPLAY,enregistre="non"):
"""
Lance l'affichage du JDC cad création du JDCDisplay
Rajoute le JDCDisplay à la liste des JDCDisplay si label_onglet == None cad si on crée
"""
self.JDC=JDC
self.JDCName = self.JDC.nom = nom
- #XXX CCAR: pour le moment mis en commentaire
- #self.JDC.set_context()
if label_onglet == None :
+ # On veut un nouvel onglet
label_onglet = self.GetLabelJDC()
self.nb.add(label_onglet,tab_text = nom,tab_width=20)
new = 'oui'
if new == 'oui':
self.liste_JDCDisplay.append(self.JDCDisplay_courant)
self.JDCDisplay_courant.modified='n'
- self.JDCDisplay_courant.fichier=self.fileName
+ if enregistre != "non" :
+ self.JDCDisplay_courant.fichier=self.fileName
+ else :
+ self.initialdir = self.appli.CONFIGURATION.rep_user
self.nb.selectpage(label_onglet)
self.nb.setnaturalsize()
+ self.nb.bind_all("<Key-Next>",lambda e,s=self:s.selectArbreDown())
+ self.nb.bind_all("<Key-Prior>",lambda e,s=self:s.selectArbreUp())
+ self.nb.bind_all("<Insert>",lambda e,s=self:s.deplieReplieNode())
texte = "Jeu de commandes :" + self.JDCName+" ouvert"
+ CONNECTOR.Connect(JDC,"close",self.onClose,(self.JDCDisplay_courant,))
self.appli.affiche_infos(texte)
+ def onClose(self,jdcdisplay):
+ #print "onClose",jdcdisplay
+ self.closeJDCDISPLAY(jdcdisplay)
+
+ def closeJDCDISPLAY(self,jdc):
+ """
+ Ferme le jdcdisplay spécifié par l'argument jdc
+ """
+ if jdc is self.JDCDisplay_courant:
+ # on ferme le jdcdisplay courant
+ self.closeSelectedJDC()
+ else:
+ # on ferme un autre jdcdisplay que le courant
+ old_JDCDisplay=self.JDCDisplay_courant
+ old_page=self.nb.getcurselection()
+
+ self.JDCDisplay_courant=jdc
+ self.JDC=jdc.jdc
+ numero_jdc=self.liste_JDCDisplay.index(jdc)
+ self.nb.selectpage(numero_jdc)
+ #print numero_jdc
+
+ self.closeSelectedJDC()
+ self.JDCDisplay_courant=old_JDCDisplay
+ self.JDC=old_JDCDisplay.jdc
+ self.nb.selectpage(old_page)
+
def closeJDC (self,event=None) :
+ """
+ Ferme le JDC associé au JDCDISPLAY selectionné
+ """
+ if self.JDCDisplay_courant :
+ self.JDCDisplay_courant.jdc.close()
+
+ def closeSelectedJDC (self) :
"""
Ferme le JDC courant et détruit l'onglet associé dans le notebook self.nb
"""
- if self.JDCDisplay_courant == None:
- return
if self.JDCDisplay_courant.modified == 'o' :
message = "Voulez-vous sauvegarder le jeu de commandes "+self.JDC.nom+" courant ?"
reponse = askyesno(title="Sauvegarde du jdc courant",
if test == 0 :
self.appli.affiche_infos("Sauvegarde impossible")
return
+
+ CONNECTOR.Disconnect(self.JDCDisplay_courant.jdc,"close",self.onClose,(self.JDCDisplay_courant,))
+ self.JDCDisplay_courant.supprime()
self.JDCDisplay_courant.jdc.supprime()
self.liste_JDCDisplay.remove(self.JDCDisplay_courant)
+ # Active le mecanisme de selection du notebook (selectJDC)
self.nb.delete(self.nb.getcurselection())
- #XXX CCAR: pour le moment mis en commentaire
- #self.JDC.unset_context()
- self.JDC = None
+
try:
index = self.nb.index(self.nb.getcurselection())
self.JDCDisplay_courant = self.liste_JDCDisplay[index]
self.JDC = self.JDCDisplay_courant.jdc
except:
+ self.JDC = None
self.JDCDisplay_courant = None
self.appli.toolbar.inactive_boutons()
"""
if mode == 'JDC':
if not hasattr(self,'JDC') : return
+ if self.JDC == None : return
titre="rapport de validation du jeu de commandes courant"
cr = self.JDC.report()
- self.update_jdc_courant()
+ #self.update_jdc_courant()
elif mode == 'CATA':
from Noyau.N_CR import CR
cr = CR()
texte_cr = str(cr)
self.visu_texte_cr = Fenetre(self.appli,titre=titre,texte=texte_cr)
- def openJDC(self,file=None):
+ def openJDC(self,event=None,file=None,units=None,enregistre="oui"):
"""
Demande à l'utilisateur quel JDC existant il veut ouvrir
"""
if self.code == 'ASTER':
- filetypes = ( ("format "+self.appli.format_fichier.get(), ".comm"),("Tous",'*'))
+ filetypes = ( ("format "+self.appli.format_fichier.get(), ".com*"),("Tous",'*'))
elif self.code == 'HOMARD' :
filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),("Tous",'*'))
else:
filetypes = ( ("format "+self.appli.format_fichier.get(), ".py"),)
if not hasattr(self,'initialdir'):
- #self.initialdir = self.appli.CONFIGURATION.rep_user
self.initialdir = self.appli.CONFIGURATION.initialdir
- if file.__class__.__name__ in ('Event',):
- file=None
+
if not file :
file = askopenfilename(title="Ouverture d'un fichier de commandes Aster",
defaultextension=".comm",
self.fileName = file
e=extension_fichier(file)
self.JDCName=stripPath(file)
- self.initialdir = os.path.dirname(file)
+ self.initialdir = os.path.dirname(os.path.abspath(file))
else :
return
- #XXX CCAR: pour le moment mis en commentaire
- #if self.JDCDisplay_courant:self.JDCDisplay_courant.jdc.unset_context()
format=self.appli.format_fichier.get()
# Il faut convertir le contenu du fichier en fonction du format
# Le convertisseur existe on l'utilise
p=convert.plugins[format]()
p.readfile(file)
- text=p.convert('exec')
+ text=p.convert('exec',self.appli)
if not p.cr.estvide():
self.appli.affiche_infos("Erreur à la conversion")
Fenetre(self.appli,
titre="compte-rendu d'erreurs, EFICAS ne sait pas convertir ce fichier",
texte = str(p.cr)).wait()
return
+ if enregistre == "oui" :
+ self.appli.listeFichiers.aOuvert(file)
else:
# Il n'existe pas c'est une erreur
self.appli.affiche_infos("Type de fichier non reconnu")
nom = self.JDCName,
rep_mat=self.appli.CONFIGURATION.rep_mat,
)
+ if units is not None:
+ J.recorded_units=units
+ J.old_recorded_units=units
+
J.analyse()
txt_exception = J.cr.get_mess_exception()
if txt_exception :
# des exceptions ont été levées à la création du JDC
# --> on affiche les erreurs mais pas le JDC
+ self.JDC=J
self.appli.affiche_infos("Erreur fatale au chargement de %s" %file)
- showerror("Erreur fatale au chargement d'un fichier",txt_exception)
+ if self.appli.test == 0 :
+ showerror("Erreur fatale au chargement d'un fichier",txt_exception)
else:
- self.ShowJDC(J,self.JDCName)
+ self.ShowJDC(J,self.JDCName,enregistre=enregistre)
self.appli.toolbar.active_boutons()
- # si le JDC ne contient rien (vide), on retourne ici
- if len(self.JDC.etapes) == 0 : return
- # dans le cas où le JDC est invalide, on affiche son CR
+ # si le JDC ne contient rien (vide), on retourne ici
+ if len(self.JDC.etapes) == 0 : return
+ # dans le cas où le JDC est invalide, on affiche son CR
if not self.JDC.isvalid():
- self.appli.top.update()
- self.visuCR(mode='JDC')
+ self.appli.top.update()
+ self.visuCR(mode='JDC')
+ return J
+
+ def deplieReplieNode(self):
+ self.JDCDisplay_courant.tree.tree.deplieReplieNode()
+
+ def selectArbreDown(self):
+ self.JDCDisplay_courant.tree.tree.canvas.focus_set()
+ self.JDCDisplay_courant.tree.tree.mot_down_force()
+ def selectArbreUp(self):
+ self.JDCDisplay_courant.tree.tree.canvas.focus_set()
+ self.JDCDisplay_courant.tree.tree.mot_up_force()
def GetLabelJDC(self,nb_jdc = 'absent'):
"""
"""
Sauvegarde le JDC courant.
Retourne 1 si la sauvegarde s'est bien faite, 0 sinon.
- Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il
+
+ - Si echo = 'oui' : interactif (l'utilisateur donne le nom sous lequel il
veut sauver le JDC
- Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
+ - Si echo = 'non' : muet (sauvegarde le JDC dans JDC.procedure)
"""
+ ok = 0
if not hasattr(self,'JDC') : return 0
format=self.appli.format_fichier.get()
if generator.plugins.has_key(format):
if format == 'homard':
self.jdc_homard=g.get_homard()
if not g.cr.estvide():
- print g.cr
self.appli.affiche_infos("Erreur à la generation")
showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
return
self.jdc_fini = string.replace(jdc_formate,'\r\n','\n')
if echo =='oui' or self.JDCDisplay_courant.fichier == None:
- return self.asknomsauvegardeJDC()
+ ok = self.asknomsauvegardeJDC()
elif self.JDCDisplay_courant.fichier != None :
- #PN Ajout --> Salome
- # Pour sauvegarde dans l etude si lancement depuis salome
- if self.appli.salome != 0:
- import eficasEtude
- self.appli.salome.rangeInStudy(self.JDCDisplay_courant.fichier)
- from panelsSalome import SALOME_UNIQUE_BASE_Panel
- if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
- self.appli.salome.creeConfigTxt(self.appli.CONFIGURATION.initialdir,SALOME_UNIQUE_BASE_Panel.dict_fichier_unite)
- #PN Fin Ajout --> Salome
- # le JDC a déjà un nom : on sauvegarde directement sans demander
- # un autre nom au développeur
- if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini) :
+ # le JDC a déjà un nom : on sauvegarde directement sans demander
+ # un autre nom au développeur
+ if not save_in_file(self.JDCDisplay_courant.fichier,self.jdc_fini,self.appli.dir) :
showinfo("Erreur","Problème à la sauvegarde du fichier :" + `self.JDCDisplay_courant.fichier`)
- return 0
- else :
+ #return 0
+ ok = 0
+ else :
if self.appli.format_fichier.get() == 'homard':
self.save_homard(self.JDCDisplay_courant.fichier,self.jdc_homard)
self.JDCDisplay_courant.stop_modif()
self.appli.affiche_infos("sauvegarde de "+`self.JDCDisplay_courant.fichier`+" effectuée")
- return 1
+ ok = 1
+
+ if ok and hasattr( self.appli, 'salome'):
+ # eficas a été lancé à partir deSalome
+ #1)ajout dans l'arbre d'étude du nom du jdc
+ ok, msg = self.appli.addJdcInSalome( self.JDCDisplay_courant.fichier )
+
+ #2)CS_pbruno ??
+ from panelsSalome import SALOME_UNIQUE_BASE_Panel
+ if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
+ print 'CS_pbruno if len(SALOMchier_unite) > 0 :???????'
+ self.appli.creeConfigTxt( self.appli.CONFIGURATION.initialdir, SALOME_UNIQUE_BASE_Panel.dict_fichier_unite )
+
+ #3)création/mise à jours d'un maillage dans Salome
+ self.appli.createOrUpdateMesh()
+ return ok
def asknomsauvegardeJDC(self):
""" Demande à l'utilsateur le nom sous lequel il veut sauvegarder le JDC courant """
sauvegarde = asksaveasfilename(title=titre,
defaultextension=defext,
filetypes = filtyp,
- initialdir = self.appli.CONFIGURATION.initialdir)
- #initialdir = self.appli.CONFIGURATION.rep_user)
+ initialdir = self.initialdir)
+ #initialdir = self.appli.CONFIGURATION.initialdir)
+ #initialdir = self.appli.CONFIGURATION.rep_user)
if sauvegarde :
- # PN ajout --> Salome
- # Pour sauvegarde dans l etude si lancement depuis salome
- if self.appli.salome != 0:
- import eficasEtude
- self.appli.salome.rangeInStudy(sauvegarde)
- from panelsSalome import SALOME_UNIQUE_BASE_Panel
- if len(SALOME_UNIQUE_BASE_Panel.dict_fichier_unite) > 0 :
- self.appli.salome.creeConfigTxt(self.appli.CONFIGURATION.initialdir,SALOME_UNIQUE_BASE_Panel.dict_fichier_unite)
- # PN fin ajout --> Salome
- if not save_in_file(sauvegarde,self.jdc_fini) :
+ if not save_in_file(sauvegarde,self.jdc_fini,None) :
showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`)
return 0
else :
# l'utilisateur a sauvegardé le JDC sous un autre nom
self.JDCDisplay_courant.fichier = sauvegarde
self.JDCName = self.JDC.nom = stripPath(sauvegarde)
+ self.JDC.changefichier(sauvegarde)
self.changeNomPage()
return 1
else :
liste = self.GetListeJDCaSauvegarder()
if liste != [] :
# Certains fichiers n'ont pas été sauvegardés ...
- if askyesno("Enregistrer modifications","Enregister les modifications ?") :
+ if askyesno("Enregistrer modifications","Enregistrer les modifications ?") :
test = self.saveall(liste)
if test != 1 :
return
Lance la suppression du noeud courant
"""
if not self.JDCDisplay_courant : return
- try:
- if self.JDCDisplay_courant.modified == 'n' :
- self.JDCDisplay_courant.init_modif()
- pere = self.JDCDisplay_courant.node_selected.parent
- # Le noeud n'est pas au 1er niveau
- if pere.parent.parent != None:
- self.JDCDisplay_courant.node_selected.delete()
- pere.select()
- else:
- noeudselecte = self.JDCDisplay_courant.node_selected
- parent = noeudselecte.parent
- enfants = parent.children
- index = enfants.index(noeudselecte)
- self.JDCDisplay_courant.node_selected.delete()
- try:
- enfants[index].select()
- except :
- enfants[index-1].select()
- except AttributeError:
- pass
+ self.JDCDisplay_courant.init_modif()
+ self.JDCDisplay_courant.node_selected.delete()
def visuJDC_py(self,event=None):
"""
Méthode permettant d'afficher dans une fenêtre à part l'écho au
- format python du jdc courant
+ format python du jdc courant
"""
if not hasattr(self,'JDC') : return
jdc_fini = self.get_text_JDC('python')
def visuJDC(self):
"""
Méthode permettant d'afficher dans une fenêtre à part l'écho au
- format .comm ou .py du jdc courant
+ format .comm ou .py du jdc courant
"""
if not hasattr(self,'JDC') : return
titre = 'fichier '+ self.JDCName + ' à la syntaxe '+ self.code
g=generator.plugins[format]()
jdc_formate=g.gener(self.JDC,format='beautifie')
if not g.cr.estvide():
- print g.cr
self.appli.affiche_infos("Erreur à la generation")
showerror("Erreur à la generation","EFICAS ne sait pas convertir ce JDC")
return
cle_doc = string.replace(cle_doc,'-','')
commande = self.appli.CONFIGURATION.exec_acrobat
nom_fichier = cle_doc+".pdf"
- rep_fichier = cle_doc[0:2]
- fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,rep_fichier,nom_fichier))
+ fichier = os.path.abspath(os.path.join(self.appli.CONFIGURATION.path_doc,nom_fichier))
if os.name == 'nt':
os.spawnv(os.P_NOWAIT,commande,(commande,fichier,))
elif os.name == 'posix':
showerror("Impossible de visualiser le fichier initial",
"EFICAS ne peut visualiser le fichier initial.\nIl s'agit d'un nouveau JDC")
return
+ os.chdir(self.appli.dir)
f=open(self.JDCDisplay_courant.fichier,'r')
texte=f.read()
f.close()
"""
test = 1
for JDCDisplay in liste :
+ self.JDCDisplay_courant=JDCDisplay
self.JDC = JDCDisplay.jdc
test = test * self.saveJDC(echo = 'non')
return test
f.close()
except:
print "Pb a la sauvegarde sous le format homard"
- if self.appli.salome != 0:
+ if hasattr( self.appli, 'salome'):
import eficasEtude
- self.appli.salome.rangeInStudy(file_homard)
+ self.appli.salome.rangeInStudy(file_homard,"_CONF")
# ---------------------------------------------------------------------------
-# Méthodes liées aux mots-clés inconnus
+# Méthodes liées aux mots-clés inconnus
# ---------------------------------------------------------------------------
def mc_inconnus(self):
def update_jdc_courant(self):
self.JDCDisplay_courant.update()
+ def TraduitFichier(self):
+ directory = self.appli.CONFIGURATION.rep_user
+ FichieraTraduire = askopenfilename(title="Nom du Fichier à Traduire",
+ defaultextension=".comm",
+ initialdir = directory
+ )
+ if (FichieraTraduire == "" or FichieraTraduire == () ) : return
+ i=FichieraTraduire.rfind(".")
+ Feuille=FichieraTraduire[0:i]
+ FichierTraduit=Feuille+"v8.comm"
+ log=self.initialdir+"/convert.log"
+ os.system("rm -rf "+log)
+ os.system("rm -rf "+FichierTraduit)
+ Pmw.showbusycursor()
+ traduitV7V8.traduc(FichieraTraduire,FichierTraduit,log)
+ Pmw.hidebusycursor()
+ Entete="Fichier Traduit : "+FichierTraduit +"\n\n"
+ titre = "conversion de "+ FichieraTraduire
+
+ if os.stat(log)[6] != 0L :
+ f=open(log)
+ texte_cr= f.read()
+ f.close()
+ else :
+ texte_cr = Entete
+ commande="diff "+FichieraTraduire+" "+FichierTraduit+" >/dev/null"
+ try :
+ if os.system(commande) == 0 :
+ texte_cr = texte_cr + "Pas de difference entre le fichier V7 et le fichier traduit"
+ except :
+ pass
+
+ cptrendu = FenetreSurLigneWarning(self.appli,titre=titre,texte=texte_cr)