From: eficas <> Date: Tue, 10 Sep 2002 15:59:37 +0000 (+0000) Subject: CCAR: X-Git-Tag: AY_av_utilites~55 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=e095b1796f3b02388823f3334f68218169855104;p=tools%2Feficas.git CCAR: Changement de methode pour retrouver l'ordre des mots clés dans un catalogue Répond à la fiche EO2002-113 émise par ASter Chaque entite du catalogue est numérotée lors de sa création : attribut _no Ensuite le module autre_analyse_cata.py parcourt la structure de donnees pour construire un attribut liste de nom ordre_mc pour chaque entite. Cet attribut contient la liste des sous mots cles ordonnee. --- diff --git a/Accas/A_BLOC.py b/Accas/A_BLOC.py index d8e16e74..668c9395 100644 --- a/Accas/A_BLOC.py +++ b/Accas/A_BLOC.py @@ -23,3 +23,7 @@ import A_MCBLOC class BLOC(N_BLOC.BLOC,I_ENTITE.ENTITE): class_instance=A_MCBLOC.MCBLOC + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_BLOC.BLOC.__init__(self,*tup,**args) + diff --git a/Accas/A_FACT.py b/Accas/A_FACT.py index b2c8998e..00da6181 100644 --- a/Accas/A_FACT.py +++ b/Accas/A_FACT.py @@ -25,3 +25,7 @@ import A_MCLIST class FACT(N_FACT.FACT,I_ENTITE.ENTITE): class_instance=A_MCFACT.MCFACT list_instance=A_MCLIST.MCList + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_FACT.FACT.__init__(self,*tup,**args) + diff --git a/Accas/A_MACRO.py b/Accas/A_MACRO.py index d4e3fd1d..c4e841a2 100644 --- a/Accas/A_MACRO.py +++ b/Accas/A_MACRO.py @@ -23,3 +23,7 @@ import A_MACRO_ETAPE class MACRO(N_MACRO.MACRO,I_ENTITE.ENTITE): class_instance=A_MACRO_ETAPE.MACRO_ETAPE + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_MACRO.MACRO.__init__(self,*tup,**args) + diff --git a/Accas/A_OPER.py b/Accas/A_OPER.py index 50e3d340..b1076cb8 100644 --- a/Accas/A_OPER.py +++ b/Accas/A_OPER.py @@ -23,3 +23,6 @@ import A_ETAPE class OPER(N_OPER.OPER,I_ENTITE.ENTITE): class_instance=A_ETAPE.ETAPE + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_OPER.OPER.__init__(self,*tup,**args) diff --git a/Accas/A_PROC.py b/Accas/A_PROC.py index 2602a54d..18abbda4 100644 --- a/Accas/A_PROC.py +++ b/Accas/A_PROC.py @@ -23,3 +23,7 @@ import A_PROC_ETAPE class PROC(N_PROC.PROC,I_ENTITE.ENTITE): class_instance=A_PROC_ETAPE.PROC_ETAPE + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_PROC.PROC.__init__(self,*tup,**args) + diff --git a/Accas/A_SIMP.py b/Accas/A_SIMP.py index 898c23bc..2af12a7f 100644 --- a/Accas/A_SIMP.py +++ b/Accas/A_SIMP.py @@ -23,3 +23,7 @@ import A_MCSIMP class SIMP(N_SIMP.SIMP,I_ENTITE.ENTITE): class_instance=A_MCSIMP.MCSIMP + def __init__(self,*tup,**args): + I_ENTITE.ENTITE.__init__(self) + N_SIMP.SIMP.__init__(self,*tup,**args) + diff --git a/Aster/prefs.py b/Aster/prefs.py index 7b70f11c..85890656 100644 --- a/Aster/prefs.py +++ b/Aster/prefs.py @@ -43,12 +43,12 @@ ICONDIR=os.path.join(INSTALLDIR,'Editeur','icons') lang='fr' labels= ('Fichier','Edition','Jeu de commandes', - # 'Catalogue','Browsers','Options' +# 'Catalogue','Browsers','Options', 'Aide', ) appli_composants=['readercata','bureau', - # 'browser','options' +# 'browser','options' ] menu_defs={ 'bureau': [ diff --git a/Editeur/analyse_catalogue.py b/Editeur/analyse_catalogue.py index c06aafb3..2a0d4a0b 100644 --- a/Editeur/analyse_catalogue.py +++ b/Editeur/analyse_catalogue.py @@ -23,7 +23,7 @@ import re,string,cPickle,os from Noyau.N_CR import CR # -__Id__="$Id: analyse_catalogue.py,v 1.1.1.1 2002/03/26 09:08:45 eficas Exp $" +__Id__="$Id: analyse_catalogue.py,v 1.2 2002/05/15 15:31:58 eficas Exp $" __version__="$Name: $" # l_noms_commandes = ['OPER','PROC','MACRO','FORM'] @@ -104,15 +104,15 @@ class ENTITE : l=[] d={} if len(self.children)==0: - self.liste = l - self.dico = d + self.ordre_mc = l + self.entites = d return try : for child in self.children: l.append(child.nom) d[child.nom]=child - self.liste = l - self.dico = d + self.ordre_mc = l + self.entites = d except: print 'erreur :',self.nom,self.__class__ @@ -266,8 +266,8 @@ class CATALOGUE_CATA: for cmd in self.liste_commandes: l.append(cmd.nom) d[cmd.nom]=cmd - self.liste = l - self.dico = d + self.ordre_mc = l + self.entites = d def report(self): """ retourne l'objet rapport du catalogue de commande """ @@ -295,7 +295,7 @@ def make_cata_pickle(fic_cata): cata_ordonne = analyse_catalogue(None,fic_cata) f = open(fic_cata_p,'w+') p = cPickle.Pickler(f) - p.dump(cata_ordonne.dico) + p.dump(cata_ordonne.entites) f.close() if __name__ == "__main__" : diff --git a/Editeur/autre_analyse_cata.py b/Editeur/autre_analyse_cata.py new file mode 100644 index 00000000..5d1aa36d --- /dev/null +++ b/Editeur/autre_analyse_cata.py @@ -0,0 +1,30 @@ +def traite_entite(entite): + """ + Cette fonction ajoute a l'objet entite un attribut de nom ordre_mc + qui est une liste contenant le nom des sous entites dans l'ordre + de leur apparition dans le catalogue. + L'ordre d'apparition dans le catalogue est donné par l'attribut _no + de l'entite + La fonction active le meme type de traitement pour les sous entites + de entite + """ + l=[] + for k,v in entite.entites.items(): + traite_entite(v) + l.append((v._no,k)) + l.sort() + entite.ordre_mc=[ item for index, item in l ] + +def analyse_catalogue(cata): + """ + Cette fonction analyse le catalogue cata pour construire avec l'aide + de traite_entite la structure de données ordre_mc qui donne l'ordre + d'apparition des mots clés dans le catalogue + """ + cata_ordonne_dico={} + for oper in cata.JdC.commandes: + traite_entite(oper) + cata_ordonne_dico[oper.nom]=oper + return cata_ordonne_dico + + diff --git a/Editeur/catabrowser.py b/Editeur/catabrowser.py index 3ecc286f..c72cd2c9 100644 --- a/Editeur/catabrowser.py +++ b/Editeur/catabrowser.py @@ -36,7 +36,7 @@ from Accas import FACT,BLOC,SIMP # __version__="$Name: $" -__Id__="$Id: catabrowser.py,v 1.1.1.1 2002/03/26 09:08:46 eficas Exp $" +__Id__="$Id: catabrowser.py,v 1.2 2002/05/15 15:31:58 eficas Exp $" # class Tableau: incr = 10 @@ -236,8 +236,8 @@ class CATAItem(TreeItem): def get_liste_mc_ordonnee(self): """ Retourne la liste ordonnée (suivant le catalogue) brute des fils de l'entite courante """ - if hasattr(self.objet_cata_ordonne,'liste'): - return self.objet_cata_ordonne.liste + if hasattr(self.objet_cata_ordonne,'ordre_mc'): + return self.objet_cata_ordonne.ordre_mc else : l=self.objet_cata_ordonne.keys() l.sort() @@ -260,7 +260,7 @@ class CATAItem(TreeItem): l_cles_fils = self.get_liste_mc_ordonnee() for k in l_cles_fils : if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.dico[k] + objet_cata = self.objet_cata_ordonne.entites[k] else : objet_cata = self.objet_cata_ordonne.get(k,None) item = make_objecttreeitem(self.appli,k + " : ",self.d_fils[k], diff --git a/Editeur/cataediteur.py b/Editeur/cataediteur.py index 728be924..b2f30f00 100644 --- a/Editeur/cataediteur.py +++ b/Editeur/cataediteur.py @@ -39,7 +39,7 @@ import definition_cata # __version__="$Name: $" -__Id__="$Id: cataediteur.py,v 1.1.1.1 2002/03/26 09:08:46 eficas Exp $" +__Id__="$Id: cataediteur.py,v 1.2 2002/05/15 15:31:58 eficas Exp $" # Fonte_Niveau = fontes.canvas_gras_italique @@ -146,7 +146,7 @@ class Panel(Frame) : texte_infos = '' for e in cmd.entites.keys() : if e == name : - texte_infos=cmd.entites[e].fr + texte_infos=getattr(cmd.entites[e],'fr') break if texte_infos == '' : texte_infos="Pas d'infos disponibles" self.parent.appli.affiche_infos(texte_infos) @@ -665,7 +665,7 @@ class OPERItem(OBJECTItem): for k in l_cles_fils : typ = TYPE_COMPLET(dico_fils[k]) if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.dico[k] + objet_cata = self.objet_cata_ordonne.entites[k] else : objet_cata = self.objet_cata_ordonne.get(k,None) item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) @@ -677,7 +677,7 @@ class OPERItem(OBJECTItem): return self.object.get_valeur_attribut('nom') def get_liste_mc_ordonnee(self): - return self.objet_cata_ordonne.liste + return self.objet_cata_ordonne.ordre_mc def GetIconName(self): if self.object.isvalid(): @@ -766,7 +766,7 @@ class NIVEAUItem(OPERItem): for k in l_cles_fils : typ = TYPE_COMPLET(dico_fils[k]) if type(self.objet_cata_ordonne) == types.InstanceType : - objet_cata = self.objet_cata_ordonne.dico[k] + objet_cata = self.objet_cata_ordonne.entites[k] else : objet_cata = self.objet_cata_ordonne.get(k,None) item = make_objecttreeitem(self.appli,typ + " : ",dico_fils[k],objet_cata_ordonne = objet_cata) diff --git a/Editeur/jdcdisplay.py b/Editeur/jdcdisplay.py index 0dba7773..05f591ec 100644 --- a/Editeur/jdcdisplay.py +++ b/Editeur/jdcdisplay.py @@ -72,7 +72,7 @@ class JDCDISPLAY: self.modified='n' self.pane=Pmw.PanedWidget(self.parent,orient='horizontal') - self.pane.add('treebrowser',min=0.4) + self.pane.add('treebrowser',min=0.4,size=0.5) self.pane.add('selected',min=0.4) self.pane.pack(expand=1,fill='both') self.tree=TREEITEMINCANVAS(jdc,nom_jdc,self.pane.pane('treebrowser'), diff --git a/Editeur/panels.py b/Editeur/panels.py index 5999c6c9..413a3402 100644 --- a/Editeur/panels.py +++ b/Editeur/panels.py @@ -23,6 +23,7 @@ from Tkinter import * import Pmw from widgets import ListeChoix +import prefs SEPARATEUR = '-'*30 @@ -201,10 +202,9 @@ class Panel(Frame) : texte_infos = '' for e in cmd.entites.keys() : if e == name : - texte_infos=cmd.entites[e].fr + texte_infos=getattr(cmd.entites[e],prefs.lang) break if texte_infos == '' : texte_infos="Pas d'infos disponibles" - #EFICAS.affiche_infos(texte_infos) self.parent.appli.affiche_infos(texte_infos) def defMC(self,name): @@ -219,9 +219,8 @@ class Panel(Frame) : def selectCmd(self,name): """ On retrouve la commande sous le curseur pour affichage du fr """ if name != 'COMMENTAIRE' and name != SEPARATEUR: - #EFICAS.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr) - #self.parent.appli.affiche_infos(self.parent.appli.cataitem.d_fils[name].fr) - self.parent.appli.affiche_infos(self.parent.jdc.get_cmd(name).fr) + texte_infos=getattr(self.parent.jdc.get_cmd(name),prefs.lang) + self.parent.appli.affiche_infos(texte_infos) def defCmd(self,name): """ diff --git a/Editeur/readercata.py b/Editeur/readercata.py index 81423762..a4e2cadf 100644 --- a/Editeur/readercata.py +++ b/Editeur/readercata.py @@ -40,6 +40,7 @@ from widgets import Fenetre from utils import init_rep_cata_dev #import catabrowser +import autre_analyse_cata class READERCATA: @@ -58,12 +59,7 @@ class READERCATA: self.code=self.appli.code self.appli.format_fichier.set('python') self.OpenCata() - self.cataitem=None - #XXX CCAR : Pour le moment je ne construis pas le CATAItem - #self.cataitem = catabrowser.CATAItem(self,"Catalogue "+self.code, - #self.cata, - #objet_cata_ordonne = self.cata_ordonne_dico) def OpenCata(self): """ @@ -108,14 +104,19 @@ class READERCATA: self.cata = self.import_cata(self.fic_cata) print "Fin import_cata: ",time.clock() if not self.cata : showerror("Import du catalogue","Impossible d'importer le catalogue %s" %self.fic_cata) + # # analyse du catalogue (ordre des mots-clés) - #XXX A priori ceci fait double emploi. Il faut d'abord calculer l'ordre - # puis fabriquer le CATAItem - #CCAR :self.catalo = catabrowser.CATAItem(self,"Catalogue",self.cata) + # print "Debut Retrouve_Ordre: ",time.clock() - self.Retrouve_Ordre_Cata_Standard() + # Retrouve_Ordre_Cata_Standard fait une analyse textuelle du catalogue + # remplacé par Retrouve_Ordre_Cata_Standard_autre qui utilise une numerotation + # des mots clés à la création + #self.Retrouve_Ordre_Cata_Standard() + self.Retrouve_Ordre_Cata_Standard_autre() print "Fin Retrouve_Ordre: ",time.clock() + # # chargement et analyse des catalogues développeur (le cas échéant) + # if self.appli.CONFIGURATION.isdeveloppeur == 'OUI' : init_rep_cata_dev(self.fic_cata,self.appli.CONFIGURATION.path_cata_dev) fic_cata_dev = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') @@ -128,7 +129,8 @@ class READERCATA: self.cata = (self.cata,) else: self.cata_dev =self.import_cata(fic_cata_dev) - self.Retrouve_Ordre_Cata_Developpeur() + #self.Retrouve_Ordre_Cata_Developpeur() + self.Retrouve_Ordre_Cata_Developpeur_autre() self.cata = (self.cata,self.cata_dev) else: self.cata = (self.cata,) @@ -152,6 +154,15 @@ class READERCATA: traceback.print_exc() return 0 + def Retrouve_Ordre_Cata_Standard_autre(self): + """ + Construit une structure de données dans le catalogue qui permet + à EFICAS de retrouver l'ordre des mots-clés dans le texte du catalogue. + Pour chaque entité du catlogue on crée une liste de nom ordre_mc qui + contient le nom des mots clés dans le bon ordre + """ + self.cata_ordonne_dico=autre_analyse_cata.analyse_catalogue(self.cata) + def Retrouve_Ordre_Cata_Standard(self): """ Retrouve l'ordre des mots-clés dans le catalogue, cad : @@ -173,6 +184,37 @@ class READERCATA: self.Get_Ordre_Cata(mode='cata') self.appli.affiche_infos("Catalogue standard chargé") + def Retrouve_Ordre_Cata_Developpeur(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + fic_cata = os.path.join(self.appli.CONFIGURATION.path_cata_dev,'cata_developpeur.py') + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne = analyse_cata.analyse_catalogue(self,self.fic_cata) + self.cata_dev_ordonne_cr = cata_dev_ordonne.cr + cata_dev_ordonne_dico = cata_dev_ordonne.entites + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + + def Retrouve_Ordre_Cata_Developpeur_autre(self): + """ + Retrouve l'ordre des mots-clés dans le catalogue, cad : + - si ce dernier a été modifié, relance l'analyse du catalogue pour déterminer + l'ordre des mots-clés dans le catalogue + - s'il n'a pas été modifié, relie le fichier pickle + """ + if self.code != 'ASTER' : return + message="Chargement catalogue développeur présent dans :\n %s..." % self.appli.CONFIGURATION.path_cata_dev + splash._splash.configure(text = message,barre='oui') + cata_dev_ordonne_dico = autre_analyse_cata.analyse_catalogue(self.cata_dev) + self.cata_ordonne_dico.update(cata_dev_ordonne_dico) + self.appli.affiche_infos(" catalogue(s) développeur(s) chargé(s)" ) + def Get_Ordre_Cata(self,mode='pickle'): """ Retrouve l'ordre du catalogue : @@ -194,7 +236,7 @@ class READERCATA: splash._splash.configure(text = "Analyse du catalogue",barre='oui') cata_ordonne = analyse_catalogue.analyse_catalogue(self,self.fic_cata) self.cata_ordonne_cr = cata_ordonne.cr - self.cata_ordonne_dico = cata_ordonne.dico + self.cata_ordonne_dico = cata_ordonne.entites splash._splash.configure(text = "Sauvegarde des informations sur le catalogue") f = open(self.fic_cata_p,'w+') p = cPickle.Pickler(f) diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py index 60a4c63a..fe6e4d28 100644 --- a/Editeur/treewidget.py +++ b/Editeur/treewidget.py @@ -26,7 +26,7 @@ import images # __version__="$Name: $" -__Id__="$Id: treewidget.py,v 1.5 2002/05/15 15:31:59 eficas Exp $" +__Id__="$Id: treewidget.py,v 1.6 2002/09/09 10:39:06 eficas Exp $" # Fonte_Standard = fontes.standard @@ -342,8 +342,6 @@ class Node : self.dehighlight() self.text_id = self.canvas.create_window(textx, texty,anchor="w", window=self.text) self.id.append(self.text_id) - # Redefinit la region de scroll du canvas pour inclure tous les items créés - self.tree.scrolledcanvas.resizescrollregion() def highlight(self,event=None): """ Met en surbrillance self""" diff --git a/Editeur/utils.py b/Editeur/utils.py index 50a4797f..5fe39483 100644 --- a/Editeur/utils.py +++ b/Editeur/utils.py @@ -99,14 +99,16 @@ def stripPath(pathAndFile): return os.path.split(pathAndFile)[1] def init_rep_cata_dev(fic_cata,rep_goal): - """ initialise le répertoire des catalogues développeurs (chemin d'accès donné - dans le fichier eficas.ini cad : + """ + Initialise le répertoire des catalogues développeurs (chemin d'accès donné + dans le fichier eficas.ini cad : - le crée s'il n'existe pas encore - copie dedans les 3 fichiers nécessaires : * __init__.py (pour que ce répertoire puisse être interprété comme un package) * entete.py (pour réaliser les import nécessaires à l'interprétation des catalogues) * declaration_concepts.py (idem) - - crée le fichier cata_developpeur.py qui sera par la suite importé""" + - crée le fichier cata_developpeur.py qui sera par la suite importé + """ try : if not os.path.isdir(rep_goal) : os.mkdir(rep_goal) diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py index 6bcb8842..993fda43 100644 --- a/Extensions/commentaire.py +++ b/Extensions/commentaire.py @@ -175,7 +175,7 @@ class COMMENTAIRE : def get_fr(self): """ - Retourne le commentaire lui meme + Retourne le commentaire lui meme tronque a la 1ere ligne """ - return self.valeur + return self.valeur.split('\n',1)[0] diff --git a/Extensions/nuplet.py b/Extensions/nuplet.py index 0ec02ba6..f5208fb3 100644 --- a/Extensions/nuplet.py +++ b/Extensions/nuplet.py @@ -25,9 +25,10 @@ import types # Modules Eficas from Noyau import N_ENTITE,N_MCLIST,N_CR +from Ihm import I_ENTITE import mcnuplet -class NUPL(N_ENTITE.ENTITE): +class NUPL(N_ENTITE.ENTITE,I_ENTITE.ENTITE): """ """ class_instance = mcnuplet.MCNUPLET @@ -38,6 +39,7 @@ class NUPL(N_ENTITE.ENTITE): def __init__(self,fr="",ang="",docu="",statut='f',defaut=None,min=0,max=1, elements=None): N_ENTITE.ENTITE.__init__(self) + I_ENTITE.ENTITE.__init__(self) self.fr=fr self.ang=ang self.docu=docu diff --git a/Ihm/I_ENTITE.py b/Ihm/I_ENTITE.py index 4a2ac465..11add723 100644 --- a/Ihm/I_ENTITE.py +++ b/Ihm/I_ENTITE.py @@ -17,7 +17,21 @@ # # # ====================================================================== +_no=0 + +def number_entite(entite): + """ + Fonction qui attribue un numero unique a tous les objets du catalogue + Ce numero permet de conserver l'ordre des objets + """ + global _no + _no=_no+1 + entite._no=_no + class ENTITE: + def __init__(self): + number_entite(self) + def get_docu(self): if hasattr(self,'docu') : if self.docu != "" : return self.docu diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index 3c6e8c9e..d7e828ff 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -62,8 +62,8 @@ class MCCOMPO(I_OBJECT.OBJECT): """ for arg in liste: objet_cata = dico[arg] - dico=objet_cata.dico - return objet_cata.liste + dico=objet_cata.entites + return objet_cata.ordre_mc def filtre_liste_mc(self,liste_brute): """ diff --git a/Ihm/I_MCLIST.py b/Ihm/I_MCLIST.py index 4da0f20f..b9529e33 100644 --- a/Ihm/I_MCLIST.py +++ b/Ihm/I_MCLIST.py @@ -160,8 +160,8 @@ class MCList: """ for arg in liste: objet_cata = dico[arg] - dico=objet_cata.dico - return objet_cata.liste + dico=objet_cata.entites + return objet_cata.ordre_mc def reparent(self,parent): """