Salome HOME
*** empty log message ***
[tools/eficas.git] / Editeur / appli.py
index 1fce87ce7ebfc3c1e8ae9702bcc3b86a1384e6b5..d6f823664b5a16f15446b6f5945bc5f39ecfdbe1 100644 (file)
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
 #            CONFIGURATION MANAGEMENT OF EDF VERSION
 # ======================================================================
 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
     L'aspect applicatif doit etre pris en charge par la classe dérivée
 """
 # Modules Python
+import os
 import sys
+import types
 import Pmw
 import Tkinter
+from widgets import showerror
 
 # Modules Eficas
 import splash
 import prefs
+import styles
+from styles import style
 import fontes
 import tooltip
+import properties
+from widgets import Fenetre
+from Misc import MakeNomComplet
+import session
 
-VERSION="EFICAS v1.3"
+VERSION="EFICAS v1.8"
 
 class APPLI: 
-  def __init__ (self,master,code='ASTER',fichier=None) :
-      self.top=master
+  def __init__ (self,master,code=prefs.code,fichier=None,test=0) :
       self.code=code
+      self.top=master
       self.top.protocol("WM_DELETE_WINDOW",self.exitEFICAS)
       self.top.minsize(900,500)
       self.top.geometry("900x500")
@@ -47,13 +57,45 @@ class APPLI:
       self.top.withdraw()
       self.initializeTk(master)
       Pmw.initialise(master)
+
+      self.dict_reels={}
+      self.liste_simp_reel=[]
+      # L'attribut test permet d'activer les panneaux de splash et d'erreur (test=0)
+      # Si test est different de 0, les panneaux ne sont pas activés
+      self.test=test
+
+      # Lecture des parametres de configuration (fichier global editeur.ini 
+      # et utilisateur eficas.ini)
       self.lecture_parametres()
+
       self.format_fichier = Tkinter.StringVar()
       self.message=''
+      # Avant la creation du bureau qui lit le catalogue
+      self.version_code=session.d_env.cata
+
+      # Creation de la menubar, toolbar, messagebar
       self.cree_composants_graphiques()
-      self.load_appli_composants()
-      self.affiche_FAQ()
-      splash.fini_splash()
+      # Creation des autres composants graphiques dont le bureau (parametrable par prefs.py)
+      self.load_appli_composants()             
+
+      # 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
+      if (self.test == 0):
+           splash.fini_splash()
+           #self.affiche_FAQ()
+
+      # Ouverture des fichiers de commandes donnes sur la ligne de commande
+      cwd=os.getcwd()
+      self.dir=cwd
+      for study in session.d_env.studies:
+          os.chdir(cwd)
+          d=session.get_unit(study,self)
+          self.bureau.openJDC(file=study["comm"],units=d)
+
 
   def send_message(self,message):
       self.message=message
@@ -68,31 +110,42 @@ class APPLI:
       """
           Active la lecture des paramètres standards et utilisateur
       """
-      splash._splash.configure(text = "Chargement des paramètres utilisateur")
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement des paramètres utilisateur")
       import configuration
       self.CONFIGURATION = configuration.make_config(self,prefs.REPINI)
 
   def cree_composants_graphiques(self):
       """
-          Cree les constituants de l'application :
+          Cree les constituants graphiques fixes de l'application :
            - menubar
