]> SALOME platform Git repositories - tools/eficas.git/commitdiff
Salome HOME
CCAR:ajout de l'aide EFICAS et desactivation modifications mots cles inconnus
authoreficas <>
Wed, 29 May 2002 10:56:55 +0000 (10:56 +0000)
committereficas <>
Wed, 29 May 2002 10:56:55 +0000 (10:56 +0000)
AIDE/__init__.py [new file with mode: 0644]
AIDE/aide_gui.py [new file with mode: 0644]
AIDE/aide_objets.py [new file with mode: 0644]
AIDE/index_aide.py [new file with mode: 0644]
Aster/prefs.py
Aster/sdist.py
Editeur/bureau.py
Editeur/fenetre_mc_inconnus.py

diff --git a/AIDE/__init__.py b/AIDE/__init__.py
new file mode 100644 (file)
index 0000000..e4fa459
--- /dev/null
@@ -0,0 +1,12 @@
+import os
+import aide_objets
+import aide_gui
+
+def go(fichier=None,master=None):
+    if not fichier :
+       fichier=os.path.join(os.path.dirname(__file__),"index_aide.py")
+    index = aide_objets.INDEX(fichier)
+    index.build()
+    o = aide_gui.AIDE_GUI(index,master=master)
+    o.build()
+    return o
diff --git a/AIDE/aide_gui.py b/AIDE/aide_gui.py
new file mode 100644 (file)
index 0000000..50aa3ce
--- /dev/null
@@ -0,0 +1,212 @@
+"""
+Ce module génère l'IHM permettant d'accéder à l'aide en ligne d'une application(ex: EFICAS)
+Il analyse l'objet index passé en argument et génére automatiquement en conséquence le menu
+avec liens hyper texte
+"""
+
+from Tkinter import *
+
+class AIDE_GUI:
+   """
+   Classe définissant l'IHM de l'appli d'aide
+   """
+   def __init__(self,objet,master=None):
+      self.objet = objet
+      self.master = master
+      self.init()
+      self.init_window()
+      self.init_frames()
+      self.init_buttons()
+      self.init_text()
+      
+   def init(self):
+      """
+      Initialise les structures de données utlisées par l'objet
+      """
+      self.padx = [0,0,0,0]
+      self.padx[0] = 0
+      self.padx[1] = 30
+      self.padx[2] = 50
+      self.historique = []   
+      
+   def init_window(self):
+      """
+      Initialise la fenêtre mère de l'appli
+      """
+      fenetre = Toplevel()
+      if self.master :
+         self.fenetre = fenetre
+      else:
+         self.fenetre = fenetre.master
+        fenetre.destroy()
+      self.fenetre.title(self.objet.titre)
+      self.fenetre.geometry("700x700+50+50")
+      self.fenetre.resizable(1,1)
+      #self.fenetre.minsize(600,800)
+      #self.fenetre.maxsize(900,800)
+      self.fenetre.protocol("WM_DELETE_WINDOW",self.quit)
+      self.fenetre.update()
+        
+   def init_frames(self):
+      """
+      Initialise les frames principales de l'appli
+      """
+      self.frame1 = Frame(self.fenetre,relief='flat',bd=2)
+      self.frame2 = Frame(self.fenetre,relief='flat',bd=2)
+      self.frame1.grid(row=0,column=0,sticky='news')
+      self.frame2.grid(row=1,column=0,sticky='news')
+      self.fenetre.grid_columnconfigure(0,weight=1,minsize=0)
+      self.fenetre.grid_rowconfigure(1,minsize=30)
+      self.fenetre.grid_rowconfigure(0,weight=1,minsize=0)
+      
+   def init_buttons(self):
+      """
+      Crée les boutons dans le bas de la fenêtre
+      """
+      self.b_retour = Button(self.frame2,text = "Précédent",command=self.go_back)
+      self.b_retour.place(relx=0.33,rely=0.5,anchor='center')
+      Button(self.frame2,text="Fermer",command=self.quit).place(relx=0.66,rely=0.5,anchor='center') 
+      
+
+   def init_text(self):
+      """
+      Construit le widget Text qui accueillera l'index et les fichiers
+      """
+      self.scroll_v = Scrollbar(self.frame1)
+      self.scroll_v.grid(row=0,column=1,rowspan=2,sticky='nesw')
+      self.scroll_h = Scrollbar(self.frame1,orient='horizontal')
+      self.scroll_h.grid(row=1,column=0,rowspan=2,sticky='nesw')
+      self.canvas = Canvas(self.frame1,
+                           bg='white',
+                          relief='sunken',
+                          scrollregion=(0,0,1000,1000),
+                          yscrollcommand=self.scroll_v.set,
+                          xscrollcommand=self.scroll_h.set)
+      self.canvas.grid(row=0,column=0,sticky='nesw')
+      self.scroll_v.configure(command=self.canvas.yview)
+      self.scroll_h.configure(command=self.canvas.xview)
+      self.frame1.grid_columnconfigure(0,weight=1,minsize=0)
+      self.frame1.grid_rowconfigure(0,weight=1,minsize=0)
+      self.frame1.grid_rowconfigure(1,minsize=10)
+      self.frame1.grid_columnconfigure(1,minsize=10)
+
+   def build(self):
+      """
+      Lance la construction dynamique de l'index en hyper texte
+      """
+      self.frame1.update_idletasks()
+      largeur = self.frame1.winfo_width()
+      self.canvas.create_rectangle(0,0,1,1,outline='white')
+      self.y_courant = 0
+      # Construction du titre encadré d'une bordure
+      titre = self.canvas.create_text(int(largeur/2),50,anchor='center',text=self.objet.titre,font="Helvetica 12 bold")
+      bbox = self.canvas.bbox(titre)
+      bordure = self.canvas.create_rectangle(bbox[0]-5,bbox[1]-5,bbox[2]+5,bbox[3]+5,
+                                             outline = 'black',
+                                            fill = 'grey75')
+      self.canvas.lower(bordure)                                    
+      self.y_courant += 100
+      # Construction des items
+      for item in self.objet.l_items :
+          self.build_item(item,0)
+      # Affichage du texte dans le fichier associé (s'il existe)
+      if self.objet.fichier :
+         try:
+           texte=open(self.objet.fichier,'r').read()
+         except:
+            texte="Fichier %s inaccessible" % self.objet.fichier
+        self.canvas.create_text(10,self.y_courant+20,
+                                text=texte,
+                                anchor='nw')
+      # Configuration dynamique des boutons
+      self.config_boutons()
+      #
+      self.canvas.config(scrollregion=self.canvas.bbox('all'))
+      
+   def config_boutons(self):
+      """
+      Activation du bouton précédent s'il y a lieu
+      """
+      if self.historique : 
+         self.b_retour.config(state='normal')
+      else :
+         self.b_retour.config(state='disabled')
+      
+   def build_item(self,item,padx):
+      """
+      Affiche l'item dans le menu décalé de padx
+      """
+      l = Label(self.canvas,
+                text=item.titre,
+               foreground = 'blue',
+               background='white',
+               font="Helvetica 12 bold")
+      l.bind("<Button-1>",lambda e,s=self,o=item : s.update_objet(o))
+      l.bind("<Enter>",lambda e,s=self,o=l : s.select_label(o))
+      l.bind("<Leave>",lambda e,s=self,o=l : s.deselect_label(o))
+      self.canvas.create_window(self.padx[padx],self.y_courant,window=l,anchor='w')
+      self.y_courant += 20
+      for sub_item in item.l_items :
+          self.build_item(sub_item,padx+1)
+      
+   def show_file(self,fichier):
+      """
+      Affiche le fichier passé en argument
+      """
+      print "on veut afficher :",fichier
+
+   def select_label(self,label):
+      """
+      Callback invoqué lorsque le label passé en argument est sélectionné
+      """
+      label.config(fg='white',bg='blue')
+
+   def deselect_label(self,label):
+      """
+      Callback invoqué lorsque le label passé en argument est sélectionné
+      """
+      label.config(bg='white',fg='blue')      
+
+   def go_back(self):
+      """
+      Affiche l'item précédent
+      """
+      self.update_objet(self.historique[-1])
+      self.historique = self.historique[0:-1]
+      # Configuration dynamique des boutons
+      self.config_boutons()
+      
+   def update_objet(self,new_objet):
+      """
+      Cette méthode remplace l'objet courant par new_objet.
+      Elle vide le widget text et affiche le nouvel objet
+      """
+      if not self.historique : 
+         self.historique.append(self.objet)
+      elif new_objet is not self.historique[-1] :
+         self.historique.append(self.objet)
+      self.objet = new_objet 
+      self.canvas.delete('all')
+      self.build()
+                       
+   def quit(self):
+      """
+      Ferme l'appli Aide
+      """
+      self.fenetre.destroy()     
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
+      
diff --git a/AIDE/aide_objets.py b/AIDE/aide_objets.py
new file mode 100644 (file)
index 0000000..e8e923f
--- /dev/null
@@ -0,0 +1,76 @@
+"""
+Ce module génère un objet INDEX par lecture et interprétation du fichier texte
+le décrivant (ex : index_aide.py)
+"""
+
+import os
+
+class ITEM_INDEX :
+   """
+   Construit un objet ITEM_INDEX
+   """
+   def __init__(self,t_item):
+       self.t_item = t_item
+       self.init()
+
+   def init(self):
+       """
+       Initialise les structures de données de l'item
+       """
+       self.titre = ""
+       self.fichier = ""
+       self.l_items = []
+              
+   def build(self):
+       """
+       Construit les sous-items de self s'il y a lieu et retoruve le label et le fichier de l'item
+       dans le tuple
+       """
+       self.titre = self.t_item[0]
+       self.fichier = self.t_item[1]
+       l_items = self.t_item[2]
+       if l_items :
+          for item in l_items :
+            o = ITEM_INDEX(item)
+             o.build()
+             self.l_items.append(o)
+
+class INDEX :
+   """
+   Construit un objet INDEX (non graphique) à partir de l'interprétation du fichier d'index
+   (type index_aide.py) passé en argument
+   """
+   def __init__(self,fichier_index):
+       self.fichier_index = fichier_index
+       self.init()
+       
+   def init(self):
+      """
+      Initialise les structures de données propres à l'index
+      """
+      self.titre = ""
+      self.fichier = None
+      self.l_items = []
+      
+   def build(self):
+      """
+      Lit le fichier index et l'interprète
+      """
+      txt = open(self.fichier_index,'r').read()
+      d = {}
+      d['repertoire']=os.path.dirname(self.fichier_index)
+      #txt = "items ="+txt
+      #print txt
+      exec txt in d
+      items = d.get("items",None)
+      if items :
+        self.titre = items[0]
+        self.fichier = items[1]
+        l_items = items[2]
+        for item in l_items :
+            o = ITEM_INDEX(item)
+           o.build()
+            self.l_items.append(o)
+
+      
+       
diff --git a/AIDE/index_aide.py b/AIDE/index_aide.py
new file mode 100644 (file)
index 0000000..6c462c8
--- /dev/null
@@ -0,0 +1,24 @@
+"""
+Contient la description des fichiers d'aide et leur structuration
+
+chaque panneau est un tuple de 3 éléments :
+
+- élément 1 : titre de la page
+- élément 2 : URL du fichier à afficher quand on visualise cette page d'aide ou None si aucun
+- élément 3 : tuple contenant les sous-panneaux de ce panneau (tuple de 3-tuples) ou None si aucun
+
+La variable repertoire est initialisee avec le chemin du repertoire local
+"""
+
+import os
+
+items =("Aide en ligne EFICAS",None,
+            ( 
+               ("FAQs",os.path.join(repertoire,"..","Editeur","faqs.txt"),None),
+               ("Install",os.path.join(repertoire,"..","INSTALL"), 
+                                                      ( 
+                                                         ("Procedure d'installation",os.path.join(repertoire,"..","README_install"),None), 
+                                                      )
+              ),
+            ),
+       )
index 78c10406b4f77e94a08abd6e9efc4f5a11420102..816b25caf79607181eb7ff5968917ba213e2210f 100644 (file)
@@ -41,6 +41,7 @@ ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons')
 
 labels= ('Fichier','Edition','Jeu de commandes',
               # 'Catalogue','Browsers','Options'
+                'Aide',
            )
 
 extensions=['readercata','bureau',
@@ -73,6 +74,10 @@ menu_defs={ 'bureau': [
                                    ('Mots-clés inconnus','mc_inconnus'),
                                   ]
               ),
+              ('Aide',[
+                        ('Aide EFICAS','aideEFICAS'),
+                      ]
+              ),
              ]
            }
 
