Salome HOME
PN
authoreficas <>
Tue, 29 Nov 2005 11:17:21 +0000 (11:17 +0000)
committereficas <>
Tue, 29 Nov 2005 11:17:21 +0000 (11:17 +0000)
16 files changed:
Editeur/appli.py
Editeur/bureau.py
Editeur/cataediteur.py
Editeur/comploader.py
Editeur/compocommandecomm.py
Editeur/compooper.py
Editeur/composimp.py
Editeur/listePatrons.py
Editeur/panels.py
Editeur/panelsSalome.py
Editeur/treewidget.py
Editeur/widgets.py
Extensions/param2.py [new file with mode: 0644]
Extensions/parametre.py
Ihm/I_MCSIMP.py
generator/generator_python.py

index 072fb5456650adaa1e868d5b1a0da4674e219361..83309694a9c4f17705258f000d052ce12e899562 100644 (file)
@@ -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
index 7f960dc43551d9ea1802a1b37c829697c4a853c8..d5862e5be95cf9fe1247c67630bf536b9b221203 100644 (file)
@@ -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("<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)
@@ -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("<F1>",lambda e,s=self:s.selectArbreDown())
-      self.nb.bind_all("<F2>",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")
 
index 2d8ae0edcc74ce65aced83a66ff60589e42d4d03..6e4d6a50eec9916dd044da79e404374e05c3dc18 100644 (file)
@@ -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.,
index 771fa116416a0ac3e5451f0b5f2f1ed139acafcf..1b9ddaa93299e75c91cf7ba7c6e26504428761d1 100644 (file)
@@ -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
index 169f0b19c63ba8487e6e9050fe2442c59ef3c0e2..ddbd6ebd0f52830da86965adf04e9af9a1147df4 100644 (file)
@@ -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):
     """
index 1f983051cad3919748532ea9d009c55e157a3840..a05b8f463824bb9bb5d6c53948cf333aa8b5a7cb 100644 (file)
@@ -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
 
index b5e71374f60d312268ff624322ff1252c15cd346..cf8eae081d760410ac5d51fd05ccdefae0a27003 100644 (file)
@@ -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
index 532c01ed0b97ec223ec369e54bcd057d8281255c..090366e531e718c110d71294b5efeadb4c88f84f 100644 (file)
@@ -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()
index b5a30a6f1d6f41f930d57a382a0281f37a10623b..6814ec842ee4198b93d4ab190e25eb9e59cabf71 100644 (file)
@@ -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("<Return>",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("<Return>",lambda e,s=self:s.execConcept())
index cbe30ffc7be383b1a13dbf7ca8d4349948989639..82b8da104821fc5ded58bd3782ba205aabc5b85a 100644 (file)
@@ -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)
 
+"""          
 
 
 # ------------------------------------------------------------------------------#
index 8fba5f71262ecb961f0ff3782916ddf072bfba14..1a5a9799ad4326a7d2e4109ca88f39729e664f0a 100644 (file)
@@ -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("<Key-Prior>", self.page_up)
-        self.id_down=self.canvas.bind("<Key-Next>", self.page_down)
-        #self.id_uup=self.canvas.bind("<Key-Up>", self.unit_up)
-        #self.id_udown=self.canvas.bind("<Key-Down>", self.unit_down)             
+        self.id_up=self.canvas.bind("<F1>", self.page_up)
+        self.id_down=self.canvas.bind("<F2>", self.page_down)
         self.id_um=self.canvas.bind("<Key-Left>", self.mot_up)
         self.id_dm=self.canvas.bind("<Key-Right>", 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("<Key-Prior>",self.id_up)
         self.canvas.unbind("<Key-Next>",self.id_down)
-        self.canvas.unbind("<Key-Up>",self.id_uup)
-        self.canvas.unbind("<Key-Down>",self.id_udown)             
         self.canvas.unbind("<Key-Left>",self.id_um)
         self.canvas.unbind("<Key-Right>",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()
index 48e3e9fe86ed2d417e88f35e24777631d2e753c8..4524a8036503b6173e5d5f3c28606b8f44436334 100644 (file)
@@ -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 (file)
index 0000000..d02aa46
--- /dev/null
@@ -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)
index ceaa7fb931b4774b4f2670134c61746c2da4f233..28b6bd8732add689e687e7c9811aef0e66f62947 100644 (file)
@@ -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
index c3d8f4e0d27c8581b6ddd22a6dbf0bbd3e8b97c5..9f09d94802c69ce41ed362d41ff9f140a120c230 100644 (file)
@@ -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
+                                                                           
index 0fbf2c71f6f2e1782bc7dbee23ec22b5b5605f5d..bebd399f7384fd1c58a66cc2fc4201bc0e643857 100644 (file)
@@ -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