-           - tollbar
-           - bureau
+           - toolbar
            - statusbar
       """
-      splash._splash.configure(text = "Chargement de l'IHM")
-      splash._splash.configure(text = "Chargement de la menubar")
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de l'IHM")
+         splash._splash.configure(text = "Chargement de la menubar")
       import menubar
       self.menubar=menubar.MENUBAR(self,self.top)
-      splash._splash.configure(text = "Chargement de la toolbar")
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de la toolbar")
       import toolbar
       self.toolbar=toolbar.TOOLBAR(self,self.top)
-      splash._splash.configure(text = "Chargement de la statusbar")
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement de la statusbar")
       import statusbar
       self.statusbar=statusbar.STATUSBAR(self.top)
 
   def load_appli_composants(self):
-      splash._splash.configure(text = "Chargement des appli_composants")
+      """
+          Cree les autres constituants graphiques de l'application :
+           - bureau 
+           - readercata
+           - ...
+          Cette creation est parametrable par fichier prefs.py
+      """
+      if (self.test == 0):
+         splash._splash.configure(text = "Chargement des appli_composants")
       for mname in self.appli_composants:
          self.load_appli_composant(mname)
 
@@ -129,13 +182,13 @@ class APPLI:
         root.option_add('*Listbox*Font',fontes.standard)
 
   def initializeTk_colors_common(self, root):
-        root.option_add('*background', 'grey')
-        root.option_add('*foreground', 'black')
-        root.option_add('*EntryField.Entry.background', 'white')
-       root.option_add('*Entry*background', 'white')
-        root.option_add('*Listbox*background', 'white')
-        root.option_add('*Listbox*selectBackground', '#00008b')
-        root.option_add('*Listbox*selectForeground', 'white')
+        root.option_add('*background', style.background)
+        root.option_add('*foreground', style.foreground)
+        root.option_add('*EntryField.Entry.background', style.entry_background)
+       root.option_add('*Entry*background', style.entry_background)
+        root.option_add('*Listbox*background', style.list_background)
+        root.option_add('*Listbox*selectBackground', style.list_select_background)
+        root.option_add('*Listbox*selectForeground', style.list_select_foreground)
 
   def initializeTk_mac(self, root):
         self.initializeTk_colors_common(root)
@@ -151,9 +204,9 @@ class APPLI:
           Retourne un texte d'informations sur la session courante d'EFICAS
       """
       texte = VERSION + '\n\n'
-      texte = texte + 'EFICAS est un produit développé par \nEDF-Division Stratégie et Développement\n'
-      texte = texte + 'Equipe : MTI/MMN\n\n'
-      texte = texte + 'Code utilisé : %s\n' %self.code
+      texte = texte + 'EFICAS est un produit développé par \nEDF-R&D\n'
+      texte = texte + 'Equipe : SINETICS\n\n'
+      texte = texte + 'Code utilisé : %s version %s\n' % (self.code,properties.version)
       return texte
 
   def efface_aide(self,event):
@@ -180,17 +233,63 @@ class APPLI:
       self.aide._showTip()
       return 
 
+  def cree_menu(self,menu,itemlist,appli_composant):
+      """
+          Ajoute les items du tuple itemlist
+          dans le menu menu
+      """
+      number_item=0
+      radio=None
+      for item in itemlist:
+         number_item=number_item + 1
+        raccourci_label=""
+         if not item :
+            menu.add_separator()
+         else:
+            if len(item)==3:
+               raccourci=item[2]
+              raccourci_label="   "+raccourci
+               newitem=(item[0],item[1])
+            else :
+              if len(item)==4:
+                  raccourci=item[2]
+                 raccourci_label="   "+item[3]
+                  newitem=(item[0],item[1])
+              else :
+                 raccourci=""
+                  newitem=item
+            item=newitem
+            label,method=item
+            if type(method) == types.TupleType:
+               # On a un tuple => on cree une cascade
+               menu_cascade=Tkinter.Menu(menu)
+               menu.add_cascade(label=label,menu=menu_cascade)
+               self.cree_menu(menu_cascade,method,appli_composant)
+            elif method[0] == '&':
+               # On a une chaine avec & en tete => on cree un radiobouton
+               command=getattr(appli_composant,method[1:])
+               menu.add_radiobutton(label=label,command=command)
+               if radio == None:radio=number_item
+            else:
+               command=getattr(appli_composant,method)
+               menu.add_command(label=label,accelerator=raccourci_label,command=command)
+               if raccourci != "" :
+                  self.top.bind(raccourci,command)
+      # Si au moins un radiobouton existe on invoke le premier
+      if radio:menu.invoke(radio)
+
   def fill_menus(self,appli_composant,defs):
       menudict=self.menubar.menudict
       for mname,itemlist in defs:
           menu=menudict.get(mname)
           if not menu:continue
-          for item in itemlist:
-             if not item :
-                menu.add_separator()
-             else:
-                label,method=item
-                command=getattr(appli_composant,method)
-                menu.add_command(label=label,command=command)
-                
-      
+          self.cree_menu(menu,itemlist,appli_composant)
+
+  def update_jdc_courant(self):
+      self.bureau.update_jdc_courant()
+
+  def affiche_alerte(self,titre,message):
+      f=Fenetre(self, titre="Compte-rendu d'erreur", texte = titre + "\n\n" + message)
+      f.wait()
+
+