index 3266d6c16b0fc577c3db9c125157ff87d950d9fc..1b22da3e575a83de38047c33e394bdaef64f8a4d 100644 (file)
@@ -39,6 +39,8 @@ def main():
    copyfiles('../Ihm',os.path.join(path_distrib,'Ihm'),['*.py'])
    copyfiles('../Extensions',os.path.join(path_distrib,'Extensions'),['*.py'])
    copyfiles('../Accas',os.path.join(path_distrib,'Accas'),['*.py'])
+   copyfiles('../AIDE',os.path.join(path_distrib,'AIDE'),['*.py'])
+   copyfiles('../AIDE/fichiers',os.path.join(path_distrib,'AIDE/fichiers'),['*'])
    copyfiles('../Aster',os.path.join(path_distrib,'Aster'),['prefs.py',
                                                             'editeur.ini',
                                                             'eficas_aster.py',
index 92da9ad64ea7e72863e6ac16c4746c1f7646bde4..cbbf019495d3aa35d1b25a5e44e7d259da0445b2 100644 (file)
@@ -32,6 +32,7 @@ import splash
 import prefs
 import convert
 import generator
+import AIDE
 from jdcdisplay import JDCDISPLAY
 from utils import extension,stripPath,save_in_file
 from widgets import Fenetre,Ask_Format_Fichier
@@ -570,6 +571,8 @@ class BUREAU:
       l_mc = self.JDCDisplay_courant.jdc.get_liste_mc_inconnus()
       o = fenetre_mc_inconnus(l_mc)
       l = o.wait_new_list()
-      print "mc_inconnus_new_list: ",l
+      #print "mc_inconnus_new_list: ",l
       #CCAR: Il n' y a pas de retour vers le JDC
 
+   def aideEFICAS(self):
+      AIDE.go(master=self.parent)
index 8a36c72633237075e9bb27fb71995bb2ab63fcbe..e2b4cf7815802916c2fbaa9d0ab97a939e2bdf25 100644 (file)
@@ -71,7 +71,7 @@ class fenetre_mc_inconnus :
        Affichage du label dans la zone concernée
        """
        txt = " Un ou plusieurs mots-clés inconnus ont été trouvés dans le fichier de commandes."
-       txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
+       #txt = txt + "En cliquant sur leur nom, vous pourrez soit corriger l'orthographe soit supprimer ce mot-clé"
        self.fenetre.update_idletasks()
        Label(self.frame1,
              text = txt,
@@ -96,8 +96,8 @@ class fenetre_mc_inconnus :
           e = Entry(self.frame2)
           e.grid(row=i,column=0,sticky=W)
           e.insert(END,nom_mc)
-          e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
-          e.bind("<Return>",lambda e,s=self : s.modifie_mc())
+          #e.bind("<Button-1>",lambda event,en=e,m=mc,s=self : s.select_mc(m,en))
+          #e.bind("<Return>",lambda e,s=self : s.modifie_mc())
           e.configure(relief='flat',state='disabled')
            self.widgets.append((e,lab))
            i=i+1
@@ -120,9 +120,10 @@ class fenetre_mc_inconnus :
        self.b_quit = Button(self.frame3,
                            text = "Fermer",
                            command = self.quit)
-       self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
-       self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
-       self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+       #self.b_mod.place(relx=0.25,rely=0.5,anchor='center')
+       #self.b_sup.place(relx=0.50,rely=0.5,anchor='center')
+       #self.b_quit.place(relx=0.75,rely=0.5,anchor='center')
+       self.b_quit.place(relx=0.50,rely=0.5,anchor='center')
                            
     def wait_new_list(self):
         """