From a2b6288a9353907ab7addcb88ab87bb935700b86 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Tue, 29 Nov 2005 11:17:21 +0000 Subject: [PATCH] PN --- Editeur/appli.py | 4 - Editeur/bureau.py | 78 ++++----- Editeur/cataediteur.py | 6 +- Editeur/comploader.py | 21 ++- Editeur/compocommandecomm.py | 8 +- Editeur/compooper.py | 11 +- Editeur/composimp.py | 2 +- Editeur/listePatrons.py | 4 +- Editeur/panels.py | 1 - Editeur/panelsSalome.py | 93 ++++++++-- Editeur/treewidget.py | 49 ++++-- Editeur/widgets.py | 2 +- Extensions/param2.py | 78 +++++++++ Extensions/parametre.py | 320 +++++++++++++++++----------------- Ihm/I_MCSIMP.py | 57 ++---- generator/generator_python.py | 18 +- 16 files changed, 454 insertions(+), 298 deletions(-) create mode 100644 Extensions/param2.py diff --git a/Editeur/appli.py b/Editeur/appli.py index 072fb545..83309694 100644 --- a/Editeur/appli.py +++ b/Editeur/appli.py @@ -81,10 +81,6 @@ class APPLI: self.load_appli_composants() self.listeFichiers=listeFichiers.listeFichiers(self) self.listePatrons=listePatrons.listePatrons(self) - - # PN : ajout d un attribut pour indiquer si - # l appli a ete lance depuis Salome - self.salome=0 self.dir=None # Fermer le splash et deiconifier la fenetre principale si on n'est pas en test diff --git a/Editeur/bureau.py b/Editeur/bureau.py index 7f960dc4..d5862e5b 100644 --- a/Editeur/bureau.py +++ b/Editeur/bureau.py @@ -211,6 +211,9 @@ class BUREAU: self.initialdir = self.appli.CONFIGURATION.rep_user self.nb.selectpage(label_onglet) self.nb.setnaturalsize() + self.nb.bind_all("",lambda e,s=self:s.selectArbreDown()) + self.nb.bind_all("",lambda e,s=self:s.selectArbreUp()) + self.nb.bind_all("",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) @@ -386,9 +389,9 @@ class BUREAU: if not self.JDC.isvalid(): self.appli.top.update() self.visuCR(mode='JDC') - # On a ouvert un Patron - self.nb.bind_all("",lambda e,s=self:s.selectArbreDown()) - self.nb.bind_all("",lambda e,s=self:s.selectArbreUp()) + + def deplieReplieNode(self): + self.JDCDisplay_courant.tree.tree.deplieReplieNode() def selectArbreDown(self): self.JDCDisplay_courant.tree.tree.canvas.focus_set() @@ -426,6 +429,7 @@ class BUREAU: veut sauver le JDC 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): @@ -446,37 +450,35 @@ class BUREAU: 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) - #try : - if ( 1 == 1 ) : - import eficasCL - MyCLinit=eficasCL.CLinit() - MyCLinit.traiteCL() - MyCLinit.clean() - #except : - else : - pass - #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,self.appli.dir) : + # 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 """ @@ -494,24 +496,6 @@ class BUREAU: #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) - #try : - if ( 1 == 1 ): - import eficasCL - MyCLinit=eficasCL.CLinit() - MyCLinit.traiteCL() - MyCLinit.clean() - #except : - else : - pass - # PN fin ajout --> Salome if not save_in_file(sauvegarde,self.jdc_fini,None) : showinfo("Erreur","Problème à la sauvegarde du fichier "+`sauvegarde`) return 0 @@ -715,7 +699,7 @@ class BUREAU: 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,"_CONF") diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py index 2d8ae0ed..6e4d6a50 100644 --- a/Editeur/cataediteur.py +++ b/Editeur/cataediteur.py @@ -40,7 +40,7 @@ import definition_cata # __version__="$Name: $" -__Id__="$Id: cataediteur.py,v 1.6 2004/09/20 09:24:13 eficas Exp $" +__Id__="$Id: cataediteur.py,v 1.7 2005/08/09 09:54:02 eficas Exp $" # Fonte_Niveau = fontes.canvas_gras_italique @@ -857,8 +857,8 @@ class CataEditeur: hull_width = 800, hull_height = 500, orient = 'horizontal') - self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.5) - self.pane.add('panel',min = 0.4, max = 0.6, size = 0.5) + self.pane.add('canvas',min = 0.4, max = 0.6, size = 0.45) + self.pane.add('panel',min = 0.4, max = 0.6, size = 0.55) self.pane.pack(expand =1, fill = 'both') self.scrolledcanvas = Pmw.ScrolledCanvas(self.pane.pane('canvas'), hull_width=1., diff --git a/Editeur/comploader.py b/Editeur/comploader.py index 771fa116..1b9ddaa9 100644 --- a/Editeur/comploader.py +++ b/Editeur/comploader.py @@ -58,6 +58,8 @@ def gettreeitem(object): Cette classe item dépend bien sûr de la nature de object, d'où l'interrogation du dictionnaire composants """ + + if type(object) == types.InstanceType: # Si la definition de l'objet a un attribut itemeditor, il indique # la classe a utiliser pour l'item @@ -73,15 +75,22 @@ def gettreeitem(object): except: pass - # Puis une eventuelle classe heritee (aleatoire car sans ordre) - for e in composants.keys(): - if isinstance(object,e): - itemtype= composants[e] - return itemtype + try : + for e in composants.keys(): + if isinstance(object,e): + itemtype= composants[e] + return itemtype + except : + pass + + # Puis une eventuelle classe heritee (aleatoire car sans ordre) + for e in composants.keys(): + if isinstance(object,e): + itemtype= composants[e] + return itemtype # Apres poum ??? Les lignes suivantes sont elles utiles ? # Si on n'a rien trouve dans les composants on utilise l'objet par defaut - print ObjectTreeItem print itemtype itemtype=ObjectTreeItem return itemtype diff --git a/Editeur/compocommandecomm.py b/Editeur/compocommandecomm.py index 169f0b19..ddbd6ebd 100644 --- a/Editeur/compocommandecomm.py +++ b/Editeur/compocommandecomm.py @@ -68,10 +68,10 @@ class COMMANDE_COMMPanel(panels.OngletPanel): self.bouton_ann = Button(self.fr_but,text='Annuler',command=self.display_valeur,width=14) self.bouton_unc = Button(self.fr_but,text='Décommentariser',command=self.uncomment,width=14) - self.bouton_val.place(relx=0.20,rely=0.5,relheight=0.8,anchor='center') - self.bouton_ann.place(relx=0.40,rely=0.5,relheight=0.8,anchor='center') - self.bouton_sup.place(relx=0.60,rely=0.5,relheight=0.8,anchor='center') - self.bouton_unc.place(relx=0.80,rely=0.5,relheight=0.8,anchor='center') + self.bouton_val.place(relx=0.1,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + self.bouton_ann.place(relx=0.30,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + self.bouton_sup.place(relx=0.50,rely=0.5,relheight=1,relwidth=0.20,anchor='center') + self.bouton_unc.place(relx=0.75,rely=0.5,relheight=1,relwidth=0.25,anchor='center') def change_valeur(self): """ diff --git a/Editeur/compooper.py b/Editeur/compooper.py index 1f983051..a05b8f46 100644 --- a/Editeur/compooper.py +++ b/Editeur/compooper.py @@ -37,9 +37,10 @@ class OPERPanel(panels.OngletPanel): nb.add('Commentaire',tab_text='Paramètre/Commentaire') panneau=Pmw.PanedWidget(nb.page("Mocles"), orient='horizontal') - panneau.add('left',min=0.4,max=0.6,size=0.5) - panneau.add('right',min=0.4,max=0.6,size=0.5) + panneau.add('left',min=0.4,max=0.60,size=0.50) + panneau.add('right',min=0.4,max=0.60,size=0.50) panneau.pack(expand=1,fill='both') + panneau.setnaturalsize() self.makeCommandePage(nb.page("Commande")) self.makeConceptPage_oper(nb.page("Concept")) self.makeMoclesPage(panneau.pane('left')) @@ -47,7 +48,7 @@ class OPERPanel(panels.OngletPanel): #self.makeCommentairePage(nb.page("Commentaire")) self.makeParamCommentPage_for_etape(nb.page("Commentaire")) nb.tab('Mocles').focus_set() - nb.setnaturalsize() + self.nb.setnaturalsize() self.affiche() def makeConceptPage_oper(self,page): @@ -296,9 +297,9 @@ class EtapeTreeItem(Objecttreeitem.ObjectTreeItem): commande_comment.jdc = commande_comment.parent = self.object.jdc pos=self.object.parent.etapes.index(self.object) - parent= self.object.parent + parent=self.object.parent self.object.parent.suppentite(self.object) - parent.addentite(commande_comment,pos) + addentite(commande_comment,pos) return commande_comment diff --git a/Editeur/composimp.py b/Editeur/composimp.py index b5e71374..cf8eae08 100644 --- a/Editeur/composimp.py +++ b/Editeur/composimp.py @@ -116,7 +116,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): #--------------------------------------------------------- # PN ajout pour lancement de Salome #--------------------------------------------------------- - if self.appli.salome != 0 : + if hasattr( self.appli, 'salome' ): import panelsSalome self.select_noeud_maille=0 diff --git a/Editeur/listePatrons.py b/Editeur/listePatrons.py index 532c01ed..090366e5 100644 --- a/Editeur/listePatrons.py +++ b/Editeur/listePatrons.py @@ -5,13 +5,15 @@ import Tkinter # le dictionnaire sous menu est indexe parceque l'ordre des # recherches est important -sous_menu={0:{"3D":"3D.comm"},1:{"pou":"pou.comm"},2:{"divers":"comm"}} +sous_menu={0:{"3D":"3D.comm"},1:{"poutre":"pou.comm"},2:{"salome":"salome.comm"},3:{"divers":"comm"}} class listePatrons : def __init__(self,appli): self.appli=appli rep_ini=self.appli.CONFIGURATION.rep_ini + if self.appli.code != "ASTER" : + return self.rep_patrons=rep_ini+"/../Editeur/Patrons" self.liste={} self.traite_liste() diff --git a/Editeur/panels.py b/Editeur/panels.py index b5a30a6f..6814ec84 100644 --- a/Editeur/panels.py +++ b/Editeur/panels.py @@ -308,7 +308,6 @@ class OngletPanel(Panel) : """ self.label = Label(page,text='Nom du concept :') self.label.place(relx=0.1,rely=0.4) - self.label.bind("",lambda e,s=self:s.execTutu()) self._any = Entry(page,relief='sunken') self._any.place(relx=0.35,rely=0.4,relwidth=0.5) self._any.bind("",lambda e,s=self:s.execConcept()) diff --git a/Editeur/panelsSalome.py b/Editeur/panelsSalome.py index cbe30ffc..82b8da10 100644 --- a/Editeur/panelsSalome.py +++ b/Editeur/panelsSalome.py @@ -21,11 +21,11 @@ from uniqueassdpanel import UNIQUE_ASSD_Panel_Reel from Noyau.N_CR import justify_text import traceback -import SalomePyQt -import salome +#import SalomePyQt +import salome # CS_pbruno à poubelliser import images -import SMESH_utils -sgQt=SalomePyQt.SalomePyQt() +#import SMESH_utils +#sgQt=SalomePyQt.SalomePyQt() @@ -96,6 +96,64 @@ class SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel(PLUSIEURS_BASE_OR_UNELISTE_Panel): class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): + + def __init__(self,parent,panneau,node): + PLUSIEURS_BASE_Panel.__init__( self, parent, panneau, node ) + self.selected_valeur = None + + def add_valeur_plusieurs_base(self,name=None): + try: + valeur,validite,commentaire=self.get_valeur() + #print 'add_valeur_plusieurs_base', name + #print 'valeur = %s, validite = %s,commentaire = %s'%( valeur,validite,commentaire ) + if not valeur: # sélection dans salome + #print 'CS_pbruno selection SALOME' + strSelection = '' + + selection, msg = self.parent.appli.selectGroupFromSalome() + + #print 'CS_pbruno selection SALOME selection ->',selection + #print 'CS_pbruno selection SALOME msg ->',msg + + if selection: + for oneSelection in selection: + strSelection +=str( oneSelection ) + strSelection +=',' + + strSelection = strSelection.rstrip(',') + #print 'CS_pbruno selection SALOME strSelection ->',strSelection + + self.display_valeur( strSelection ) + + PLUSIEURS_BASE_Panel.add_valeur_plusieurs_base( self, name ) + if msg: + self.parent.appli.affiche_infos(msg) + self.erase_valeur() + except: + print ' erreur add_valeur_plusieurs_base' #CS_pbruno : afficher boite de dialogue ici ? + + def makeValeurPage(self,page): + """ + Crée la page de saisie d'une liste de valeurs à priori quelconques, + cad qui ne sont pas à choisir dans une liste prédéfinie + """ + PLUSIEURS_BASE_Panel.makeValeurPage(self,page) + self.c = Button( self.frame_choix, text='Visualiser',command=self.displayInSalomeGeom ) + self.c.place( relx=0, rely=0.55,relwidth=0.55) + + #self.c.place(relx=0.08,rely=0.55,relwidth=0.35) + #self.c.place(relx=0.08,rely=0.55 ) + + def displayInSalomeGeom( self ): + if self.selected_valeur: + ok, msgError = self.parent.appli.displayShape( self.selected_valeur ) + if not ok: + self.parent.appli.affiche_infos(msgError) + + +""" +class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): + def convertit_group_no_from_salome(self,liste_in): newr=[] #try: @@ -144,19 +202,27 @@ class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): def convertit_entrees_en_valeurs(self,entrychaine): if SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel.__dict__.has_key(self.clef_fonction): - valeur=apply(SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel.__dict__[self.clef_fonction],(self,entrychaine)) + print 'CS_pbruno AAAAAAAAAAAAA' + valeur=apply(SALOME_PLUSIEURS_BASE_OR_UNELISTE_Panel.__dict__[self.clef_fonction],(self,entrychaine)) else : if (self.clef_fonction.find("GROUP_NO") != -1) and (self.clef_fonction.find("GROUP_MA") != -1) : + print 'CS_pbruno BBBBBBBBBBBBBBBBBBB' if (self.clef_fonction.find("GROUP_NO") < self.clef_fonction.find("GROUP_MA")) : + print 'CS_pbruno CCCCCCCCCCCCCCCCCCCCCCCCCC' valeur=self.convertit_group_maille_from_salome(entrychaine) else : + print 'CS_pbruno DDDDDDDDDDDDDDDDDDDDDDDDD' valeur=self.convertit_group_no_from_salome(entrychaine) elif self.clef_fonction.find("GROUP_NO") != -1 : + print 'CS_pbruno EEEEEEEEEEEEEEEEEEEEEEEEE' valeur=self.convertit_group_no_from_salome(entrychaine) else : + print 'CS_pbruno FFFFFFFFFFFFFFFFFFFFFFFF' if self.clef_fonction.find("GROUP_MA") != -1 : + print 'CS_pbruno GGGGGGGGGGGGGGGGGGGGGGGGGGG' valeur=self.convertit_group_maille_from_salome(entrychaine) else : + print 'CS_pbruno HHHHHHHHHHHHHHHHHHHHHH' print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" print "Pb pas de fonction de conversion de la valeur Salome en valeur Aster" print "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" @@ -165,9 +231,9 @@ class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): return valeur def sup_valeur_from_salome(self,name=None): - """ + #"" Méthode qui sert à retirer de la liste des valeurs la valeur sélectionnée - """ + #"" liste_valeurs = self.Liste_valeurs.get_liste() liste_valeurs_salome=self.Liste_valeurs_salome.get_liste() entrychaine=salome.sg.getAllSelected() @@ -215,8 +281,9 @@ class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): if i not in liste_valeurs : liste_valeurs.append(i) self.Liste_valeurs.put_liste(liste_valeurs) - - def add_valeur_from_salome(self,name=None): + + + def add_valeur_from_salome(self,name=None): entrychaine=salome.sg.getAllSelected() self.sortie.delete(0,END) self.entrygroupe.delete(0,END) @@ -272,12 +339,13 @@ class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): print "impossible d'évaluer %s" %val self.parent.appli.affiche_infos("Valeur incorrecte : ajout à la liste refusé") - + def makeValeurPage(self,page): - """ + #"" Crée la page de saisie d'une liste de valeurs à priori quelconques, cad qui ne sont pas à choisir dans une liste prédéfinie - """ + #"" + # On récupère la bulle d'aide du panneau, l'objet, l'aide,min et max (cardinalité de la liste), # et la liste des valeurs déjà affectées à l'objet courant bulle_aide=self.get_bulle_aide() @@ -385,6 +453,7 @@ class SALOME_PLUSIEURS_BASE_Panel(PLUSIEURS_BASE_Panel): for but in (bouton_accepter,bouton_annuler): but.pack(side='left',padx=5) +""" # ------------------------------------------------------------------------------# diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py index 8fba5f71..1a5a9799 100644 --- a/Editeur/treewidget.py +++ b/Editeur/treewidget.py @@ -28,7 +28,7 @@ from Ihm import CONNECTOR # __version__="$Name: $" -__Id__="$Id: treewidget.py,v 1.26 2005/11/03 09:03:49 eficas Exp $" +__Id__="$Id: treewidget.py,v 1.27 2005/11/18 15:58:19 eficas Exp $" # Fonte_Standard = fontes.standard @@ -38,10 +38,8 @@ class Tree : self.item = jdc_item self.scrolledcanvas = scrolledcanvas self.canvas = self.scrolledcanvas.component('canvas') - self.id_up=self.canvas.bind("", self.page_up) - self.id_down=self.canvas.bind("", self.page_down) - #self.id_uup=self.canvas.bind("", self.unit_up) - #self.id_udown=self.canvas.bind("", self.unit_down) + self.id_up=self.canvas.bind("", self.page_up) + self.id_down=self.canvas.bind("", self.page_down) self.id_um=self.canvas.bind("", self.mot_up) self.id_dm=self.canvas.bind("", self.mot_down) self.id_s=self.canvas.bind("<1>", self.canvas_select) @@ -82,9 +80,12 @@ class Tree : self.canvas.focus_set() def mot_up_force(self): - self.node_selected.select_mot_previous() + self.node_selected.select_mot_prev() self.canvas.focus_set() + def deplieReplieNode(self): + self.node_selected.deplieReplieNode() + def build_children(self): """ Construit la liste des enfants de self """ self.children = [] @@ -117,8 +118,6 @@ class Tree : #print "supprime",self self.canvas.unbind("",self.id_up) self.canvas.unbind("",self.id_down) - self.canvas.unbind("",self.id_uup) - self.canvas.unbind("",self.id_udown) self.canvas.unbind("",self.id_um) self.canvas.unbind("",self.id_dm) self.canvas.unbind("<1>",self.id_s) @@ -187,7 +186,6 @@ class Node : self.parent = parent self.item = item self.connect() - self.command = command self.rmenu=rmenu self.tree = self.parent.tree @@ -429,6 +427,31 @@ class Node : else : self.parent.select_next(index) + def select_mot_prev(self): + index = self.parent.children.index(self) - 1 + try : + if index > -1 : + self.parent.children[index].select() + if self.parent.children[index].state=="expanded": + print len(self.parent.children[index].children) + if len(self.parent.children[index].children)!=0 : + max=len(self.parent.children[index].children) - 1 + self.parent.children[index].children[max].select() + else : + self.parent.children[index].select() + else : + self.parent.children[index].select() + elif self.parent is self.tree: + pass + else : + self.parent.select() + except: + if self.parent is self.tree: + pass + else : + self.parent.select_previous() + + def select_mot_previous(self): index = self.parent.children.index(self) - 1 try : @@ -622,7 +645,13 @@ class Node : for child in self.children: child.state='collapsed' child.collapse_children() - + + def deplieReplieNode(self): + if self.state == 'expanded': + self.collapse() + else : + self.expand_node() + def collapse(self,event = None): """ Collapse self et descendants et retrace self """ nb = self.get_nb_children() diff --git a/Editeur/widgets.py b/Editeur/widgets.py index 48e3e9fe..4524a803 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -83,7 +83,7 @@ class Fenetre : self.zone_texte.pack(side='top',fill='both',expand=1,padx=5,pady=10) self.zone_texte.configure(yscrollcommand=self.scroll_v.set) # définition des boutons - self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit) + self.but_quit = Button(self.frame_boutons,text = "Fermer",command=self.quit,default='active') self.but_save = Button(self.frame_boutons,text = "sauver",command = self.save) self.but_quit.place(relx=0.4,rely=0.5,anchor='center') self.but_save.place(relx=0.6,rely=0.5,anchor='center') diff --git a/Extensions/param2.py b/Extensions/param2.py new file mode 100644 index 00000000..d02aa46d --- /dev/null +++ b/Extensions/param2.py @@ -0,0 +1,78 @@ +from __future__ import division +import math + +def mkf(value): + if type(value) in (type(1), type(1L), type(1.5), type(1j),type("hh")): + return Constant(value) + elif isinstance(value, Formula): + return value + else: + raise TypeError, ("Can't make formula from", value) + +class Formula(object): + def __complex__(self): return complex(self.eval()) + def __int__(self): return int(self.eval()) + def __long__(self): return long(self.eval()) + def __float__(self): return float(self.eval()) + def __pos__(self): return self # positive + def __neg__(self): return Unop('-', self) + def __add__(self, other): return Binop('+', self, other) + def __radd__(self, other): return Binop('+', other, self) + def __sub__(self, other): return Binop('-', self, other) + def __rsub__(self, other): return Binop('-', other, self) + def __mul__(self, other): return Binop('*', self, other) + def __rmul__(self, other): return Binop('*', other, self) + def __div__(self, other): return Binop('/', self, other) + def __truediv__(self, other): return Binop('/', self, other) + def __rdiv__(self, other): return Binop('/', other, self) + def __pow__(self, other): return Binop('**', self, other) + def __rpow__(self, other): return Binop('**', other, self) + def __getitem__(self,i):return Binop('[]',self,i) + +class Binop(Formula): + opmap = { '+': lambda a, b: a + b, + '*': lambda a, b: a * b, + '-': lambda a, b: a - b, + '/': lambda a, b: a / b, + '**': lambda a, b: a ** b, + '[]': lambda a, b: a[b] , + } + def __init__(self, op, value1, value2): + self.op = op + self.values = mkf(value1), mkf(value2) + def __str__(self): + if self.op == '[]': + return "(%s[%s])" % (self.values[0], self.values[1]) + else: + return "(%s %s %s)" % (self.values[0], self.op, self.values[1]) + def __repr__(self): + if self.op == '[]': + return "(%s[%s])" % (self.values[0], self.values[1]) + else: + return "(%s %s %s)" % (self.values[0], self.op, self.values[1]) + def eval(self): + result= self.opmap[self.op](self.values[0].eval(), + self.values[1].eval()) + while isinstance(result,Formula): + result=result.eval() + return result + +class Unop(Formula): + opmap = { '-': lambda x: -x, + 'sin': lambda x: math.sin(x), + 'cos': lambda x: math.cos(x) } + def __init__(self, op, arg): + self._op = op + self._arg = mkf(arg) + def __str__(self): + return "%s(%s)" % (self._op, self._arg) + def eval(self): + return self.opmap[self._op](self._arg.eval()) + +class Constant(Formula): + def __init__(self, value): self._value = value + def eval(self): return self._value + def __str__(self): return str(self._value) + +def cos(f): return Unop('cos', f) +def sin(f): return Unop('sin', f) diff --git a/Extensions/parametre.py b/Extensions/parametre.py index ceaa7fb9..28b6bd87 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -34,8 +34,9 @@ from math import * from Noyau.N_CR import CR from Noyau import N_OBJECT from Ihm import I_OBJECT +from param2 import * -class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : +class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT,Formula) : """ Cette classe permet de créer des objets de type PARAMETRE cad des affectations directes dans le jeu de commandes (ex: a=10.) @@ -65,164 +66,164 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : param_item=ITEM_PARAMETRE(self,key) return param_item - def __neg__(self): - try: - return -1*self.valeur - except: - print "******* Probleme : pas de valeur négative" - return None +# def __neg__(self): +# try: +# return -1*self.valeur +# except: +# print "******* Probleme : pas de valeur négative" +# return None - def __add__(self,a): - try : - return self.valeur+a.valeur - except : - print "******* Probleme : a l addition" - return None - - def __radd__(self,a): - try : - return self.valeur+a.valeur - except : - print "******* Probleme : a l addition" - return None - - def __sub__(self,a): - try : - return self.valeur - a.valeur - except : - print "******* Probleme : a la soustraction" - return None - - def __rsub__(self,a): - try : - return a.valeur - self.valeur - except : - print "******* Probleme : a la soustraction" - return None - - - def __mul__(self,a): - try : - return self.valeur*a.valeur - except : - print "******* Probleme : a la multiplication" - return None - - def __rmul__(self,a): - try : - return self.valeur*a.valeur - except : - print "******* Probleme : a la multiplication" - return None - - def __add__(self,other): - try : - return self.valeur+other - except : - print "******* Probleme : a l addition" - return None - - def __radd__(self,other): - try : - return self.valeur+other - except : - print "******* Probleme : a l addition" - return None - - def __sub__(self,other): - try : - return self.valeur - other - except : - print "******* Probleme : a la soustraction" - return None - - def __rsub__(self,other): - try : - return other - self.valeur - except : - print "******* Probleme : a la soustraction" - return None - - def __mul__ (self,other): - retour=None - try : - retour = eval(self.valeur) * other - except : - try : - retour = self.valeur * other - except : - try : - retour = eval(self.valeur) * eval(other) - except : - try : - retour = self.valeur * eval(other) - except : - print other - print "******* Probleme : a la multiplication _mul__" - return retour - - def __rmul__ (self,other): - retour=None - try : - retour = eval(self.valeur) * other - except : - try : - retour = self.valeur * other - except : - try : - retour = eval(self.valeur) * eval(other) - except : - print "******* Probleme : a la multiplication __rmul__" - return retour - - - def __div__(self,other): - retour=None - try: - retour = eval(self.valeur) / other - except : - try : - retour = self.valeur / other - except : - print "******* Probleme : a la division" - return retour - - - def cos(self): - try : - retour=cos(self.valeur) - return retour - except: - print "pb pour cosinus" - - def sin(self): - try : - retour=sin(self.valeur) - return retour - except: - print "pb pour sinus" - - def tan(self): - try : - retour=tan(self.valeur) - return retour - except: - print "pb pour tangente" - - def log(self): - try : - retour=log(self.valeur) - return retour - except: - print "pb pour log" - - def sqrt(self): - try : - retour=sqrt(self.valeur) - return retour - except: - print "pb pour sqrt" - +# def __add__(self,a): +# try : +# return self.valeur+a.valeur +# except : +# print "******* Probleme : a l addition" +# return None + +# def __radd__(self,a): +# try : +# return self.valeur+a.valeur +# except : +# print "******* Probleme : a l addition" +# return None + +# def __sub__(self,a): +# try : +# return self.valeur - a.valeur +# except : +# print "******* Probleme : a la soustraction" +# return None + +# def __rsub__(self,a): +# try : +# return a.valeur - self.valeur +# except : +# print "******* Probleme : a la soustraction" +# return None + + +# def __mul__(self,a): +# try : +# return self.valeur*a.valeur +# except : +# print "******* Probleme : a la multiplication" +# return None + +# def __rmul__(self,a): +# try : +# return self.valeur*a.valeur +# except : +# print "******* Probleme : a la multiplication" +# return None + +# def __add__(self,other): +# try : +# return self.valeur+other +# except : +# print "******* Probleme : a l addition" +# return None + +# def __radd__(self,other): +# try : +# return self.valeur+other +# except : +# print "******* Probleme : a l addition" +# return None + +# def __sub__(self,other): +# try : +# return self.valeur - other +# except : +# print "******* Probleme : a la soustraction" +# return None + +# def __rsub__(self,other): +# try : +# return other - self.valeur +# except : +# print "******* Probleme : a la soustraction" +# return None + +# def __mul__ (self,other): +# retour=None +# try : +# retour = eval(self.valeur) * other +# except : +# try : +# retour = self.valeur * other +# except : +# try : +# retour = eval(self.valeur) * eval(other) +# except : +# try : +# retour = self.valeur * eval(other) +# except : +# print other +# print "******* Probleme : a la multiplication _mul__" +# return retour +# +# def __rmul__ (self,other): +# retour=None +# try : +# retour = eval(self.valeur) * other +# except : +# try : +# retour = self.valeur * other +# except : +# try : +# retour = eval(self.valeur) * eval(other) +# except : +# print "******* Probleme : a la multiplication __rmul__" +# return retour +# +# +# def __div__(self,other): +# retour=None +# try: +# retour = eval(self.valeur) / other +# except : +# try : +# retour = self.valeur / other +# except : +# print "******* Probleme : a la division" +# return retour +# +# +# def cos(self): +# try : +# retour=cos(self.valeur) +# return retour +# except: +# print "pb pour cosinus" +# +# def sin(self): +# try : +# retour=sin(self.valeur) +# return retour +# except: +# print "pb pour sinus" +# +# def tan(self): +# try : +# retour=tan(self.valeur) +# return retour +# except: +# print "pb pour tangente" +# +# def log(self): +# try : +# retour=log(self.valeur) +# return retour +# except: +# print "pb pour log" +# +# def sqrt(self): +# try : +# retour=sqrt(self.valeur) +# return retour +# except: +# print "pb pour sqrt" +# def interprete_valeur(self,val): """ Essaie d'interpréter val (chaîne de caractères)comme : @@ -475,6 +476,9 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : def reset_context(self): pass + def eval(self): + return self.valeur + class COMBI_PARAMETRE : def __init__(self,chainevaleur,valeur): self.chainevaleur=chainevaleur diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index c3d8f4e0..9f09d948 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -305,6 +305,10 @@ class MCSIMP(I_OBJECT.OBJECT): itparam=self.cherche_item_parametre(new_valeur) if itparam: return itparam,1 + try : + object=eval(new_valeur.valeur,d) + except : + pass if CONTEXT.debug : traceback.print_exc() return None,0 @@ -487,45 +491,6 @@ class MCSIMP(I_OBJECT.OBJECT): self.jdc.mc_globaux[self.nom]=self #-------------------------------------------------------------------------------- -# PN : ajout pour Salome des methodes suivantes (jusqu aux méthodes surchargees) -#-------------------------------------------------------------------------------- - def get_salome_valeurs(self): - l=[] - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - if self.list_salome_valeurs != [] : - for val in self.list_salome_valeurs: - l.append(val) - return l - - def put_salome_valeurs(self,list): - self.list_salome_valeurs=[] - for val in list: - self.list_salome_valeurs.append(val) - - def add_salome_valeurs(self,val): - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - try: - self.list_salome_valeurs.append(val) - except : - try: - for uneval in val : - self.list_salome_valeurs.append(uneval) - except : - pass - - def has_salome_valeurs(self): - if not hasattr(self,'list_salome_valeurs'): - self.list_salome_valeurs=[] - if self.list_salome_valeurs != []: - return true - else: - return false - -#-------------------------------------------------------------------------------- -# PN : fin ajout pour Salome -#-------------------------------------------------------------------------------- #ATTENTION SURCHARGE : toutes les methodes ci apres sont des surcharges du Noyau et de Validation # Elles doivent etre reintegrees des que possible @@ -598,3 +563,17 @@ class MCSIMP(I_OBJECT.OBJECT): return self.valid + def verif_typeihm(self,val,cr='non'): + try : + self.val.eval() + return 1 + except : + pass + return self.verif_type(val,cr) + + def verif_typeliste(self,val,cr='non') : + verif=0 + for v in val : + verif=verif+self.verif_typeihm(v,cr) + return verif + diff --git a/generator/generator_python.py b/generator/generator_python.py index 0fbf2c71..bebd399f 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -29,6 +29,7 @@ import types,string,re from Noyau import N_CR from Noyau.N_utils import repr_float import Accas +import Extensions from Extensions.parametre import ITEM_PARAMETRE from Formatage import Formatage @@ -493,13 +494,15 @@ class PythonGenerator: if hasattr(obj.etape,'sdprods') and val in obj.etape.sdprods : s = "CO('"+ self.generator(val) +"')" elif val.__class__.__name__ == 'CO': - s = "CO('"+ self.generator(val) +"')" + s = "CO('"+ self.generator(val) +"')" elif isinstance(val,Accas.PARAMETRE): - # il ne faut pas prendre la string que retourne gener - # mais seulement le nom dans le cas d'un paramètre - s = val.nom + # il ne faut pas prendre la string que retourne gener + # mais seulement le nom dans le cas d'un paramètre + s = val.nom + elif isinstance(val,Extensions.parametre.PARAMETRE): + s = val.nom else: - s = self.generator(val) + s = self.generator(val) elif type(val) == types.FloatType : # Pour un flottant on utilise str # ou la notation scientifique @@ -513,7 +516,10 @@ class PythonGenerator: pass else : # Pour les autres types on utilise repr - s = `val` + if isinstance(val,Extensions.parametre.PARAMETRE): + s = val.nom + else: + s = `val` s= s + ',' return s -- 2.39.2