From a7d5f18fe322c770026b50343adc09ed0472c192 Mon Sep 17 00:00:00 2001 From: eficas <> Date: Mon, 6 Jun 2005 09:33:06 +0000 Subject: [PATCH] CCAR: correction d'un probleme de mise a jour de contexte lors d'une insertion d'include (reset_context) limitation des update d'un noeud dans l'arbre : nouvelles methodes update_node_text et update_node_label correction bug (OBSOLETE abusif) de copier coller amelioration du scroll dans la liste des commandes mise a jour de l'AIDE en ligne pour les INCLUDE et POURSUITE --- AIDE/fichiers/includes.txt | 30 ++++++++++++++++------------ Editeur/treewidget.py | 39 +++++++++++++++++++------------------ Editeur/widgets.py | 2 ++ Extensions/commande_comm.py | 5 +++++ Extensions/commentaire.py | 4 ++++ Extensions/parametre.py | 2 ++ Ihm/I_ETAPE.py | 3 +++ Ihm/I_JDC.py | 2 ++ Ihm/I_MACRO_ETAPE.py | 6 +++++- 9 files changed, 61 insertions(+), 32 deletions(-) diff --git a/AIDE/fichiers/includes.txt b/AIDE/fichiers/includes.txt index 49a400a5..8fdb1e19 100644 --- a/AIDE/fichiers/includes.txt +++ b/AIDE/fichiers/includes.txt @@ -1,7 +1,10 @@ Les macros INCLUDE, INCLUDE_MATERIAU et POURSUITE ont un fonctionnement spécial. -Les concepts produits par ces macros sont obtenus par interpretation d'un fichier -de commandes. Il n'est pas possible d'avoir une mise à jour complètement -automatique d'un jeu de commandes qui contient une de ces macros. +Les concepts produits par ces macros sont obtenus par une interpretation séparée +du fichier de commandes correspondant. Les concepts produits sont ensuite inclus +dans le contexte du jeu de commandes principal. +La mise à jour du jeu de commandes et de ses includes et poursuites +est presque complètement automatique. Cependant dans quelques cas particuliers +le mécanisme de mise à jour peut être pris en défaut. Les principes retenus sont les suivants : @@ -13,9 +16,7 @@ la macro -> menu View) le contenu de ces types de macros. Cette visualisation n'est pas mise à jour en cas de reactualisation de cette macro. Le bouton (icone loupe) permet de visualiser le source du fichier inclus. -3- Il est possible de reactualiser la validite du jeu de commandes en demandant -un rapport de validation. Ceci declenche une reevaluation systematique des -fichiers inclus. Les fichiers inclus sont mémorisés en fonction de leur UNITE +3- Les fichiers inclus sont mémorisés en fonction de leur UNITE pour les INCLUDE, du nom de matériau pour les INCLUDE_MATERIAU et comme poursuite pour une POURSUITE (il n'est pas possible d'avoir plus d'une POURSUITE par fichier). ATTENTION : comme on s'appuie sur l'UNITE pour memoriser les fichers inclus il est @@ -23,13 +24,18 @@ conseill faite avec le meme fichier pour des INCLUDE différents. 4- Pour changer les fichiers inclus, il faut passer par l'onglet FICHIER, modifier -le nom du fichier et appuyer sur le bouton Valider. Tous les fichiers inclus par -ce premier fichier seront systématiquement redemandés à l'utilisateur. +le nom du fichier et appuyer sur le bouton Valider. Il est possible en passant par +cet onglet de forcer la prise en compte d'un fichier include partiellement valide +ce qui n'est pas possible lors de l'import initial. 5- Le nom d'un fichier INCLUDE_MATERIAU est construit à partir des valeurs des mots-clés de la commande, il n'est donc jamais demandé explicitement à l'utilisateur. -6- En cas de modification importante des fichiers inclus il est recommandé de demander -la revalidation du jeu de commandes avec le menu Jeu de commandes -> rapport de validation. -La remise à jour de la validité peut entrainer des resultats surprenants dans des cas particuliers -d'INCLUDE enchainés contenant des commandes DETRUIRE. +6- Il est possible d'editer un fichier include ou poursuite. Pour cela, il suffit d'utiliser +l'entrée "Edit" du menu contextuel de l'étape en question (bouton droit de la souris). +Le fichier include ou poursuite en cours d'édition apparaitra dans un onglet distinct. +Les modifications dans un fichier include ou poursuite sont normalement propagées au fichier +principal et aux autres includes et poursuites. Il est cependant possible que quelques cas +tordus ne soient pas correctement traités. Dans le doute, une demande de rapport de validation +peut permettre de réactualiser l'état des différents fichiers. + diff --git a/Editeur/treewidget.py b/Editeur/treewidget.py index 9664ad89..5649fa23 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.21 2005/05/19 12:18:48 eficas Exp $" +__Id__="$Id: treewidget.py,v 1.22 2005/06/01 15:18:16 eficas Exp $" # Fonte_Standard = fontes.standard @@ -230,15 +230,14 @@ class Node : def onValid(self): #print "onValid : l'item a changé de validité ",self.item,self.item.object,self.item.object.isvalid() self.update_node_valid() - self.update_label_texte() - self.update_texte() + self.update_node_label() + self.update_node_texte() def onAdd(self,objet): #print "onAdd : un objet a été ajouté aux fils de l'item ",self.item.object,objet self.expand_node() old_nodes=self.children self.update_nodes() - #print "onAdd:nodes",self.children self.redraw_children(old_nodes) self.force_select() @@ -247,7 +246,6 @@ class Node : self.expand_node() old_nodes=self.children self.update_nodes() - #print "onSupp:nodes",self.children self.redraw_children(old_nodes) self.force_select() @@ -257,8 +255,6 @@ class Node : inodes=iter(self.children) sublist=self.item._GetSubList() iliste=iter(sublist) - #print "update_nodes",self.children - #print "update_nodes",sublist while(1): old_item=item=None @@ -405,9 +401,7 @@ class Node : tous les autres """ #print "SELECT",self - #traceback.print_stack() if not self.children : self.build_children() - #if self.selected and self.tree.node_selected is self: return self.tree.deselectall() self.selected = 1 self.tree.node_selected = self @@ -700,25 +694,34 @@ class Node : child.update_icone() def update_label_texte(self): + """ Met a jour le label du noeud et celui de tous ses fils ouverts """ + self.update_node_label() + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0 : child.update_label_texte() + + def update_texte(self): + """ Met à jour les noms des SD et valeurs des mots-clés """ + self.update_node_texte() + if self.state == 'expanded' : + for child in self.children: + if child.displayed != 0 : child.update_texte() + + def update_node_label(self): + """ Met a jour le label du noeud """ # nom,fonte et couleur de l'objet du noeud à afficher labeltext,fonte,couleur = self.item.GetLabelText() if labeltext == '' : labeltext = ' ' if fonte == None : fonte = Fonte_Standard if couleur == None : couleur = 'black' self.label.configure(text=labeltext,font=fonte) - if self.state == 'expanded' : - for child in self.children: - if child.displayed != 0 : child.update_label_texte() - def update_texte(self): + def update_node_texte(self): """ Met à jour les noms des SD et valeurs des mots-clés """ text = self.item.GetText() if text == None : text = '' self.text.configure(text=text) - if self.state == 'expanded' : - for child in self.children: - if child.displayed != 0 : child.update_texte() - + def update_node_valid(self) : """Cette methode remet a jour la validite du noeud (icone) Elle appelle isvalid @@ -1022,7 +1025,6 @@ class Node : """ index = self.parent.children.index(self) - 1 if index < 0 : index =0 - #print index ret=self.parent.item.suppitem(self.item) if ret == 0:return @@ -1081,7 +1083,6 @@ class Node : Réalise la copie de l'objet passé en argument qui est nécessairement une commande """ - raise "OBSOLETE" child = self.append_brother(objet_a_copier,retour='oui') return child diff --git a/Editeur/widgets.py b/Editeur/widgets.py index d03678fa..a2d9daa4 100644 --- a/Editeur/widgets.py +++ b/Editeur/widgets.py @@ -820,6 +820,8 @@ class ListeChoix : if self.selection != None : self.deselectitem(self.selection[1],self.selection[0],self.selection[2],) self.selection = (mot,label,self.selection[2]) + index = self.MCbox.index(labelsuivant) + self.MCbox.see(index) self.highlightitem(labelsuivant) self.arg_selected=motsuivant labelsuivant.focus_set() diff --git a/Extensions/commande_comm.py b/Extensions/commande_comm.py index f6343070..2d7950c2 100644 --- a/Extensions/commande_comm.py +++ b/Extensions/commande_comm.py @@ -265,5 +265,10 @@ class COMMANDE_COMM(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : def control_sdprods(self,d): """sans objet pour les commandes commentarisées""" pass + def close(self): pass + + def reset_context(self): + pass + diff --git a/Extensions/commentaire.py b/Extensions/commentaire.py index a94e190e..0908e2fe 100644 --- a/Extensions/commentaire.py +++ b/Extensions/commentaire.py @@ -193,3 +193,7 @@ class COMMENTAIRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : def close(self): pass + def reset_context(self): + pass + + diff --git a/Extensions/parametre.py b/Extensions/parametre.py index 8a5c8153..ceaa7fb9 100644 --- a/Extensions/parametre.py +++ b/Extensions/parametre.py @@ -472,6 +472,8 @@ class PARAMETRE(N_OBJECT.OBJECT,I_OBJECT.OBJECT) : def close(self): pass + def reset_context(self): + pass class COMBI_PARAMETRE : def __init__(self,chainevaleur,valeur): diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 5713fde2..4664252b 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -333,6 +333,9 @@ class ETAPE(I_MCCOMPO.MCCOMPO): for child in self.mc_liste : child.replace_concept(old_sd,sd) + def reset_context(self): + pass + def get_noms_sd_oper_reentrant(self): """ Retourne la liste des noms de concepts utilisés à l'intérieur de la commande diff --git a/Ihm/I_JDC.py b/Ihm/I_JDC.py index ead7ed13..b043c48d 100644 --- a/Ihm/I_JDC.py +++ b/Ihm/I_JDC.py @@ -492,6 +492,8 @@ class JDC(I_OBJECT.OBJECT): """ self.current_context={} self.index_etape_courante=0 + for etape in self.etapes: + etape.reset_context() def del_sdprod(self,sd): """ diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index 3ecd1b8f..94f1bb3c 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -285,11 +285,15 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.g_context={} def close(self): - #print "MACRO_ETAPE.close",self if hasattr(self,"jdc_aux") and self.jdc_aux: # La macro a un jdc auxiliaire inclus. On demande sa fermeture self.jdc_aux.close() + def reset_context(self): + if hasattr(self,"jdc_aux") and self.jdc_aux: + # La macro a un jdc auxiliaire inclus. On demande la reinitialisation du contexte + self.jdc_aux.reset_context() + def delete_concept(self,sd): """ Fonction : Mettre a jour les mots cles de l etape et eventuellement -- 2.39.2