From d2ad07079a7b9b0ee66a0da2814f41469a0b7665 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Wed, 17 Jan 2018 18:28:31 +0100 Subject: [PATCH] importzone pour MT --- Editeur/Objecttreeitem.py | 2 +- Ihm/I_MACRO_ETAPE.py | 27 ++++++++++++++------------ Ihm/I_MCCOMPO.py | 6 +++--- InterfaceQT4/editor.py | 25 +++++++++++++++++++++++- InterfaceQT4/monWidgetCommande.py | 6 ++++-- InterfaceQT4/monWidgetPlusieursBase.py | 2 +- InterfaceQT4/qtEficas.py | 25 ++++++++++++++++++++++++ InterfaceQT4/typeNode.py | 1 + InterfaceQT4/viewManager.py | 19 ++++++++++++++++++ Noyau/nommage.py | 10 +++++----- 10 files changed, 98 insertions(+), 25 deletions(-) diff --git a/Editeur/Objecttreeitem.py b/Editeur/Objecttreeitem.py index 99da0f39..21c2408d 100644 --- a/Editeur/Objecttreeitem.py +++ b/Editeur/Objecttreeitem.py @@ -365,7 +365,7 @@ class ObjectTreeItem(TreeItem,Delegate): def getMcPresents(self): """ Retourne le dictionnaire des mots-cles presents de l'objet pointe par self """ - return self.object.dict_mc_presents() + return self.object.dictMcPresents() def verifConditionRegles(self,l_mc_presents): return self.object.verifConditionRegles(l_mc_presents) diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index c3491aa8..fbb2e8fe 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -71,7 +71,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): return d.get(nom_sd,None) return None - def getContexteJdc(self,fichier,text): + def getContexteJdc(self,fichier,text,doitEtreValide=1): """ Interprete text comme un texte de jdc et retourne le contexte final. @@ -83,14 +83,14 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #print ("getContexteJdc",self,self.nom) # On recupere l'etape courante step=CONTEXT.getCurrentStep() - try: - #if 1 : + #try: + if 1 : # on essaie de creer un objet JDC auxiliaire avec un contexte initial # Attention getContexteAvant retourne un dictionnaire qui contient # le contexte courant. Ce dictionnaire est reactualise regulierement. # Si on veut garder l'etat du contexte fige, il faut en faire une copie. context_ini = self.parent.getContexteAvant(self).copy() - #print "getContexteJdc",context_ini.keys() + print ("getContexteJdc",context_ini.keys()) # Indispensable avant de creer un nouveau JDC CONTEXT.unsetCurrentStep() @@ -150,29 +150,31 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.jdc_aux=j self.jdc.jdcDict=self.jdc_aux - except: - #else : + #except: + else : traceback.print_exc() # On retablit l'etape courante step CONTEXT.unsetCurrentStep() CONTEXT.setCurrentStep(step) return None - if not j.cr.estvide(): + + if not j.cr.estvide() and doitEtreValide: # Erreurs dans l'INCLUDE. On garde la memoire du fichier # mais on n'insere pas les concepts # On retablit l'etape courante step - #print j.cr - #print j.isValid() + print (j.cr) + print ("valid ",j.isValid()) CONTEXT.unsetCurrentStep() CONTEXT.setCurrentStep(step) raise EficasException(tr("Impossible de relire le fichier %s \n ")+ six.text_type(j.cr)) - if not j.isValid(): + if not j.isValid() and doitEtreValide: # L'INCLUDE n'est pas valide. # on produit un rapport d'erreurs cr=j.report() + print ('cr', cr) # On retablit l'etape courante step CONTEXT.unsetCurrentStep() CONTEXT.setCurrentStep(step) @@ -181,6 +183,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # Si aucune erreur rencontree + # ou qu on accepte un jdc incomplet # On recupere le contexte de l'include verifie try: j_context=j.getVerifContexte() @@ -528,7 +531,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): - def buildIncludeEtape(self,text): + def buildIncludeEtape(self,text,doitEtreValide): import Extensions.jdc_include self.JdC_aux=Extensions.jdc_include.JdC_include # un include partage la table des unites avec son parent (jdc) @@ -536,7 +539,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # Attention fonctionne pour import_Zone de MT # a adapter eventuellement try : - contexte = self.getContexteJdc(None,text) + contexte = self.getContexteJdc(None,text,doitEtreValide) except EficasException: return 0 diff --git a/Ihm/I_MCCOMPO.py b/Ihm/I_MCCOMPO.py index 2709f2e0..e6675cda 100644 --- a/Ihm/I_MCCOMPO.py +++ b/Ihm/I_MCCOMPO.py @@ -163,15 +163,15 @@ class MCCOMPO(I_OBJECT.OBJECT): index=index+1 return index - def ordonneListeMc(self,liste_mc_a_ordonner,liste_noms_mc_ordonnee): + def ordonneListeMc(self,listeMc_a_ordonner,liste_noms_mc_ordonnee): """ - Retourne liste_mc_a_ordonner ordonnee suivant l'ordre + Retourne listeMc_a_ordonner ordonnee suivant l'ordre donne par liste_noms_mc_ordonnee """ liste = [] # on transforme liste_a_ordonner en un dictionnaire (plus facile a consulter) d_mc = {} - for mc in liste_mc_a_ordonner: + for mc in listeMc_a_ordonner: d_mc[mc.nom]=mc # on construit la liste des objets ordonnes for nom_mc in liste_noms_mc_ordonnee: diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index ee7195e8..be0577d9 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -181,7 +181,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): def informe(self,titre,txt,critique=True): #--------------------------------# if critique : - self.affiche_infos(tr(txt),Qt.red) + self.afficheInfos(tr(txt),Qt.red) QMessageBox.critical( self, tr(titre), tr(txt)) else : QMessageBox.warning( self, tr(titre),tr(txt)) @@ -952,6 +952,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # ajoute une etape de JdC a partir d un texte monItem=itemApres etape=monItem.item.object + CONTEXT.setCurrentStep(etape) try : ok=etape.buildIncludeEtape(texte) @@ -964,6 +965,21 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): self.tree.racine.buildChildren() return ok + #-------------------------------------------# + def updateJdcAfterEtape(self, etape,texte): + #--------------------------------------------# + # ajoute une etape de JdC a partir d un texte + CONTEXT.setCurrentStep(etape) + try : + ok=etape.buildIncludeEtape(texte,doitEtreValide=0) + except : + ok=0 + if not ok : + QMessageBox.information( self, + tr("Import texte"), + tr("Impossible d importer le texte")) + self.tree.racine.buildChildren() + return ok #-------------------------------------# @@ -1359,6 +1375,13 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): self.widgetTree.show() #self.restoreSplitterSizes(3) + #----------------------- + def getEtapeCourante(self) : + #----------------------- + print (self.tree.selectedItems()) + if len(self.tree.selectedItems()) != 1 : return None + etape=self.tree.selectedItems()[0].item.object.getEtape() + return etape #----------------------------- def getTreeIndex(self,noeud): #---------------------------- diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index 17aff195..a06baa90 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -116,8 +116,10 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.editor.ajoutOptionnel() self.editor.inhibeSplitter=0 self.afficheOptionnel() - spacerItem = QSpacerItem(21, 20, QSizePolicy.MinimumExpanding, QSizePolicy.MinimumExpanding) - self.commandesLayout.addItem(spacerItem) + spacerItem = QSpacerItem(21, 20, QSizePolicy.Expanding, QSizePolicy.Expanding) + #spacerItem = QSpacerItem(21, 20, QSizePolicy.Preferred, QSizePolicy.Preferred) + #self.commandesLayout.addItem(spacerItem) + self.verticalLayoutCommande.addItem(spacerItem) #self.editor.restoreSplitterSizes() diff --git a/InterfaceQT4/monWidgetPlusieursBase.py b/InterfaceQT4/monWidgetPlusieursBase.py index 3e88fc74..b002a4e5 100644 --- a/InterfaceQT4/monWidgetPlusieursBase.py +++ b/InterfaceQT4/monWidgetPlusieursBase.py @@ -230,7 +230,7 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie) if len(listeComplete) > max : texte=tr("Nombre maximum de valeurs ")+str(max)+tr(" atteint") - self.editor.affiche_infos(texte,Qt.red) + self.editor.afficheInfos(texte,Qt.red) return validite,comm,comm2,listeRetour= self.politique.ajoutNTuple(listeComplete) diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index 74f9584c..b0966b65 100755 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -194,6 +194,7 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): if self.code.upper() in Appli.__dict__: Appli.__dict__[self.code.upper()](self,) if self.suiteTelemac : self.lookSuiteTelemac() + self.metMenuAJourUtilisateurs() def initAides(self): #print "je passe la" @@ -321,6 +322,11 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): self.actionSortieLegere.triggered.connect(self.handleSortieLegere) + def MT(self): + self.enlevernewInclude() + self.toolBar.addSeparator() + + def ZCRACKS(self): self.enlevernewInclude() self.toolBar.addSeparator() @@ -951,6 +957,25 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): def handleAjoutEtape(self,nomEtape): self.viewmanager.handleAjoutEtape(nomEtape) + def metMenuAJourUtilisateurs(self): + self.lesFonctionsUtilisateurs={} + if self.code not in self.mesScripts : return + if not hasattr(self.mesScripts[self.code],'dict_menu') : return + titre,lesFonctions=self.mesScripts[self.code].dict_menu.items()[0] + self.menuOptions = self.menubar.addMenu("menuOptions") + self.menuOptions.setTitle(tr(titre)) + for elt in lesFonctions : + laFonctionUtilisateur, label, lesArguments = elt + action = QAction(self) + action.setText(label) + #action.triggered.connect(self.appelleFonctionUtilisateur) + self.menuOptions.addAction(action) + self.lesFonctionsUtilisateurs[action]=(laFonctionUtilisateur, lesArguments) + self.menuOptions.triggered.connect(self.handleFonctionUtilisateur) + + def handleFonctionUtilisateur(self,action) : + (laFonctionUtilisateur, lesArguments)=self.lesFonctionsUtilisateurs[action] + self.viewmanager.handleFonctionUtilisateur(laFonctionUtilisateur, lesArguments) if __name__=='__main__': diff --git a/InterfaceQT4/typeNode.py b/InterfaceQT4/typeNode.py index c9a2119b..920dc511 100644 --- a/InterfaceQT4/typeNode.py +++ b/InterfaceQT4/typeNode.py @@ -81,6 +81,7 @@ class PopUpMenuNodeMinimal(object) : def ajoutScript(self): # cochon mais je n arrive pas a faire mieux avec le mecanisme de plugin + # a revoir avec un menu et un connect sur le triggered sur le menu ? if hasattr(self.appliEficas, 'mesScripts'): if self.editor.code in self.editor.appliEficas.mesScripts : self.dict_commandes_mesScripts=self.appliEficas.mesScripts[self.editor.code].dict_commandes diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 0cc09614..7e31db1a 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -410,3 +410,22 @@ class MyViewManager(object): if index < 0 : return editor=self.dict_editors[index] editor.handleAjoutGroup(listeGroup) + + def handleFonctionUtilisateur(self,laFonctionUtilisateur, lesArguments): + # Peut-etre a blinder un peu plus sur le nb d argument + index=self.myQtab.currentIndex() + if index < 0 : return + editor=self.dict_editors[index] + if editor.getEtapeCourante == None : + QMessageBox.information( self, + tr("Selectionner une etape"), + tr("Le texte sera inséré après l étape selectionnée")) + + listeParam = [] + for p in lesArguments: + print (p) + if hasattr(editor,p): listeParam.append(getattr(editor,p)) + if p=="editor" : listeParam.append(editor) + if p=="etapeCourante" : listeParam.append(editor.getEtapeCourante()) + apply(laFonctionUtilisateur,listeParam) + diff --git a/Noyau/nommage.py b/Noyau/nommage.py index a80b612f..72b4ceed 100644 --- a/Noyau/nommage.py +++ b/Noyau/nommage.py @@ -61,7 +61,7 @@ def _getNomConceptResultat(ope, level=2): Cette fonction recherche dans la pile des appels, l'appel à la commande qui doit etre situé à 2 niveaux au-dessus (cur_frame(2)). On retrouve d'abord la frame d'exécution f. Puis le numéro de la ligne - dans le source f.fLineNo et le nom du fichier source (f.f_code.co_filename). + dans le source f.f_lineno et le nom du fichier source (f.f_code.co_filename). A partir de là, on récupère la ligne de source avec linecache.getline et on vérifie que cette ligne correspond véritablement à l'appel. @@ -74,8 +74,8 @@ def _getNomConceptResultat(ope, level=2): """ f = N_utils.cur_frame(level) - lineno = f.fLineNo # XXX Too bad if -O is used - # lineno = fLineNo(f) # Ne marche pas toujours + lineno = f.f_lineno # XXX Too bad if -O is used + # lineno = f_lineno(f) # Ne marche pas toujours co = f.f_code filename = six.text_type(co.co_filename, getEncoding()) name = co.co_name @@ -138,7 +138,7 @@ def evalnom(text, d): return lll -def fLineNo(f): +def f_lineno(f): """ Calcule le numero de ligne courant Devrait marcher meme avec -O @@ -146,7 +146,7 @@ def fLineNo(f): """ c = f.f_code if not hasattr(c, 'co_lnotab'): - return f.fLineNo + return f.f_lineno tab = c.co_lnotab line = c.co_firstlineno stopat = f.f_lasti -- 2.39.2