From 729fc33310757535e3f6b3ff7f5d1687157e74d0 Mon Sep 17 00:00:00 2001 From: "pascale.noyret" Date: Fri, 25 Oct 2019 11:10:43 +0200 Subject: [PATCH] pourSauvegarde du debut des UserASSD --- Accas/A_ASSD.py | 6 +- Efi2Xsd/MCAccasXsd.py | 1 - Extensions/jdc_include.py | 8 +- Extensions/localisation.py | 1 - Extensions/mcnuplet.py | 4 +- Ihm/I_ASSD.py | 8 +- Ihm/I_ETAPE.py | 4 +- Ihm/I_MACRO_ETAPE.py | 12 +- Ihm/I_OBJECT.py | 19 + Ihm/I_PROC_ETAPE.py | 4 + InterfaceQT4/browser.py | 6 +- InterfaceQT4/compobloc.py | 5 - InterfaceQT4/compocomm.py | 1 - InterfaceQT4/compofact.py | 27 +- InterfaceQT4/compomacro.py | 10 - InterfaceQT4/compomclist.py | 8 +- InterfaceQT4/composimp.py | 10 +- InterfaceQT4/editor.py | 16 +- InterfaceQT4/editorSsIhm.py | 27 +- InterfaceQT4/eficas_go.py | 77 ++-- InterfaceQT4/gereIcones.py | 5 +- InterfaceQT4/gereListe.py | 9 +- InterfaceQT4/gereListe_afetrMT.py | 360 ++++++++++++++++++ InterfaceQT4/monBoutonValide.py | 6 +- InterfaceQT4/monChoixCode.py | 10 +- InterfaceQT4/monChoixLangue.py | 12 +- InterfaceQT4/monFonctionPanel.py | 1 - InterfaceQT4/monViewTexte.py | 3 +- .../monWidgetCommandeDeplie1Niveau.py | 2 +- InterfaceQT4/monWidgetCreeParam.py | 1 - InterfaceQT4/monWidgetCreeUserAssd.py | 58 +++ InterfaceQT4/monWidgetFact.py | 18 +- InterfaceQT4/monWidgetFactPlie.py | 5 +- InterfaceQT4/monWidgetIntoSug.py | 1 - InterfaceQT4/monWidgetMatrice.py | 1 - InterfaceQT4/monWidgetParam.py | 3 +- .../monWidgetPlusieursASSDIntoOrdonne.py | 1 - InterfaceQT4/monWidgetPlusieursBase.py | 1 - InterfaceQT4/monWidgetPlusieursInto.py | 1 - InterfaceQT4/monWidgetPlusieursIntoOrdonne.py | 1 - InterfaceQT4/monWidgetPlusieursTuple.py | 1 - InterfaceQT4/monWidgetSimpBase.py | 10 - InterfaceQT4/monWidgetSimpTuple.py | 1 - InterfaceQT4/politiquesValidation.py | 3 +- InterfaceQT4/qtEficas.py | 5 +- InterfaceQT4/qtEficasSsIhm.py | 7 +- InterfaceQT4/qtSaisie.py | 13 +- InterfaceQT4/viewManager.py | 100 ++--- InterfaceQT4/viewManagerSsIhm.py | 190 +-------- Noyau/N_ASSD.py | 1 + Noyau/N_CO.py | 2 +- Noyau/N_CONVERT.py | 32 +- Noyau/N_ENTITE.py | 2 +- Noyau/N_ETAPE.py | 4 +- Noyau/N_GEOM.py | 6 +- Noyau/N_JDC.py | 46 ++- Noyau/N_MACRO_ETAPE.py | 15 +- Noyau/N_MCCOMPO.py | 1 + Noyau/N_MCFACT.py | 4 +- Noyau/N_MCSIMP.py | 46 ++- Noyau/N_OBJECT.py | 72 +--- Noyau/N_SIMP.py | 11 +- Noyau/N_UserASSD.py | 68 ++++ Noyau/context.py | 24 ++ Noyau/nommage.py | 6 +- UiQT5/desVisu.ui | 2 +- UiQT5/desWidgetFact.ui | 5 +- UiQT5/desWidgetPlusieursBase.ui | 267 ++++++------- UiQT5/desWidgetPlusieursIntoOrdonne.ui | 20 +- UiQT5/desWidgetPlusieursTuple.ui | 9 +- UiQT5/desWidgetTableau.ui | 9 +- Validation/V_ETAPE.py | 4 +- Validation/V_MCSIMP.py | 1 - Validation/V_PROC_ETAPE.py | 5 +- 74 files changed, 998 insertions(+), 747 deletions(-) create mode 100644 InterfaceQT4/gereListe_afetrMT.py create mode 100644 InterfaceQT4/monWidgetCreeUserAssd.py create mode 100644 Noyau/N_UserASSD.py diff --git a/Accas/A_ASSD.py b/Accas/A_ASSD.py index 9b43ab8a..22c98794 100644 --- a/Accas/A_ASSD.py +++ b/Accas/A_ASSD.py @@ -26,6 +26,7 @@ from Noyau import N_ASSD from Noyau import N_GEOM from Noyau import N_FONCTION from Noyau import N_CO +from Noyau import N_UserASSD # On ajoute la classe ASSD dans l'heritage multiple pour recreer # une hierarchie d'heritage identique a celle de Noyau @@ -35,6 +36,7 @@ from Noyau import N_CO class ASSD(I_ASSD.ASSD,N_ASSD.ASSD):pass #class LASSD(I_LASSD.LASSD,N_LASSD.LASSD):pass class LASSD(I_LASSD.LASSD):pass +class UserASSD(N_UserASSD.UserASSD,ASSD): pass class assd(N_ASSD.assd,I_ASSD.assd,ASSD):pass @@ -61,8 +63,4 @@ class GEOM(N_GEOM.GEOM,I_ASSD.GEOM,ASSD):pass class geom(N_GEOM.geom,I_ASSD.geom,ASSD):pass class CO(N_CO.CO,I_ASSD.CO,ASSD):pass -class UserASSD(ASSD): - def __init__(self, nom): - ASSD.__init__(self) - self.setName(nom) diff --git a/Efi2Xsd/MCAccasXsd.py b/Efi2Xsd/MCAccasXsd.py index d346e31d..84c334dd 100755 --- a/Efi2Xsd/MCAccasXsd.py +++ b/Efi2Xsd/MCAccasXsd.py @@ -27,7 +27,6 @@ class X_OBJECT: if not self.cata.modeleMetier : return if self.nom == 'Consigne' : return None trouve = False - listeArg=[] if debug : print self.perePyxb.objPyxb.orderedContent() if debug : print (map(lambda o:o.value, self.perePyxb.objPyxb.orderedContent())) diff --git a/Extensions/jdc_include.py b/Extensions/jdc_include.py index b6fe4fe2..98467da9 100644 --- a/Extensions/jdc_include.py +++ b/Extensions/jdc_include.py @@ -57,7 +57,7 @@ class JDC_POURSUITE(JDC): def o_register(self,sd): return self.jdc_pere.o_register(sd) - def NommerSdprod(self,sd,sdnom,restrict='non'): + def nommerSDProd(self,sd,sdnom,restrict='non'): """ Nomme la SD apres avoir verifie que le nommage est possible : nom non utilise @@ -65,7 +65,7 @@ class JDC_POURSUITE(JDC): Si le nom est deja utilise, leve une exception Met le concept cree dans le contexe global g_context """ - #print "NommerSdprod",sd,sdnom,restrict + #print "nommerSDProd",sd,sdnom,restrict if self.prefix_include: if sdnom != self.prefix_include:sdnom=self.prefix_include+sdnom @@ -90,7 +90,7 @@ class JDC_POURSUITE(JDC): sdnom=sd.id[2:] pass - o=self.sds_dict.get(sdnom,None) + o=self.sdsDict.get(sdnom,None) if isinstance(o,ASSD): raise AsException(tr("Nom de concept deja defini : %s" ,sdnom)) @@ -104,7 +104,7 @@ class JDC_POURSUITE(JDC): # ATTENTION : Il ne faut pas ajouter sd dans sds car il s y trouve deja. # Ajoute a la creation (appel de regSD). - self.sds_dict[sdnom]=sd + self.sdsDict[sdnom]=sd sd.nom=sdnom # En plus si restrict vaut 'non', on insere le concept dans le contexte du JDC diff --git a/Extensions/localisation.py b/Extensions/localisation.py index c96aa000..1ef1aa47 100644 --- a/Extensions/localisation.py +++ b/Extensions/localisation.py @@ -59,7 +59,6 @@ def localise(application, locale=None,file=None,translatorFichier=None, debug=Fa elif debug: print ("Unable to load Eficas translator!") - global code_translator if debug : print ('translatorFichier :' ,translatorFichier) if translatorFichier != None : if (code_translator.load(translatorFichier)) and debug: diff --git a/Extensions/mcnuplet.py b/Extensions/mcnuplet.py index 81e623d3..1078fb27 100644 --- a/Extensions/mcnuplet.py +++ b/Extensions/mcnuplet.py @@ -44,8 +44,8 @@ class MCNUPLET(V_MCCOMPO.MCCOMPO,N_MCCOMPO.MCCOMPO): self.definition=definition self.nom=nom self.parent = parent - # GETVAL affecte la valeur par defaut si necessaire - self.valeur=self.GETVAL(self.val) + # getValeurEffective affecte la valeur par defaut si necessaire + self.valeur=self.getValeurEffective(self.val) if parent : self.jdc = self.parent.jdc self.niveau = self.parent.niveau diff --git a/Ihm/I_ASSD.py b/Ihm/I_ASSD.py index ba384b0e..a3359c53 100644 --- a/Ihm/I_ASSD.py +++ b/Ihm/I_ASSD.py @@ -27,15 +27,11 @@ from Noyau.N_VALIDATOR import ValError class ASSD: def __repr__(self): - return tr("concept %(inst_name)s de type %(class_name)s", \ - {'inst_name': self.getName(), \ - 'class_name': self.__class__.__name__}) + return "concept " + self.getName() + " type " + self.__class__.__name__ def __str__(self): return self.getName() or "" - #def __del__(self): - # print "__del__",self class assd(ASSD): def __convert__(cls,valeur): @@ -45,7 +41,7 @@ class assd(ASSD): class GEOM(ASSD): def __convert__(cls,valeur): return valeur - __convert__=classmethod(__convert__) + __convert__= classmethod(__convert__) class geom(GEOM): pass diff --git a/Ihm/I_ETAPE.py b/Ihm/I_ETAPE.py index 20ddc1ae..95586d1b 100644 --- a/Ihm/I_ETAPE.py +++ b/Ihm/I_ETAPE.py @@ -30,7 +30,7 @@ from Extensions.i18n import tr from Extensions.eficas_exception import EficasException # Objet re pour controler les identificateurs Python -concept_re=re.compile(r'[a-zA-Z_]\w*$') +conceptRE=re.compile(r'[a-zA-Z_]\w*$') # import rajoute suite a l'ajout de buildSd --> a resorber import traceback @@ -106,7 +106,7 @@ class ETAPE(I_MCCOMPO.MCCOMPO): - 1 dans le cas contraire """ # Le nom d'un concept doit etre un identificateur Python (toujours vrai ?) - if not concept_re.match(nom): + if not conceptRE.match(nom): return 0, tr("Un nom de concept doit etre un identificateur Python") # pour eviter que le nom du concept soit le nom de la classe --> souci pour utiliser le concept diff --git a/Ihm/I_MACRO_ETAPE.py b/Ihm/I_MACRO_ETAPE.py index ab284d4e..10639e48 100644 --- a/Ihm/I_MACRO_ETAPE.py +++ b/Ihm/I_MACRO_ETAPE.py @@ -82,6 +82,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): #print ("getContexteJdc",self,self.nom, text) # On recupere l'etape courante step=CONTEXT.getCurrentStep() + self.text_included_converted=0 #try: if 1 : # on essaie de creer un objet JDC auxiliaire avec un contexte initial @@ -145,6 +146,9 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): old_recorded_units=old_recorded_units,**args) j.analyse() + if not j.cr.estvide(): self.text_included_converted=0 + else : self.text_included_converted=1 + self.text_included_error=str(j.cr) # On recupere les etapes internes (pour validation) self.etapes=j.etapes self.jdc_aux=j @@ -200,14 +204,14 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): # On remplit le dictionnaire des concepts produits inclus # en retirant les concepts presents dans le contexte initial - # On ajoute egalement le concept produit dans le sds_dict du parent + # On ajoute egalement le concept produit dans le sdsDict du parent # sans verification car on est sur (verification integree) que # le nommage est possible self.g_context.clear() for k,v in j_context.items(): if (not k in context_ini) or (context_ini[k] != v): self.g_context[k]=v - self.parent.sds_dict[k]=v + self.parent.sdsDict[k]=v #Ce traitement n'est realise que dans les cas suivants: # - si convert n'a pas pu convertir le jeu de commandes @@ -472,7 +476,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): self.jdc_aux.cr=self.jdc_aux.CR() # On remplit le dictionnaire des concepts produits inclus # en retirant les concepts presents dans le contexte initial - # On ajoute egalement le concept produit dans le sds_dict du parent + # On ajoute egalement le concept produit dans le sdsDict du parent # sans verification car on est sur (verification integree) que # le nommage est possible j_context=self.jdc_aux.getContexteAvant(None) @@ -481,7 +485,7 @@ class MACRO_ETAPE(I_ETAPE.ETAPE): for k,v in j_context.items(): if not k in context_ini or context_ini[k] != v: self.g_context[k]=v - self.parent.sds_dict[k]=v + self.parent.sdsDict[k]=v # On recupere le contexte courant self.current_context=self.jdc_aux.current_context self.index_etape_courante=self.jdc_aux.index_etape_courante diff --git a/Ihm/I_OBJECT.py b/Ihm/I_OBJECT.py index bc779586..921f3990 100644 --- a/Ihm/I_OBJECT.py +++ b/Ihm/I_OBJECT.py @@ -23,6 +23,8 @@ from __future__ import absolute_import import Noyau from . import CONNECTOR +import re +conceptRE=re.compile(r'[a-zA-Z_]\w*$') class OBJECT: from Noyau.N_CO import CO @@ -164,5 +166,22 @@ class OBJECT: #def __del__(self): # print "__del__",self + def nommeSd(self): + # surcharge dans I_ETAPE.py + if ( nom in dir(self.jdc.cata)) : return (0, nom + tr("mot reserve")) + if not conceptRE.match(nom): + return 0, tr("Un nom de concept doit etre un identificateur Python") + self.initModif() + #self.getSdProd() + #self.sd.nom = nom + #self.sdnom=nom + #self.parent.updateConceptAfterEtape(self,self.sd) + #self.finModif() + #return 1, tr("Nommage du concept effectue") + + + + + class ErrorObj(OBJECT):pass diff --git a/Ihm/I_PROC_ETAPE.py b/Ihm/I_PROC_ETAPE.py index 4b46b592..35f55d51 100644 --- a/Ihm/I_PROC_ETAPE.py +++ b/Ihm/I_PROC_ETAPE.py @@ -58,6 +58,10 @@ class PROC_ETAPE(I_ETAPE.ETAPE): Inputs : - sd=concept detruit """ + print ('iiiiiiiiiiiiiiiiiiiii') + print (self) + import traceback + traceback.print_stack() for child in self.mcListe : child.deleteConcept(sd) diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 0cd814d8..614fe7f8 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -114,17 +114,17 @@ class JDCTree( QTreeWidget,GereRegles ): def handleCollapsedItem(self,item): #---------------------------------- - #print ("dans CollapsedItem", self.inhibeExpand ) + print ("dans CollapsedItem", self.inhibeExpand ) if self.inhibeExpand == True : return # On traite le cas de l item non selectionne self.itemCourant = item + itemParent = item while not (hasattr (itemParent,'getPanel')) : itemParent=itemParent.treeParent if self.tree.node_selected != itemParent : item.setExpanded(False) return - itemParent = item item.setPlie() item.plieToutEtReaffiche() item.select() @@ -528,7 +528,7 @@ class JDCNode(QTreeWidgetItem,GereRegles): if pos == 'before': index = index elif pos == 'after' : index = index +1 else: - print(six.text_type(pos), tr(" n'est pas un index valide pour appendBrother")) + print(pos, tr(" n'est pas un index valide pour appendBrother")) return 0 return self.treeParent.appendChild(name,pos=index,plier=plier) diff --git a/InterfaceQT4/compobloc.py b/InterfaceQT4/compobloc.py index f41f7c07..a05c21e8 100644 --- a/InterfaceQT4/compobloc.py +++ b/InterfaceQT4/compobloc.py @@ -48,11 +48,6 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): class BLOCTreeItem(compofact.FACTTreeItem): itemNode=Node - #def get_objet(self,name) : - # for v in self.object.mcListe: - # if v.nom == name : return v - # return None - def isCopiable(self): return 0 diff --git a/InterfaceQT4/compocomm.py b/InterfaceQT4/compocomm.py index 39ee3602..8c501b79 100644 --- a/InterfaceQT4/compocomm.py +++ b/InterfaceQT4/compocomm.py @@ -55,7 +55,6 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): debComm=self.item.getText() self.setText(1,tr(debComm)) - class COMMTreeItem(Objecttreeitem.ObjectTreeItem): itemNode=Node diff --git a/InterfaceQT4/compofact.py b/InterfaceQT4/compofact.py index 4d338395..57dd1df8 100644 --- a/InterfaceQT4/compofact.py +++ b/InterfaceQT4/compofact.py @@ -30,8 +30,8 @@ import traceback class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): - def getPanelGroupe(self,parentQt,commande,insertIn=-1): - # est-ce que ce n est pas toujours le getPanelGroupe de compomclist qui est utilisee + def getPanelGroupe(self,parentQt,commande): + # ---------------------------------------- maDefinition=self.item.get_definition() monObjet=self.item.object monNom=self.item.nom @@ -40,19 +40,20 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodePartiel): else : self.niveau=1 if hasattr(self,'plie') and self.plie==True : from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie - widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche: self.firstAffiche = False self.setPlie() from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie - widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) else: from InterfaceQT4.monWidgetFact import MonWidgetFact - widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) return widget def createPopUpMenu(self): + # ------------------------ typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self) @@ -60,12 +61,15 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): itemNode=Node def isExpandable(self): + # ---------------------- return 1 def getText(self): + # ---------------- return '' def getLabelText(self): + # ---------------------- """ Retourne 3 valeurs : - le texte à afficher dans le noeud representant l'item - la fonte dans laquelle afficher ce texte @@ -76,18 +80,18 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): return self.object.getLabelText(),None,None def isValid(self): + # ---------------- return self.object.isValid() def isCopiable(self): + # ---------------- return 1 def getIconName(self): - if self.object.isValid(): - return "ast-green-los" - elif self.object.isOblig(): - return "ast-red-los" - else: - return "ast-yel-los" + # ---------------- + if self.object.isValid() : return "ast-green-los" + elif self.object.isOblig(): return "ast-red-los" + else : return "ast-yel-los" #PNPN ???? #def keys(self): @@ -95,6 +99,7 @@ class FACTTreeItem(Objecttreeitem.ObjectTreeItem): # return keys def getSubList(self): + # ---------------- """ Reactualise la liste des items fils stockes dans self.sublist """ diff --git a/InterfaceQT4/compomacro.py b/InterfaceQT4/compomacro.py index 010d6d18..9a1fcbb2 100644 --- a/InterfaceQT4/compomacro.py +++ b/InterfaceQT4/compomacro.py @@ -41,16 +41,6 @@ class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode): def createPopUpMenu(self): typeNode.PopUpMenuNode.createPopUpMenu(self) -# if ("AFFE_CARA_ELEM" in self.item.getGenealogie()) and self.editor.salome: -# from PyQt5.QtWidgets import QAction -# self.ViewElt = QAction(tr('View3D'),self.tree) -# self.ViewElt.triggered.connect(self.view3D) -# self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure")) -# self.menu.addAction(self.ViewElt) -# if self.item.isValid() : -# self.ViewElt.setEnabled(1) -# else: -# self.ViewElt.setEnabled(0) # def view3D(self) : # from Editeur import TroisDPal diff --git a/InterfaceQT4/compomclist.py b/InterfaceQT4/compomclist.py index 5fb722c8..c37efb07 100644 --- a/InterfaceQT4/compomclist.py +++ b/InterfaceQT4/compomclist.py @@ -36,7 +36,7 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): def createPopUpMenu(self): typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self) - def getPanelGroupe(self,parentQt,commande,insertIn=-1): + def getPanelGroupe(self,parentQt,commande): maDefinition=self.item.get_definition() monObjet=self.item.object monNom=self.item.nom @@ -47,15 +47,15 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): if not (monObjet.isMCList()) : if hasattr(self,'plie') and self.plie==True : from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie - widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche: self.firstAffiche = False self.setPlie() from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie - widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) else: from InterfaceQT4.monWidgetFact import MonWidgetFact - widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn) + widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) else : from InterfaceQT4.monWidgetBloc import MonWidgetBloc widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande) diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 13bf8a8a..e5b5c469 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -135,7 +135,10 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): from InterfaceQT4.monWidgetSDCOInto import MonWidgetSDCOInto widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif self.item.waitAssd(): - if len(self.item.getSdAvantDuBonType()) == 0 : + if self.item.waitUserAssdEnCreation() : + from InterfaceQT4.monWidgetCreeUserAssd import MonWidgetCreeUserAssd + widget=MonWidgetCreeUserAssd(self,maDefinition,monNom,monObjet,parentQt,maCommande) + elif len(self.item.getSdAvantDuBonType()) == 0 : from InterfaceQT4.monWidgetVide import MonWidgetVide widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande) elif len(self.item.getSdAvantDuBonType()) < 4 : @@ -524,11 +527,11 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): return text - def setValeurCo(self,nom_co): + def setValeurCo(self,nomCo): """ Affecte au MCS pointe par self l'objet de type CO et de nom nom_co """ - ret = self.object.setValeurCo(nom_co) + ret = self.object.setValeurCo(nomCo) #print "setValeurCo",ret return ret @@ -538,7 +541,6 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem): le MCS pointe par self et du type requis par ce MCS """ a=self.object.etape.parent.getSdAvantDuBonType(self.object.etape,self.object.definition.type) - if self.waitUserAssd() : l=self.jdc.getSdCreeParObjet(self.object.definition.type) else :l=[] return a+l diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index 1fd8aca4..24141467 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -27,7 +27,6 @@ except : pass import types,sys,os, re import subprocess import traceback -import six from PyQt5.QtWidgets import QWidget, QMessageBox, QFileDialog, QApplication, QSplitter, QLabel @@ -789,9 +788,9 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): if fn == None : return (0, None) if fn== '' : return (0, None) - ulfile = os.path.abspath(six.text_type(fn)) + ulfile = os.path.abspath(fn) self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] - fn = six.text_type(QDir.toNativeSeparators(fn)) + fn = QDir.toNativeSeparators(fn) self.fichierComplet = os.path.splitext(fn)[0]+extension @@ -834,9 +833,9 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): if fn == None : return (0, None) if fn== '' : return (0, None) - ulfile = os.path.abspath(six.text_type(fn)) + ulfile = os.path.abspath(fn) self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] - fn = six.text_type(QDir.toNativeSeparators(fn)) + fn = QDir.toNativeSeparators(fn) newName = fn @@ -934,7 +933,7 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): if not fn : return (0, " ") fn=fn[0] - ulfile = os.path.abspath(six.text_type(fn)) + ulfile = os.path.abspath(fn) self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] # On utilise le convertisseur defini par format_fichier @@ -953,6 +952,11 @@ class JDCEditor(JDCEditorSsIhm,Ui_baseWidget,QWidget): # ajoute une etape de JdC a partir d un texte CONTEXT.setCurrentStep(etape) etape.buildIncludeEtape(texte) + if not (etape.text_included_converted) : + QMessageBox.information( self, + tr("Impossible d importer le texte"), + etape.text_included_error) + self.tree.racine.buildChildren() #-----------------------------------# diff --git a/InterfaceQT4/editorSsIhm.py b/InterfaceQT4/editorSsIhm.py index 3895e62d..12423771 100755 --- a/InterfaceQT4/editorSsIhm.py +++ b/InterfaceQT4/editorSsIhm.py @@ -250,12 +250,9 @@ class JDCEditorSsIhm : if self.code == "PSEN" : texte = self._newPSEN() if self.code == "PSEN_N1" : texte = self._newPSEN_N1() - #if hasattr(self.readercata.cata[0],'TEXTE_NEW_JDC') : texte=self.readercata.cata[0].TEXTE_NEW_JDC if hasattr(self.readercata.cata,'TEXTE_NEW_JDC') : texte=self.readercata.cata.TEXTE_NEW_JDC - #jdc=self.readercata.cata[0].JdC( procedure =texte, - #print (self.readercata.cata) jdc=self.readercata.cata.JdC( procedure =texte, appliEficas=self, cata=self.readercata.cata, @@ -267,13 +264,10 @@ class JDCEditorSsIhm : if units is not None: jdc.recorded_units=units jdc.old_recorded_units=units - ## PNPN est ce que la ligne suivante est bien utile ? - # elle positionne le contexte + # chgt le 15/10/19 + # Attention positionne contexte ? # est ce qu on ne doit pas changer le format en Accas si on vient d accas ? - if self.format == 'xml' : return jdc - if texte == "" : - jdc.editor=self - jdc.analyse() + jdc.editor=self return jdc #--------------------------------# @@ -356,10 +350,14 @@ class JDCEditorSsIhm : def viewJdcSource(self): #-----------------------# if self.fichier == None : return - f=open(self.fichier,'r') - texteSource=f.read() - f.close() - self._viewText(texteSource, "JDC_SOURCE") + if os.path.isfile(self.fichier): + f=open(self.fichier,'r') + texteSource=f.read() + f.close() + self._viewText(texteSource, "JDC_SOURCE") + else : + self._viewText("file doesn't exist", "JDC_SOURCE") + #-----------------------# def viewJdcPy(self): @@ -439,9 +437,10 @@ class JDCEditorSsIhm : return 0 #-----------------------------------------------------------# - def getTextJDC(self,format,pourRun=0,formatLigne="beautifie"): + def getTextJDC(self,format = None,pourRun=0,formatLigne="beautifie"): #-----------------------------------------------------------# if self.code == "MAP" and not(format in generator.plugins): format = "MAP" + if format == None : format = self.format if format in generator.plugins: # Le generateur existe on l'utilise diff --git a/InterfaceQT4/eficas_go.py b/InterfaceQT4/eficas_go.py index a9ad4d76..ccc574cf 100755 --- a/InterfaceQT4/eficas_go.py +++ b/InterfaceQT4/eficas_go.py @@ -28,59 +28,62 @@ except : pass import sys,os -repIni=os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..")) -ihmQTDir=os.path.join(repIni,"UiQT5") -editeurDir=os.path.join(repIni,"Editeur") -ihmDir=os.path.join(repIni,"InterfaceQT4") +repIni = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)),"..")) +ihmQTDir = os.path.join(repIni,"UiQT5") +editeurDir = os.path.join(repIni,"Editeur") +ihmDir = os.path.join(repIni,"InterfaceQT4") -if ihmDir not in sys.path : sys.path.append(ihmDir) -if ihmQTDir not in sys.path : sys.path.append(ihmQTDir) -if editeurDir not in sys.path :sys.path.append(editeurDir) - -def getEficasSsIhm(code=None,fichier=None,ssCode=None,multi=False,langue='en',versionCode=None, fichierCata=None): - if fichierCata != None : fichierCata = os.path.abspath(fichierCata) - from InterfaceQT4.qtEficasSsIhm import AppliSsIhm - Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode, fichierCata=fichierCata) - from Editeur import session - options=session.parse(['ssIhm','-k',code,'-v',versionCode]) - return Eficas +if ihmDir not in sys.path : sys.path.append(ihmDir) +if ihmQTDir not in sys.path : sys.path.append(ihmQTDir) +if editeurDir not in sys.path : sys.path.append(editeurDir) def lanceEficas(code=None,fichier=None,ssCode=None,multi=False,langue='en'): +#------------------------------------------------------------------------- """ - Lance l'appli EFICAS + Lance l'appli EFICAS avec Ihm """ - from PyQt5.QtWidgets import QApplication - # Analyse des arguments de la ligne de commande + try : + from PyQt5.QtWidgets import QApplication + except : + print('Please, set qt environment') + return + from Editeur import session - options=session.parse(sys.argv) - if options.code!= None : code=options.code - if options.ssCode!= None : ssCode=options.ssCode + options = session.parse(sys.argv) + if options.code != None : code=options.code + if options.ssCode != None : ssCode=options.ssCode from InterfaceQT4.qtEficas import Appli app = QApplication(sys.argv) - #import cProfile, pstats, StringIO - #pr = cProfile.Profile() - #pr.enable() - Eficas=Appli(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue) - #pr.disable() - #s = StringIO.StringIO() - #sortby = 'cumulative' - #ps = pstats.Stats(pr, stream=s).sort_stats(sortby) - #ps.print_stats() - #print (s.getValue()) - Eficas.show() res=app.exec_() sys.exit(res) +def getEficasSsIhm(code=None,fichier=None,ssCode=None,multi=False,langue='en',versionCode=None, fichierCata=None): +#---------------------------------------------------------------------------------------------------------------- + """ + Lance l'appli EFICAS sans Ihm + """ + from Editeur import session + options = session.parse(sys.argv) + if options.code != None : code=options.code + if options.ssCode != None : ssCode=options.ssCode + if options.ssCode != None : ssCode=options.ssCode + if fichierCata != None : fichierCata = os.path.abspath(fichierCata) + + from InterfaceQT4.qtEficasSsIhm import AppliSsIhm + options=session.parse(['ssIhm','-k',code,'-v',versionCode]) + Eficas=AppliSsIhm(code=code,salome=0,ssCode=ssCode,multi=multi,langue=langue,versionCode=versionCode, fichierCata=fichierCata) + return Eficas + def genereXSD(code=None,fichier=None,ssCode=None,multi=False,langue='en',debug=True): from Editeur import session - options=session.parse(sys.argv) - if options.code!= None : code=options.code + options = session.parse(sys.argv) + if options.code != None : code=options.code if options.ssCode!= None : ssCode=options.ssCode if options.cata == None : print ('Use -c cata_name.py') @@ -112,7 +115,7 @@ def genereXML(code=None,fichier=None,ssCode=None,multi=False,langue='en',debug=T def lanceEficas_ssIhm(code=None,fichier=None,ssCode=None,version=None,debug=False,langue='en'): """ - Lance l'appli EFICAS pour trouver les noms des groupes + Lance l'appli EFICAS SsIhm """ # Analyse des arguments de la ligne de commande from Editeur import session @@ -201,10 +204,6 @@ def lanceEficas_param(code='Adao',fichier=None,version='V0',macro='ASSIMILATION_ parameters=getJdcParameters(texte,macro) return parameters -#def getEficasSsIhm(code='Adao',versionCode='V0'): -# from .qtEficasSsIhm import AppliSsIhm -# Eficas=AppliSsIhm(code=code,ssCode=None,salome=0) -# return Eficas def getJdcParameters(jdc,macro): """ diff --git a/InterfaceQT4/gereIcones.py b/InterfaceQT4/gereIcones.py index 13b31b09..26ba38f4 100644 --- a/InterfaceQT4/gereIcones.py +++ b/InterfaceQT4/gereIcones.py @@ -27,7 +27,6 @@ except : pass import types,os,re,sys import traceback -import six import inspect from PyQt5.QtWidgets import QMessageBox, QFileDialog , QMenu, QPushButton, QTreeView ,QListView, QAbstractItemView @@ -281,7 +280,7 @@ class ContientIcones(object): fichier=fichier[0] if not(fichier == ""): - ulfile = os.path.abspath(six.text_type(fichier)) + ulfile = os.path.abspath(fichier) self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] self.lineEditVal.setText(fichier) self.editor.afficheCommentaire(tr("Fichier selectionne")) @@ -350,7 +349,7 @@ class ContientIcones(object): options = QFileDialog.ShowDirsOnly) if not (directory == "") : - absdir = os.path.abspath(six.text_type(directory)) + absdir = os.path.abspath(directory) self.appliEficas.maConfiguration.savedir = os.path.dirname(absdir) self.lineEditVal.setText(directory) self.LEvaleurPressed() diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index de215c01..681b6430 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -22,7 +22,6 @@ from __future__ import absolute_import try : from builtins import str - from builtins import range from builtins import object except : pass @@ -30,8 +29,6 @@ import types,os import traceback -import six -from six.moves import range from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog, QMessageBox from PyQt5.QtCore import QEvent, Qt, QTimer from PyQt5.QtGui import QIcon, QPalette @@ -319,7 +316,7 @@ class GereListe(object): fn=fn[0] if fn == None : return if fn == "" : return - ulfile = os.path.abspath(six.text_type(fn)) + ulfile = os.path.abspath(fn) self.editor.maConfiguration.savedir=os.path.split(ulfile)[0] from .monSelectVal import MonSelectVal @@ -329,8 +326,8 @@ class GereListe(object): filtre=str(self.LEFiltre.text()) for cb in self.listeCbRouge: palette = QPalette(Qt.red) - palette.setColor(QPalette.WindowText,Qt.black) - cb.setPalette(palette) + palette.setColor(QPalette.WindowText,Qt.black) + cb.setPalette(palette) t=cb.text() cb.setText(t) self.LEFiltre.setText("") diff --git a/InterfaceQT4/gereListe_afetrMT.py b/InterfaceQT4/gereListe_afetrMT.py new file mode 100644 index 00000000..681b6430 --- /dev/null +++ b/InterfaceQT4/gereListe_afetrMT.py @@ -0,0 +1,360 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2007-2017 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Modules Python + +from __future__ import absolute_import +try : + from builtins import str + from builtins import object +except : pass + +import types,os +import traceback + + +from PyQt5.QtWidgets import QLineEdit, QLabel, QFileDialog, QMessageBox +from PyQt5.QtCore import QEvent, Qt, QTimer +from PyQt5.QtGui import QIcon, QPalette + +from Extensions.i18n import tr +from InterfaceQT4.monViewTexte import ViewText + + +# ---------------------- # +class LECustom(QLineEdit): +# ---------------------- # + def __init__(self,parent,parentQt,i): + """ + Constructor + """ + QLineEdit.__init__(self,parent) + + self.parentQt=parentQt + self.num=i + self.dansUnTuple=False + self.numDsLaListe=-1 + self.parentTuple=None + self.valeur=None + self.editingFinished.connect(self.editFinished) + self.textEdited.connect(self.edited) + self.parentWidgetPlusieurs = parent + self.oldValeur=None + + def edited(self,text): + #print ('dans textEdited') + self.parentQt.changeUnLineEdit=True + + def focusInEvent(self,event): + #print ("dans focusInEvent de LECustom") + self.parentQt.aEuLeFocus=True + self.parentQt.numLineEditEnCours=self.num + self.parentQt.textSelected=self.text() + self.setStyleSheet("border: 2px solid gray") + self.oldValeur=self.text() + QLineEdit.focusInEvent(self,event) + + def focusOutEvent(self,event): + #print ("dans focusOutEvent de LECustom") + self.setStyleSheet("border: 0px") + if self.dansUnTuple : self.setStyleSheet("background:rgb(235,235,235); border: 0px;") + elif self.num % 2 == 1 : self.setStyleSheet("background:rgb(210,210,210)") + else : self.setStyleSheet("background:rgb(235,235,235)") + if (self.oldValeur == self.text()): QLineEdit.focusOutEvent(self,event);return + self.litValeur() + QLineEdit.focusOutEvent(self,event) + + def editFinished(self): + #print ("dans editFinished de LECustom") + if (self.oldValeur == self.text()): return + self.litValeur() + + def litValeur(self): + #print ("dans litValeur de LECustom") + if (self.oldValeur == self.text()): return + self.oldValeur = self.text() + val=str(self.text()) + + # on verifie les ',' + lval=val.split(',') + if len (lval) == 2 : + msgBox=QMessageBox() + msgBox.setText("separator ',' ") + msgBox.setInformativeText("Do you want to enter " + '.'.join(lval) + "?") + msgBox.setStandardButtons( QMessageBox.Ok | QMessageBox.Cancel) + msgBox.setDefaultButton(QMessageBox.Ok) + ret = msgBox.exec_() + if ret != 1024 : self.setText("") + else : self.setText('.'.join(lval)) + self.litValeur() + if len (lval) > 2 : + self.setText("") + self.litValeur() + if str(val)=="" or val==None : self.valeur=None; return + try : valeur=eval(val,{}) + except : + try : + d=self.parentQt.parentQt.objSimp.jdc.getContexteAvant(self.parentQt.objSimp. etape) + valeur=eval(val,d) + except : + valeur=val + self.valeur=valeur + #print ('self.valeur', self.valeur) + + + def clean(self): + self.setText("") + + def getValeur(self): + #return self.text() + return self.valeur + + def setValeur(self,valeur): + self.setText(valeur) + + + +# --------------------------- # +class LECustomTuple(LECustom): +# --------------------------- # + def __init__(self,parent): + # index sera mis a jour par TupleCustom + parentQt=parent.parent().parent().parent() + LECustom. __init__(self,parent,parentQt,0) + #print (dir(self)) + +# ---------------------------- # +class MonLabelListeClic(QLabel): +# ---------------------------- # + def __init__(self,parent): + QLabel.__init__(self,parent) + self.parent=parent + + def event(self,event) : + if event.type() == QEvent.MouseButtonRelease: + self.texte=self.text() + self.parent.traiteClicSurLabelListe(self.texte) + return QLabel.event(self,event) + + + + +# ------------- # +class GereListe(object): +# ------------- # + + def __init__(self): + self.connecterSignaux() + + + def connecterSignaux(self): + if hasattr(self,'RBHaut'): + self.RBHaut.clicked.connect(self.hautPushed) + self.RBBas.clicked.connect(self.basPushed) + self.RBMoins.clicked.connect(self.moinsPushed) + self.RBPlus.clicked.connect(self.plusPushed) + self.RBVoisListe.clicked.connect(self.voisListePushed) + if hasattr(self,'PBAlpha'): + self.PBCata.clicked.connect(self.cataPushed) + self.PBAlpha.clicked.connect(self.alphaPushed) + self.PBFind.clicked.connect(self.findPushed) + self.LEFiltre.returnPressed.connect(self.LEFiltreReturnPressed) + if hasattr(self, 'PBValideFeuille'): + self.PBValideFeuille.clicked.connect(self.changeValeur) + + def filtreListe(self): + l=[] + if self.filtre != "" : + for i in self.listeAAfficher : + if i.find(self.filtre) == 0 :l.append(i) + self.listeAAfficher=l + if self.alpha : self.listeAAfficher.sort() + + def LEFiltreReturnPressed(self): + self.filtre= self.LEFiltre.text() + self.prepareListeResultatFiltre() + + def findPushed(self): + self.filtre= self.LEFiltre.text() + self.prepareListeResultatFiltre() + + def alphaPushed(self): + #print "alphaPushed" ,self.alpha + if self.alpha == 1 : return + self.alpha=1 + self.prepareListeResultat() + + def cataPushed(self): + if self.alpha == 0 : return + self.alpha=0 + self.prepareListeResultat() + + def hautPushed(self): + if self.numLineEditEnCours == 1 : return + else : numEchange=self.numLineEditEnCours-1 + self.echange(self.numLineEditEnCours,numEchange) + self.LineEditEnCours.setFocus(True) + self.scrollArea.ensureWidgetVisible(self.LineEditEnCours) + + + def basPushed(self): + if self.numLineEditEnCours == self.indexDernierLabel : return + else : numEchange=self.numLineEditEnCours+1 + self.echange(self.numLineEditEnCours,numEchange) + self.LineEditEnCours.setFocus(True) + self.scrollArea.ensureWidgetVisible(self.LineEditEnCours) + + def echange(self,num1,num2): + # on donne le focus au a celui ou on a bouge + # par convention le 2 + nomLineEdit=self.nomLine+str(num1) + #print nomLineEdit + courant=getattr(self,nomLineEdit) + valeurAGarder=courant.text() + nomLineEdit2=self.nomLine+str(num2) + #print nomLineEdit2 + courant2=getattr(self,nomLineEdit2) + courant.setText(courant2.text()) + courant2.setText(valeurAGarder) + self.changeValeur(changeDePlace=False) + self.numLineEditEnCours=num2 + self.LineEditEnCours=courant2 + self.LineEditEnCours.setFocus(True) + + def moinsPushed(self): + # on supprime le dernier + if self.numLineEditEnCours == 0 : return + if self.indexDernierLabel == 0 : return + if self.numLineEditEnCours==self.indexDernierLabel : + nomLineEdit=self.nomLine+str(self.indexDernierLabel) + courant=getattr(self,nomLineEdit) + courant.clean() + else : + for i in range (self.numLineEditEnCours, self.indexDernierLabel): + aRemonter=i+1 + nomLineEdit=self.nomLine+str(aRemonter) + courant=getattr(self,nomLineEdit) + valeurARemonter=courant.getValeur() + nomLineEdit=self.nomLine+str(i) + courant=getattr(self,nomLineEdit) + if valeurARemonter != None : courant.setValeur(valeurARemonter) + else : courant.clean() + nomLineEdit=self.nomLine+str(self.indexDernierLabel) + courant=getattr(self,nomLineEdit) + courant.clean() + self.changeValeur(changeDePlace=False,oblige=True) + self.setValide() + + def plusPushed(self): + if self.indexDernierLabel == self.monSimpDef.max: + if len(self.listeValeursCourantes) < self.monSimpDef.max : self.chercheLigneVide() + else : self.editor.afficheInfos('nb max de valeurs : '+str(self.monSimpDef.max)+' atteint',Qt.red) + return + self.ajoutLineEdit() + self.descendLesLignes() + self.chercheLigneVide() + QTimer.singleShot(1, self.rendVisibleLigne) + + def chercheLigneVide(self): + for i in range(self.indexDernierLabel) : + nomLineEdit=self.nomLine+str(i+1) + courant=getattr(self,nomLineEdit) + valeur=courant.getValeur() + if valeur=="" : + courant.setFocus(True) + self.estVisible=courant + return + + + def descendLesLignes(self): + if self.numLineEditEnCours==self.indexDernierLabel : return + nomLineEdit=self.nomLine+str(self.numLineEditEnCours+1) + courant=getattr(self,nomLineEdit) + valeurADescendre=courant.getValeur() + courant.clean() + for i in range (self.numLineEditEnCours+1, self.indexDernierLabel): + aDescendre=i+1 + nomLineEdit=self.nomLine+str(aDescendre) + courant=getattr(self,nomLineEdit) + valeurAGarder=courant.getValeur() + courant.setValeur(valeurADescendre) + valeurADescendre=valeurAGarder + self.changeValeur(changeDePlace=False) + if hasattr (self, 'LineEditEnCours') :self.scrollArea.ensureWidgetVisible(self.LineEditEnCours) + + def voisListePushed(self): + texteValeurs="" + for v in self.node.item.getListeValeurs(): + texteValeurs+=str(v)+", " + entete="Valeurs pour "+self.nom + f=ViewText(self,self.editor,entete,texteValeurs[0:-2]) + f.show() + + + def selectInFile(self): + init=str( self.editor.maConfiguration.savedir) + fn = QFileDialog.getOpenFileName(self.node.appliEficas, + tr("Fichier de donnees"), + init, + tr('Tous les Fichiers (*)',)) + fn=fn[0] + if fn == None : return + if fn == "" : return + ulfile = os.path.abspath(fn) + self.editor.maConfiguration.savedir=os.path.split(ulfile)[0] + + from .monSelectVal import MonSelectVal + MonSelectVal(file=fn,parent=self).show() + + def noircirResultatFiltre(self): + filtre=str(self.LEFiltre.text()) + for cb in self.listeCbRouge: + palette = QPalette(Qt.red) + palette.setColor(QPalette.WindowText,Qt.black) + cb.setPalette(palette) + t=cb.text() + cb.setText(t) + self.LEFiltre.setText("") + self.listeCbRouge = [] + + +# ----------- # +class GerePlie(object): +# ----------- # + + def gereIconePlier(self): + if not(hasattr(self,'BFermeListe')) : return + self.editor.listeDesListesOuvertes.add(self.node.item) + repIcon=self.node.editor.appliEficas.repIcon + if not (self.editor.afficheListesPliees): + fichier=os.path.join(repIcon, 'empty.png') + icon = QIcon(fichier) + self.BFermeListe.setIcon(icon) + return + fichier=os.path.join(repIcon, 'minusnode.png') + icon = QIcon(fichier) + self.BFermeListe.setIcon(icon) + self.BFermeListe.clicked.connect( self.selectWidgetPlie) + + def selectWidgetPlie(self): + self.editor.listeDesListesOuvertes.remove(self.node.item) + self.reaffichePourDeplier() + + + diff --git a/InterfaceQT4/monBoutonValide.py b/InterfaceQT4/monBoutonValide.py index 335d1644..78864707 100644 --- a/InterfaceQT4/monBoutonValide.py +++ b/InterfaceQT4/monBoutonValide.py @@ -21,8 +21,6 @@ from __future__ import absolute_import import re -import six - import os @@ -42,7 +40,7 @@ class MonBoutonValide(QToolButton) : strAide=self.parent.node.item.object.getFr() if hasattr(self.parent.node.item.object.definition, 'defaut') : strAide+='\ndefaut : \n'+str(self.parent.node.item.object.definition.defaut) - strRapport=six.text_type(self.parent.node.item.object.report()) + strRapport=str(self.parent.node.item.object.report()) self.parent.editor._viewText(strAide+"\n"+strRapport, "JDC_RAPPORT") def mousePressEvent(self, event): @@ -57,7 +55,7 @@ class MonBoutonValide(QToolButton) : QToolTip.showText(event.globalPos(),myToolTip ) else : t="" - texte=six.text_type(self.parent.node.item.object.report()) + texte=self.parent.node.item.object.report().report() deb=1 for l in texte.split('\n')[2:-2]: if re.match('^[\t !]*$',l) : continue diff --git a/InterfaceQT4/monChoixCode.py b/InterfaceQT4/monChoixCode.py index 59fc6098..a5a2ddcc 100644 --- a/InterfaceQT4/monChoixCode.py +++ b/InterfaceQT4/monChoixCode.py @@ -40,11 +40,11 @@ class MonChoixCode(Ui_ChoixCode,QDialog): a l'utilisateur de choisir une seule valeur parmi une liste de valeurs discretes """ - def __init__(self, parentAppli=None): - QDialog.__init__(self,parent=parentAppli,flags=Qt.Window) + def __init__(self, appliEficas=None): + QDialog.__init__(self,parent=appliEficas,flags=Qt.Window) self.setModal(True) self.setupUi(self) - self.parentAppli=parentAppli + self.appliEficas=appliEficas self.verifieInstall() self.code=None self.buttonBox.accepted.disconnect(self.accept) @@ -93,14 +93,14 @@ class MonChoixCode(Ui_ChoixCode,QDialog): self.groupCodes.addButton(bouton) except : pass - self.parentAppli.listeCode=self.parentAppli.listeCode+listeCodesIntegrateur + self.appliEficas.listeCode=self.appliEficas.listeCode+listeCodesIntegrateur def choisitCode(self): bouton=self.groupCodes.checkedButton() if bouton==None : return code=str(bouton.text()) codeUpper=code.upper() - self.parentAppli.code=codeUpper + self.appliEficas.code=codeUpper try : dirCode=os.path.abspath(os.path.join(os.path.abspath(__file__),'../..',code)) l=os.listdir(dirCode) diff --git a/InterfaceQT4/monChoixLangue.py b/InterfaceQT4/monChoixLangue.py index ed44719f..decc00be 100644 --- a/InterfaceQT4/monChoixLangue.py +++ b/InterfaceQT4/monChoixLangue.py @@ -37,22 +37,22 @@ class MonChoixLangue(Ui_ChoixLangue,QDialog): a l'utilisateur de choisir une seule valeur parmi une liste de valeurs discretes """ - def __init__(self, parentAppli=None): - QDialog.__init__(self,parentAppli) + def __init__(self, appliEficas=None): + QDialog.__init__(self,appliEficas) self.setModal(True) self.setupUi(self) - self.parentAppli=parentAppli + self.appliEficas=appliEficas self.installLangue() self.code=None self.pB_OK.clicked.connect(self.choisitLangue) def installLangue(self): - if self.parentAppli.langue == 'fr' : self.rbFrancais.setChecked(True) + if self.appliEficas.langue == 'fr' : self.rbFrancais.setChecked(True) else : self.rbEnglish.setChecked(True) def choisitLangue(self): - if self.rbFrancais.isChecked() : self.parentAppli.langue='fr' - else : self.parentAppli.langue ='ang' + if self.rbFrancais.isChecked() : self.appliEficas.langue='fr' + else : self.appliEficas.langue ='ang' self.close() diff --git a/InterfaceQT4/monFonctionPanel.py b/InterfaceQT4/monFonctionPanel.py index 31cc2245..93dd4102 100644 --- a/InterfaceQT4/monFonctionPanel.py +++ b/InterfaceQT4/monFonctionPanel.py @@ -25,7 +25,6 @@ try : except : pass import types,os -from six.moves import range from PyQt5.QtCore import Qt diff --git a/InterfaceQT4/monViewTexte.py b/InterfaceQT4/monViewTexte.py index 0c167c9b..c57813ab 100644 --- a/InterfaceQT4/monViewTexte.py +++ b/InterfaceQT4/monViewTexte.py @@ -27,7 +27,6 @@ import types,os import traceback from Extensions.i18n import tr -import six from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog from PyQt5.QtCore import QSize @@ -68,7 +67,7 @@ class ViewText(Ui_dView,QDialog): if fn == "" : return if fn == None : return (0, None) - ulfile = os.path.abspath(six.text_type(fn)) + ulfile = os.path.abspath(fn) if self.editor != None : self.editor.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] try: diff --git a/InterfaceQT4/monWidgetCommandeDeplie1Niveau.py b/InterfaceQT4/monWidgetCommandeDeplie1Niveau.py index 9fa4cbd1..c03a17c1 100644 --- a/InterfaceQT4/monWidgetCommandeDeplie1Niveau.py +++ b/InterfaceQT4/monWidgetCommandeDeplie1Niveau.py @@ -80,7 +80,7 @@ class MonWidgetCommandeDeplie1Niveau(MonWidgetCommande): c.getPanel = self.getPanel c.affichePanneau = self.affichePanneau try : - c.fenetre.RBDeplie.setCheckable(False) + c.fenetre.RBDeplie.setCheckable(False) c.fenetre.RBDeplie.setEnabled(False) c.fenetre.RBDeplie.setIcon(icon) except : diff --git a/InterfaceQT4/monWidgetCreeParam.py b/InterfaceQT4/monWidgetCreeParam.py index a46ebddc..d53025c1 100644 --- a/InterfaceQT4/monWidgetCreeParam.py +++ b/InterfaceQT4/monWidgetCreeParam.py @@ -24,7 +24,6 @@ try : except : pass import types,os,re -from six.moves import range pattern_name = re.compile(r'^[^\d\W]\w*\Z') # Modules Eficas diff --git a/InterfaceQT4/monWidgetCreeUserAssd.py b/InterfaceQT4/monWidgetCreeUserAssd.py new file mode 100644 index 00000000..9d057853 --- /dev/null +++ b/InterfaceQT4/monWidgetCreeUserAssd.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2007-2020 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +# +# Modules Python +from __future__ import absolute_import +import types,os + + +# Modules Eficas +from Extensions.i18n import tr +from .monWidgetSimpTxt import MonWidgetSimpTxt +from PyQt5.QtCore import Qt + + + +class MonWidgetCreeUserAssd ( MonWidgetSimpTxt): + def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): + MonWidgetSimpTxt. __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) + #self.lineEditVal.returnPressed.connect(self.LEValeurAjouteDsPossible) + + def LEvaleurPressed(self): + try : + if str(self.lineEditVal.text())=="" or str(self.lineEditVal.text())==None : return + except : pass + valeurEntree = str(self.lineEditVal.text()) + if valeurEntree == self.oldValeurTexte : return + if self.oldValeurTexte == "" : enCreation = True + else : enCreation = False + if enCreation : validite,commentaire=self.objSimp.creeUserASSDetSetValeur(valeurEntree) + else : validite,commentaire=self.objSimp.renommeSdCree(valeurEntree) + if not enCreation : self.node.updateNodeTexte() + #PNPNPN -- signal update sur les fils ou ? + if commentaire != "" : + if validite : + self.editor.afficheCommentaire(commentaire) + self.oldValeurTexte = self.lineEditVal.text() + else : + self.editor.afficheInfos(commentaire,Qt.red) + self.lineEditVal.setText("") + + + diff --git a/InterfaceQT4/monWidgetFact.py b/InterfaceQT4/monWidgetFact.py index d1086240..06ff2fed 100644 --- a/InterfaceQT4/monWidgetFact.py +++ b/InterfaceQT4/monWidgetFact.py @@ -33,13 +33,13 @@ from Extensions.i18n import tr class MonWidgetFactCommun(Groupe): """ """ - def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=-1): + def __init__(self,node,editor,parentQt,definition, obj, niveau,commande): #print "fact : ",node.item.nom Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande) labeltext,fonte,couleur = self.node.item.getLabelText() self.GroupBox.setText(tr(labeltext)) self.GroupBox.setTextInteractionFlags(Qt.TextSelectableByMouse) - self.parentQt.commandesLayout.insertWidget(insertIn,self) + self.parentQt.commandesLayout.insertWidget(-1,self) self.doitAfficherOptionnel=False min,max=obj.getMinMax() if max < 2 and hasattr(self, 'RBPlus') : self.RBPlus.close() @@ -78,12 +78,14 @@ class MonWidgetFactCommun(Groupe): class MonWidgetFact(Ui_WidgetFact,MonWidgetFactCommun): - def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1): - MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn) + #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1): + # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn) + def __init__(self,node,editor,parentQt,definition, obj, niveau,commande): + MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande) -#class MonWidgetFactTableau(Ui_WidgetFactTableau,MonWidgetFactCommun): class MonWidgetFactTableau(Ui_WidgetFact,MonWidgetFactCommun): - def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1): - MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn) - #print ('je passe dans FactTableau') + #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=1): + # MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande,insertIn) + def __init__(self,node,editor,parentQt,definition, obj, niveau,commande): + MonWidgetFactCommun.__init__(self,node,editor,parentQt, definition,obj,niveau,commande) MonWidgetFactTableau.__init__(self,node,editor,parentQt, definition,obj,niveau,commande) diff --git a/InterfaceQT4/monWidgetFactPlie.py b/InterfaceQT4/monWidgetFactPlie.py index 17d79b58..e479f312 100644 --- a/InterfaceQT4/monWidgetFactPlie.py +++ b/InterfaceQT4/monWidgetFactPlie.py @@ -28,12 +28,13 @@ from Extensions.i18n import tr class MonWidgetFactPlie(Ui_WidgetFactPlie,Groupe): """ """ - def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=-1): + #def __init__(self,node,editor,parentQt,definition, obj, niveau,commande,insertIn=-1): + def __init__(self,node,editor,parentQt,definition, obj, niveau,commande): #print "fact plie : ",node.item.nom node.fenetreAAfficher=self Groupe.__init__(self,node,editor,parentQt, definition,obj,niveau,commande) self.groupBox.setText(self.node.item.getLabelText()[0]) - self.parentQt.commandesLayout.insertWidget(insertIn,self) + self.parentQt.commandesLayout.insertWidget(-1,self) def traiteClicSurLabel(self,texte): return diff --git a/InterfaceQT4/monWidgetIntoSug.py b/InterfaceQT4/monWidgetIntoSug.py index afb8f74a..42c72358 100644 --- a/InterfaceQT4/monWidgetIntoSug.py +++ b/InterfaceQT4/monWidgetIntoSug.py @@ -27,7 +27,6 @@ except : pass import types,os # Modules Eficas -from six.moves import range from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel from PyQt5.QtWidgets import QSizePolicy,QSpacerItem from PyQt5.QtGui import QPalette, QFont diff --git a/InterfaceQT4/monWidgetMatrice.py b/InterfaceQT4/monWidgetMatrice.py index 53c87c35..843da9aa 100644 --- a/InterfaceQT4/monWidgetMatrice.py +++ b/InterfaceQT4/monWidgetMatrice.py @@ -34,7 +34,6 @@ from .feuille import Feuille from desWidgetMatrice import Ui_desWidgetMatrice -from six.moves import range from PyQt5.QtCore import QSize, Qt from PyQt5.QtWidgets import QTableWidgetItem from PyQt5.QtGui import QIcon diff --git a/InterfaceQT4/monWidgetParam.py b/InterfaceQT4/monWidgetParam.py index 287e5ee1..cb799fe5 100644 --- a/InterfaceQT4/monWidgetParam.py +++ b/InterfaceQT4/monWidgetParam.py @@ -26,7 +26,6 @@ except : pass from desWidgetParam import Ui_WidgetParam from InterfaceQT4.gereIcones import FacultatifOuOptionnel -import six from PyQt5.QtWidgets import QWidget, QMessageBox from PyQt5.QtGui import QIcon @@ -131,7 +130,7 @@ class MonWidgetParam(QWidget,Ui_WidgetParam,FacultatifOuOptionnel): try : exec(monTexte, contexte) except (ValueError,TypeError, NameError,RuntimeError,ZeroDivisionError) as exc: - self.LECommentaire.setText(tr("Valeur incorrecte: ")+six.text_type (exc)) + self.LECommentaire.setText(tr("Valeur incorrecte: ")+str(exc)) return False except : self.LECommentaire.setText(tr("Valeur incorrecte ")) diff --git a/InterfaceQT4/monWidgetPlusieursASSDIntoOrdonne.py b/InterfaceQT4/monWidgetPlusieursASSDIntoOrdonne.py index 6d7c0452..172a5cf6 100644 --- a/InterfaceQT4/monWidgetPlusieursASSDIntoOrdonne.py +++ b/InterfaceQT4/monWidgetPlusieursASSDIntoOrdonne.py @@ -31,7 +31,6 @@ from Extensions.i18n import tr from .monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne from .politiquesValidation import PolitiquePlusieurs -from six.moves import range from PyQt5.QtWidgets import QScrollBar diff --git a/InterfaceQT4/monWidgetPlusieursBase.py b/InterfaceQT4/monWidgetPlusieursBase.py index d00e22df..8086a28f 100644 --- a/InterfaceQT4/monWidgetPlusieursBase.py +++ b/InterfaceQT4/monWidgetPlusieursBase.py @@ -27,7 +27,6 @@ except : pass import types,os,sys -from six.moves import range from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QMessageBox, QScrollArea from PyQt5.QtCore import QTimer, QSize, Qt diff --git a/InterfaceQT4/monWidgetPlusieursInto.py b/InterfaceQT4/monWidgetPlusieursInto.py index 16c3fbdd..76cd5bde 100644 --- a/InterfaceQT4/monWidgetPlusieursInto.py +++ b/InterfaceQT4/monWidgetPlusieursInto.py @@ -27,7 +27,6 @@ except : pass import types,os # Modules Eficas -from six.moves import range from PyQt5.QtWidgets import QCheckBox, QScrollBar, QFrame, QApplication, QLabel from PyQt5.QtWidgets import QSizePolicy,QSpacerItem from PyQt5.QtGui import QPalette, QFont diff --git a/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py b/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py index a79317e1..c7d778c3 100644 --- a/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py +++ b/InterfaceQT4/monWidgetPlusieursIntoOrdonne.py @@ -37,7 +37,6 @@ from .gereListe import LECustom from .gereListe import MonLabelListeClic from Extensions.i18n import tr -from six.moves import range from PyQt5.QtWidgets import QFrame, QApplication, QScrollBar from PyQt5.QtCore import QTimer, QSize, Qt from PyQt5.QtGui import QIcon, QPalette diff --git a/InterfaceQT4/monWidgetPlusieursTuple.py b/InterfaceQT4/monWidgetPlusieursTuple.py index 531f0a43..e31a8d31 100644 --- a/InterfaceQT4/monWidgetPlusieursTuple.py +++ b/InterfaceQT4/monWidgetPlusieursTuple.py @@ -27,7 +27,6 @@ except : pass import types,os,sys -from six.moves import range from PyQt5.QtWidgets import QFrame,QApplication, QFrame, QWidget from PyQt5.QtGui import QIcon from PyQt5.QtCore import QSize, Qt, QTimer diff --git a/InterfaceQT4/monWidgetSimpBase.py b/InterfaceQT4/monWidgetSimpBase.py index 9f2a20b9..d1252feb 100644 --- a/InterfaceQT4/monWidgetSimpBase.py +++ b/InterfaceQT4/monWidgetSimpBase.py @@ -61,12 +61,6 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille): self.LEvaleurPressed() QLineEdit.focusOutEvent(self.lineEditVal,event) - #def showEvent(self, event): - # if self.prendLeFocus==1 : - # self.activateWindow() - # self.lineEditVal.setFocus() - # self.prendLeFocus=0 - # QWidget.showEvent(self,event) def setValeurs(self): #print ("dans setValeurs") @@ -119,8 +113,4 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille): self.setValeurs() self.reaffiche() - #if self.objSimp.parent.nom == "MODEL" : - # if self.objSimp.isValid(): - # self.objSimp.parent.change_fichier="1" - #self.node.item.parent.buildInclude(None,"") diff --git a/InterfaceQT4/monWidgetSimpTuple.py b/InterfaceQT4/monWidgetSimpTuple.py index b75a5676..792df7d9 100644 --- a/InterfaceQT4/monWidgetSimpTuple.py +++ b/InterfaceQT4/monWidgetSimpTuple.py @@ -26,7 +26,6 @@ except : pass import types,os -from six.moves import range from PyQt5.QtCore import Qt # Modules Eficas diff --git a/InterfaceQT4/politiquesValidation.py b/InterfaceQT4/politiquesValidation.py index 274a9f82..01acd986 100644 --- a/InterfaceQT4/politiquesValidation.py +++ b/InterfaceQT4/politiquesValidation.py @@ -38,7 +38,8 @@ class Validation(object) : def testeUneValeur(self,valeurentree): commentaire = None - #print ('testeUneValeur', valeurentree) + #import traceback + #traceback.print_stack() valeur,validite=self.node.item.evalValeur(valeurentree) if not validite : commentaire = "impossible d'evaluer : %s " %repr(valeurentree) diff --git a/InterfaceQT4/qtEficas.py b/InterfaceQT4/qtEficas.py index a50d5109..4b3fd8af 100755 --- a/InterfaceQT4/qtEficas.py +++ b/InterfaceQT4/qtEficas.py @@ -26,7 +26,6 @@ try : except : pass import os, sys -import six from PyQt5.QtWidgets import QApplication, QMainWindow, QGridLayout, QBoxLayout, QMenu, QAction, QMessageBox @@ -846,7 +845,7 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): try: self.viewmanager.newEditor() except EficasException as exc: - msg = six.text_type(exc) + msg = str(exc) if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg) def openProcess(self): @@ -867,7 +866,7 @@ class Appli(AppliSsIhm,Ui_Eficas,QMainWindow): try: self.viewmanager.handleOpen() except EficasException as exc: - msg = six.text_type(exc) + msg = str(exc) if msg != "": QMessageBox.warning(self, tr(u"Erreur"), msg) diff --git a/InterfaceQT4/qtEficasSsIhm.py b/InterfaceQT4/qtEficasSsIhm.py index c16a0c0f..77df76a8 100755 --- a/InterfaceQT4/qtEficasSsIhm.py +++ b/InterfaceQT4/qtEficasSsIhm.py @@ -18,6 +18,7 @@ # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # + from __future__ import absolute_import from __future__ import print_function try : @@ -25,7 +26,6 @@ try : except : pass import os, sys -import six from Extensions.eficas_exception import EficasException from Extensions import param2 @@ -132,8 +132,7 @@ class AppliSsIhm: def initEditor(self,fichier = None,jdc = None, units = None,include=0): if (hasattr(self, 'editor')) and self.editor != None : print ('un seul editeur par application') - sys.Exit() - #self.editor = JDCEditorSsIhm(self,fichier, jdc, self.myQtab,units=units,include=include) + sys.exit() self.editor = self.viewmanager.getNewEditorNormal() def initEditorNormal(self,fichier = None,jdc = None, units = None,include=0): @@ -153,7 +152,7 @@ class AppliSsIhm: return self.editor def fileOpen(self,fichier): - fichierIn = os.path.abspath(six.text_type(fichier)) + fichierIn = os.path.abspath(fichier) try: monEditor=self.viewmanager.handleOpen(fichierIn) except EficasException as exc: diff --git a/InterfaceQT4/qtSaisie.py b/InterfaceQT4/qtSaisie.py index b674b031..f6f227a7 100644 --- a/InterfaceQT4/qtSaisie.py +++ b/InterfaceQT4/qtSaisie.py @@ -46,6 +46,7 @@ class SaisieValeur(object): if not hasattr(self, 'inSaisieValeur' ) : self.inSaisieValeur=False if self.inSaisieValeur : return self.inSaisieValeur=True + if valeur == None : try : nouvelleValeur=str(self.lineEditVal.text()) @@ -57,24 +58,24 @@ class SaisieValeur(object): self.inSaisieValeur=False return else : - #PN PN PN ???? la 1 ligne est tres bizarre. try : - if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom)) + # la 1 ligne est tres bizarre. remplacee par le 3nd le 01 10 19 + #if hasattr(self,"lineEditVal"):self.lineEditVal.setText(tr(valeur.nom)) + if hasattr(self,"lineEditVal") : self.lineEditVal.setText(tr(valeur)) except : if hasattr(self,"lineEditVal"):self.lineEditVal.setText(valeur) nouvelleValeur=valeur + if self.node.item.definition.validators != None : - if self.node.item.definition.validators.verifItem(nouvelleValeur) !=1 : + if self.node.item.definition.validators.verifItem(nouvelleValeur) !=1 : commentaire=self.node.item.definition.validators.infoErreurItem() self.editor.afficheInfos(commentaire,Qt.red) self.inSaisieValeur=False return + nouvelleValeurFormat=self.politique.getValeurTexte(nouvelleValeur) validite,commentaire=self.politique.recordValeur(nouvelleValeurFormat) if commentaire != "" : - #PNPNPNP Il faut trouver une solution pour les 2 cas - # self.editor.afficheInfos(commentaire) - #self.Commentaire.setText(tr(commentaire)) if validite : self.editor.afficheCommentaire(commentaire) else : diff --git a/InterfaceQT4/viewManager.py b/InterfaceQT4/viewManager.py index 3d6f7d6b..e92a2bfa 100644 --- a/InterfaceQT4/viewManager.py +++ b/InterfaceQT4/viewManager.py @@ -26,7 +26,6 @@ except : pass import os from Extensions.i18n import tr -import six from PyQt5.QtWidgets import QFileDialog, QMessageBox from PyQt5.QtCore import QFileInfo @@ -39,19 +38,21 @@ class MyViewManager(object): self.mesIndexes = {} self.appliEficas=appliEficas self.editors = [] - self.dict_editors={} + self.dictEditors={} self.untitledCount = 0 self.doubles = {} self.myQtab = self.appliEficas.myQtab - self.myQtab.currentChanged.connect(self.indexChanged) self.myQtab.tabCloseRequested.connect(self.closeTab) def indexChanged(self): index=self.myQtab.currentIndex() - if index in self.dict_editors: - editor=self.dict_editors[index] + if index in self.dictEditors: + editor=self.dictEditors[index] + if editor.jdc !=None : + CONTEXT.unsetCurrentJdC() + CONTEXT.setCurrentJdC(editor.jdc) self.appliEficas.maConfiguration=editor.maConfiguration self.appliEficas.code=editor.maConfiguration.code self.appliEficas.setWindowTitle(editor.titre) @@ -74,14 +75,14 @@ class MyViewManager(object): fichier = QFileDialog.getOpenFileName(self.appliEficas, tr('Ouvrir Fichier'), self.appliEficas.maConfiguration.savedir, - extensions) + extensions) fichier=fichier[0] - fichier = os.path.abspath(six.text_type(fichier)) - ulfile = os.path.abspath(six.text_type(fichier)) + fichier = os.path.abspath(fichier) + ulfile = os.path.abspath(fichier) self.appliEficas.maConfiguration.savedir=os.path.split(ulfile)[0] self.appliEficas.addToRecentList(fichier) - maPage=self.getEditor( fichier,units=units) - if maPage: result = maPage + maPage = self.getEditor( fichier,units=units) + if maPage : result = maPage if maPage : self.myQtab.setTabText(self.myQtab.indexOf(maPage),os.path.basename(fichier)) return result @@ -90,18 +91,18 @@ class MyViewManager(object): def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter'),indexAFermer=None): if doitSauverRecent : self.appliEficas.sauveRecents() - if indexAFermer == None :index=self.myQtab.currentIndex() + if indexAFermer == None : index=self.myQtab.currentIndex() else : index = indexAFermer if index < 0 : return - res=self.checkDirty(self.dict_editors[index],texte) + res=self.checkDirty(self.dictEditors[index],texte) if res == 2 : return 2 # l utilisateur a annule idx=index - while idx < len(self.dict_editors) -1 : - self.dict_editors[idx]=self.dict_editors[idx+1] + while idx < len(self.dictEditors) -1 : + self.dictEditors[idx]=self.dictEditors[idx+1] idx = idx + 1 - del self.dict_editors[len (self.dict_editors) -1] + del self.dictEditors[len (self.dictEditors) -1] try : - del self.doubles[self.dict_editors[index]] + del self.doubles[self.dictEditors[index]] except : pass self.myQtab.removeTab(index) @@ -111,19 +112,19 @@ class MyViewManager(object): def run(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.run() def saveRun(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.saveRun() def handleCloseAll(self,texte=tr('Quitter')): res=0 self.appliEficas.sauveRecents() - while len(self.dict_editors) > 0 : + while len(self.dictEditors) > 0 : self.myQtab.setCurrentIndex(0) res=self.handleClose(0,texte) if res==2 : return res # l utilsateur a annule @@ -133,53 +134,53 @@ class MyViewManager(object): #print "passage dans handleRechercher" index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleRechercher() def handleRechercherDsCatalogue(self): #print "passage dans handleRechercher" index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleRechercherDsCatalogue() def handleDeplier(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleDeplier() def handleEditCopy(self): #print "passage dans handleEditCopy" index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleEditCopy() def handleEditCut(self): #print "passage dans handleEditCut" index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleEditCut() def handleEditPaste(self): #print "passage dans handleEditPaste" index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleEditPaste() def handleSupprimer(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleSupprimer() def handleAjoutEtape(self,nomEtape): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.handleAjoutEtape(nomEtape) @@ -195,50 +196,50 @@ class MyViewManager(object): def handleViewJdcFichierSource(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].viewJdcSource() + self.dictEditors[index].viewJdcSource() def ouvreArbre(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].ouvreArbre() + self.dictEditors[index].ouvreArbre() def fermeArbre(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].fermeArbre() + self.dictEditors[index].fermeArbre() def ajoutCommentaire(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] editor.ajoutCommentaire() def handleViewJdcRegles(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].viewJdcRegles() + self.dictEditors[index].viewJdcRegles() def handleGestionParam(self): index=self.myQtab.currentIndex() if index < 0 : QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees")) return - self.dict_editors[index].gestionParam() + self.dictEditors[index].gestionParam() def handleViewJdcRapport(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].viewJdcRapport() + self.dictEditors[index].viewJdcRapport() def handleViewJdcPy(self): index=self.myQtab.currentIndex() if index < 0 : return - self.dict_editors[index].viewJdcPy() + self.dictEditors[index].viewJdcPy() def saveCurrentEditor(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] if editor in self.doubles : QMessageBox.warning( None, @@ -247,21 +248,21 @@ class MyViewManager(object): return ok, newName = editor.saveFile() if ok : - fileName=os.path.basename(six.text_type(newName)) + fileName=os.path.basename(newName) self.myQtab.setTabText(index,fileName) return ok def saveCompleteCurrentEditor(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] ok, newName = editor.saveCompleteFile() return ok def sauveLigneCurrentEditor(self): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[index] if editor in self.doubles : QMessageBox.warning( None, @@ -270,18 +271,17 @@ class MyViewManager(object): return ok, newName = editor.sauveLigneFile() if ok : - fileName=os.path.basename(six.text_type(newName)) + fileName=os.path.basename(newName) self.myQtab.setTabText(index,fileName) return ok - def saveAsCurrentEditor(self): index=self.myQtab.currentIndex() - editor=self.dict_editors[index] + editor=self.dictEditors[index] oldName=editor.fichier ok,newName = editor.saveFileAs() if ok : - fileName=os.path.basename(six.text_type(newName)) + fileName=os.path.basename(newName) self.myQtab.setTabText(index,fileName) if editor in self.doubles : if oldName != newName : @@ -303,8 +303,8 @@ class MyViewManager(object): newWin = 0 double = None indexEditor=0 - for indexEditor in self.dict_editors : - editor=self.dict_editors[indexEditor] + for indexEditor in self.dictEditors : + editor=self.dictEditors[indexEditor] if self.samePath(fichier, editor.getFileName()): msgBox = QMessageBox() msgBox.setWindowTitle(tr("Fichier")) @@ -332,7 +332,7 @@ class MyViewManager(object): index=self.myQtab.currentIndex() if index != -1 : - self.dict_editors[index]=editor + self.dictEditors[index]=editor return editor def addView(self, win, fichier=None): @@ -399,7 +399,7 @@ class MyViewManager(object): if res == 0: (ok, newName) = editor.saveFile() if ok: - fileName=os.path.basename(six.text_type(newName)) + fileName=os.path.basename(newName) index=self.myQtab.currentIndex() self.myQtab.setTabText(index,fileName) return ok @@ -408,14 +408,14 @@ class MyViewManager(object): def handleAjoutGroup(self,listeGroup): index=self.myQtab.currentIndex() if index < 0 : return - editor=self.dict_editors[index] + editor=self.dictEditors[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] + editor=self.dictEditors[index] if editor.getEtapeCourante() == None : QMessageBox.information( self.appliEficas, tr("Selectionner une etape"), @@ -428,5 +428,5 @@ class MyViewManager(object): 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) + laFonctionUtilisateur(*listeParam) diff --git a/InterfaceQT4/viewManagerSsIhm.py b/InterfaceQT4/viewManagerSsIhm.py index 93af86e2..030f86a8 100644 --- a/InterfaceQT4/viewManagerSsIhm.py +++ b/InterfaceQT4/viewManagerSsIhm.py @@ -79,7 +79,7 @@ class MyViewManagerSsIhm(object): #-------------------------------- # Symetrique de ViewManager mais pas d heritage entre les 2 # dans le viewManager pas de souci pour savoir qui est le jdc sur lequel on travaille -# ici en revanche.... c est moins sur +# ici en revanche.... c est moins sur . voir avec le fichier # -------------------------------- def __init__(self,appliEficas): @@ -111,6 +111,10 @@ class MyViewManagerSsIhm(object): # ---------------------------------------------------------------------- def getNewEditor(self,fichier = None,jdc = None, units = None,include=0): # ---------------------------------------------------------------------- +# il faudrait decider entre e handler ou non +# le cas d usage n est pas tout a fait identique : +# avec handler pour les utilisateurs avance +# sans pour les utilisateurs encore plus ancvances et les tests from InterfaceQT4.editorSsIhm import JDCEditorSsIhm editor = JDCEditorSsIhm(self.appliEficas,fichier,jdc, units=units,include=include) @@ -235,187 +239,3 @@ class MyViewManagerSsIhm(object): self.dictEditors[handler].saveFileLegerAs(fileName) -# def handleClose(self,doitSauverRecent = 1,texte=tr('&Quitter')): -# if doitSauverRecent : self.appliEficas.sauveRecents() -# index=self.myQtab.currentIndex() -# if index < 0 : return -# res=self.checkDirty(self.dict_editors[index],texte) -# if res == 2 : return 2 # l utilisateur a annule -# index=self.myQtab.currentIndex() -# idx=index -# while idx < len(self.dict_editors) -1 : -# self.dict_editors[idx]=self.dict_editors[idx+1] -# idx = idx + 1 -# del self.dict_editors[len (self.dict_editors) -1] -# try : -# del self.doubles[self.dict_editors[index]] -# except : -# pass -# self.myQtab.removeTab(index) -# return res -# - -# -# def handleCloseAll(self,texte=tr('Quitter')): -# res=0 -# self.appliEficas.sauveRecents() -# while len(self.dict_editors) > 0 : -# self.myQtab.setCurrentIndex(0) -# res=self.handleClose(0,texte) -# if res==2 : return res # l utilsateur a annule -# return res -# -# -# -# def newEditor(self,include=0): -# if self.appliEficas.demande==True : -# self.appliEficas.definitCode(None,None) -# if self.appliEficas.code == None:return -# maPage=self.getEditor(include=include) -# - -# -# def handleViewJdcRegles(self): -# index=self.myQtab.currentIndex() -# if index < 0 : return -# self.dict_editors[index].viewJdcRegles() -# -# def handleGestionParam(self): -# index=self.myQtab.currentIndex() -# if index < 0 : -# QMessageBox.warning( self.appliEficas,tr(u"Creation Parametre indisponible"),tr(u"les parametres sont lies a un jeu de donnees")) -# return -# self.dict_editors[index].gestionParam() -# -# -# -# def saveCurrentEditor(self): -# index=self.myQtab.currentIndex() -# if index < 0 : return -# editor=self.dict_editors[index] -# if editor in self.doubles : -# QMessageBox.warning( -# None, -# tr("Fichier Duplique"), -# tr("Le fichier ne sera pas sauvegarde."),) -# return -# ok, newName = editor.saveFile() -# if ok : -# fileName=os.path.basename(six.text_type(newName)) -# self.myQtab.setTabText(index,fileName) -# return ok -# -# def saveLegerCurrentEditor(self): -# index=self.myQtab.currentIndex() -# if index < 0 : return -# editor=self.dict_editors[index] -# ok, newName = editor.saveFileLeger() -# return ok -# -# def sauveLigneCurrentEditor(self): -# index=self.myQtab.currentIndex() -# if index < 0 : return -# editor=self.dict_editors[index] -# if editor in self.doubles : -# QMessageBox.warning( -# None, -# tr("Fichier Duplique"), -# tr("Le fichier ne sera pas sauvegarde."),) -# return -# ok, newName = editor.sauveLigneFile() -# if ok : -# fileName=os.path.basename(six.text_type(newName)) -# self.myQtab.setTabText(index,fileName) -# return ok -# -# -# def saveAsCurrentEditor(self): -# index=self.myQtab.currentIndex() -# editor=self.dict_editors[index] -# oldName=editor.fichier -# ok,newName = editor.saveFileAs() -# if ok : -# fileName=os.path.basename(six.text_type(newName)) -# self.myQtab.setTabText(index,fileName) -# if editor in self.doubles : -# if oldName != newName : -# del self.doubles[editor] -# return ok -# -# def displayJDC(self,jdc,fn=None): -# """ -# Public slot to display a file in an editor. -# @param fn name of file to be opened -# # insert filename into list of recently opened files -# """ -# titre=None -# if fn != None : titre=fn.split("/")[-1] -# editor = self.getEditor(fichier= fn, jdc = jdc ,include=1) -# - -##PNPNPNPN --> a affiner -# if fichier is None: -# self.untitledCount += 1 -# self.myQtab.addTab(win, tr("Fichier non encore nomme ", self.untitledCount)) -# #self.myQtab.addTab(win, str(self.appliEficas.code)) -# else: -# liste=fichier.split('/') -# txt = liste[-1] -# if not QFileInfo(fichier).isWritable(): -# txt = '%s (ro)' % txt -# self.myQtab.addTab(win,txt ) -# self.myQtab.setCurrentWidget(win) -# self.currentEditor=win -# win.setFocus() -# -# def getOpenStartDir(self) : -# #PN --> Les Preferences -# try : -# userDir=os.path.expanduser("~/Eficas_install/") -# return userDir -# except : -# return "" -# -# -# def checkDirty(self, editor,texte): -# """ -# Private method to check dirty status and open a message window. -# -# @param editor editor window to check -# @return flag indicating successful reset of the dirty flag (boolean) -# """ -# res=1 -# if (editor.modified) and (editor in self.doubles) : -# msgBox = QMessageBox(None) -# msgBox.setWindowTitle(tr("Fichier Duplique")) -# msgBox.setText(tr("Le fichier ne sera pas sauvegarde.")) -# msgBox.addButton(texte,0) -# msgBox.addButton(tr("&Annuler"),1) -# res=msgBox.exec_() -# if res == 0 : return 1 -# return 2 -# if editor.modified: -# fn = editor.getFileName() -# if fn is None: fn = tr('Noname') -# msgBox = QMessageBox(None) -# msgBox.setWindowTitle(tr("Fichier Modifie")) -# msgBox.setText(tr("Le fichier ne sera pas sauvegarde.")) -# msgBox.addButton(tr("&Sauvegarder"),1) -# msgBox.addButton(tr("&Quitter sans sauvegarder"),0) -# msgBox.addButton(tr("&Annuler"),2) -# res=msgBox.exec_() -# if res == 2 : return res -# if res == 0: -# (ok, newName) = editor.saveFile() -# if ok: -# fileName=os.path.basename(six.text_type(newName)) -# index=self.myQtab.currentIndex() -# self.myQtab.setTabText(index,fileName) -# return ok -# return res -# -# def handleAjoutGroup(self,listeGroup): -# index=self.myQtab.currentIndex() -# if index < 0 : return -# editor=self.dict_editors[index] -# editor.handleAjoutGroup(listeGroup) diff --git a/Noyau/N_ASSD.py b/Noyau/N_ASSD.py index a7fae981..cf1185f7 100644 --- a/Noyau/N_ASSD.py +++ b/Noyau/N_ASSD.py @@ -33,6 +33,7 @@ class ASSD(object): """ Classe de base pour definir des types de structures de donnees ASTER equivalent d un concept ASTER + Doit_on garder tout ce qui concerne jeveux ? """ idracine = "SD" diff --git a/Noyau/N_CO.py b/Noyau/N_CO.py index c46cd58d..998922e6 100644 --- a/Noyau/N_CO.py +++ b/Noyau/N_CO.py @@ -38,7 +38,7 @@ class CO(ASSD) : # if self.parent: try: - self.parent.NommerSdprod(self, nom) + self.parent.nommerSDProd(self, nom) except AsException as e: appel = N_utils.calleeWhere(niveau=2) raise AsException( diff --git a/Noyau/N_CONVERT.py b/Noyau/N_CONVERT.py index 3a89a528..c5a490e7 100644 --- a/Noyau/N_CONVERT.py +++ b/Noyau/N_CONVERT.py @@ -40,9 +40,9 @@ class Conversion(object): """Conversion de type. """ - def __init__(self, name, typ): + def __init__(self, name, typeACreer): self.name = name - self.typ = typ + self.typeACreer = typeACreer def convert(self, obj): """Filtre liste @@ -68,11 +68,11 @@ class Conversion(object): class TypeConversion(Conversion): - """Conversion de type + """Conversion de typeACreer """ - def __init__(self, typ): - Conversion.__init__(self, 'type', typ) + def __init__(self, typeACreer): + Conversion.__init__(self, 'type', typeACreer) class IntConversion(TypeConversion): @@ -103,14 +103,28 @@ class FloatConversion(TypeConversion): return o +class UserASSDConversion(TypeConversion): + def __init__(self, classUser): + TypeConversion.__init__(self, classUser) + + def function(self, o): + import traceback + print ('je convertis : ', o, 'en ', self.typeACreer ) + traceback.print_stack() + print ('__________________________________________________________ UserASSDConversion') + if o == None : return None + nouvelObj=self.typeACreer(o) + return nouvelObj + _convertI = IntConversion() _convertR = FloatConversion() def ConversionFactory(name, typ): if name == 'type': - if 'I' in typ: - return _convertI - elif 'R' in typ: - return _convertR + if 'I' in typ : return _convertI + elif 'R' in typ : return _convertR + if name == 'UserASSD': + #print(typ) + return (UserASSDConversion(typ)) return None diff --git a/Noyau/N_ENTITE.py b/Noyau/N_ENTITE.py index 9a7eed98..a6ab02bb 100644 --- a/Noyau/N_ENTITE.py +++ b/Noyau/N_ENTITE.py @@ -67,7 +67,7 @@ class ENTITE(object): self.validators = self.factories['validator'](validators) else: self.validators = validators - self.doitSenregistrerComme = None + #self.doitSenregistrerComme = None self.txtNomComplet='' self.redefinit=False diff --git a/Noyau/N_ETAPE.py b/Noyau/N_ETAPE.py index 5a185e20..dd3f493e 100644 --- a/Noyau/N_ETAPE.py +++ b/Noyau/N_ETAPE.py @@ -430,7 +430,7 @@ Causes possibles : new_sd = self.sd.__class__(etape=new_etape) new_etape.sd = new_sd if self.reuse == None: - new_etape.parent.NommerSdprod(new_sd, self.sd.nom) + new_etape.parent.nommerSDProd(new_sd, self.sd.nom) else: new_sd.setName(self.sd.nom) new_etape.copyIntern(self) @@ -441,7 +441,7 @@ Causes possibles : Reinitialise le nommage du concept de l'etape lors d'un changement de jdc """ if self.sd and self.reuse == None: - self.parent.NommerSdprod(self.sd, self.sd.nom) + self.parent.nommerSDProd(self.sd, self.sd.nom) def isInclude(self): """Permet savoir si on a affaire a la commande INCLUDE diff --git a/Noyau/N_GEOM.py b/Noyau/N_GEOM.py index 2bde47a3..816fd422 100644 --- a/Noyau/N_GEOM.py +++ b/Noyau/N_GEOM.py @@ -23,7 +23,9 @@ """ from __future__ import absolute_import from .N_ASSD import ASSD -import six +try:basestring +except NameError: basestring = str + class GEOM(ASSD): @@ -58,7 +60,7 @@ class GEOM(ASSD): return self.nom def __convert__(cls, valeur): - if isinstance(valeur, (str, six.text_type)) and len(valeur.strip()) <= 8: + if isinstance(valeur, basestring) and len(valeur.strip()) <= 8: return valeur.strip() raise ValueError( _(u'On attend une chaine de caractères (de longueur <= 8).')) diff --git a/Noyau/N_JDC.py b/Noyau/N_JDC.py index 575f5512..9f74b90a 100644 --- a/Noyau/N_JDC.py +++ b/Noyau/N_JDC.py @@ -89,6 +89,7 @@ NONE = None cata_ord_dico=None, parent=None, nom='SansNom', appliEficas=None, context_ini=None, **args): self.procedure = procedure + print (self.procedure) self.definition = definition self.cata = cata # PN pourquoi ? @@ -127,14 +128,15 @@ NONE = None # on met le jdc lui-meme dans le context global pour l'avoir sous # l'etiquette "jdc" dans le fichier de commandes self.g_context = {'jdc': self} + CONTEXT.unsetCurrentJdC() + CONTEXT.setCurrentJdC(self) # Dictionnaire pour stocker tous les concepts du JDC (acces rapide par # le nom) - self.sds_dict = {} - self.utilise_un_sds_dict = {} + self.sdsDict = {} self.etapes = [] self.index_etapes = {} self.mc_globaux = {} - self.current_context = {} + self.currentContext = {} self.condition_context = {} self.index_etape_courante = 0 self.UserError = "UserError" @@ -187,6 +189,7 @@ Causes possibles : Cette methode execute le jeu de commandes compile dans le contexte self.g_context de l'objet JDC """ + CONTEXT.setCurrentStep(self) # Le module nommage utilise le module linecache pour acceder # au source des commandes du jeu de commandes. @@ -196,6 +199,7 @@ Causes possibles : import linecache linecache.cache[self.nom] = 0, 0, self.procedure.split('\n'), self.nom try: + #if 1 : exec(self.exec_init, self.g_context) for obj_cata in (self.cata,): if type(obj_cata) == types.ModuleType: @@ -218,7 +222,7 @@ Causes possibles : # Update du dictionnaire des concepts for sdnom, sd in list(self.context_ini.items()): if isinstance(sd, ASSD): - self.sds_dict[sdnom] = sd + self.sdsDict[sdnom] = sd #if self.appliEficas != None: # self.appliEficas.afficheInfos( @@ -235,6 +239,8 @@ Causes possibles : if self.appliEficas != None: self.appliEficas.afficheInfos('') + #try : + # print ('PNPN') except InterruptParsingError: # interrupt the command file parsing used by FIN to ignore the end # of the file @@ -327,8 +333,6 @@ Causes possibles : Cette methode ajoute etape dans la liste des etapes : self.etapes et retourne un numero d'enregistrement """ - import traceback - traceback.print_stack() self.etapes.append(etape) self.index_etapes[etape] = len(self.etapes) - 1 return self.gRegister(etape) @@ -374,17 +378,17 @@ Causes possibles : if sd != None and (etape.definition.reentrant == 'n' or etape.reuse is None): # ATTENTION : On ne nomme la SD que dans le cas de non reutilisation # d un concept. Commande non reentrante ou reuse absent. - self.NommerSdprod(sd, nomsd) + self.nommerSDProd(sd, nomsd) return sd - def NommerSdprod(self, sd, sdnom, restrict='non'): + def nommerSDProd(self, sd, sdnom, restrict='non'): """ Nomme la SD apres avoir verifie que le nommage est possible : nom non utilise Si le nom est deja utilise, leve une exception Met le concept cree dans le concept global g_context """ - o = self.sds_dict.get(sdnom, None) + o = self.sdsDict.get(sdnom, None) if isinstance(o, ASSD): raise AsException("Nom de concept deja defini : %s" % sdnom) if sdnom in self._reserved_kw: @@ -392,7 +396,7 @@ Causes possibles : "Nom de concept invalide. '%s' est un mot-cle reserve." % sdnom) # Ajoute a la creation (appel de regSD). - self.sds_dict[sdnom] = sd + self.sdsDict[sdnom] = sd sd.setName(sdnom) # En plus si restrict vaut 'non', on insere le concept dans le contexte @@ -400,6 +404,14 @@ Causes possibles : if restrict == 'non': self.g_context[sdnom] = sd + def regUserSD(self,sd): + # utilisee pour creer les references + # se contente d appeler la methode equivalente sur le jdc + id=self.regSD(sd) + self.nommerSDProd(sd,sd.nom) + return id + + def regSD(self, sd): """ Methode appelee dans l __init__ d un ASSD lors de sa creation @@ -528,9 +540,9 @@ Causes possibles : # courante pendant le processus de construction des etapes. # Si on insère des commandes (par ex, dans EFICAS), il faut prealablement # remettre ce pointeur a 0 - # self.current_context.items() if isinstance(v, ASSD)]) + # self.currentContext.items() if isinstance(v, ASSD)]) if self.parLot_user == 'NON': - d = self.current_context = self.g_context.copy() + d = self.currentContext = self.g_context.copy() if etape is None: return d # retirer les sd produites par 'etape' @@ -551,12 +563,12 @@ Causes possibles : index_etape = len(self.etapes) if index_etape >= self.index_etape_courante: # On calcule le contexte en partant du contexte existant - d = self.current_context + d = self.currentContext if self.index_etape_courante == 0 and self.context_ini: d.update(self.context_ini) liste_etapes = self.etapes[self.index_etape_courante:index_etape] else: - d = self.current_context = {} + d = self.currentContext = {} if self.context_ini: d.update(self.context_ini) liste_etapes = self.etapes @@ -609,13 +621,13 @@ Causes possibles : co.executed = 1 return co - def del_concept(self, nomsd): + def delConcept(self, nomsd): """ - Methode pour supprimer la reference d'un concept dans le sds_dict. + Methode pour supprimer la reference d'un concept dans le sdsDict. Ne detruire pas le concept (different de supprime). """ try: - del self.sds_dict[nomsd.strip()] + del self.sdsDict[nomsd.strip()] except: pass diff --git a/Noyau/N_MACRO_ETAPE.py b/Noyau/N_MACRO_ETAPE.py index 793fe07e..5cb81706 100644 --- a/Noyau/N_MACRO_ETAPE.py +++ b/Noyau/N_MACRO_ETAPE.py @@ -250,6 +250,7 @@ Causes possibles : # L'etape courante pour laquelle le contexte a ete calcule est # memorisee dans self.index_etape_courante # self.current_context.items() if isinstance(v, ASSD)]) + print ('hjhj') d = self.current_context = self.g_context.copy() if etape is None: return d @@ -503,10 +504,10 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t, # On est dans le cas de la creation d'un nouveau concept sd = etape.getSdProd() if sd != None: - self.NommerSdprod(sd, nomsd) + self.nommerSDProd(sd, nomsd) return sd - def NommerSdprod(self, sd, sdnom, restrict='non'): + def nommerSDProd(self, sd, sdnom, restrict='non'): """ Cette methode est appelee par les etapes internes de la macro. La macro appelle le JDC pour valider le nommage. @@ -552,14 +553,14 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t, if restrict == 'non': # On demande le nommage au parent mais sans ajout du concept dans le contexte du parent # car on va l'ajouter dans le contexte de la macro - self.parent.NommerSdprod(sd, sdnom, restrict='oui') + self.parent.nommerSDProd(sd, sdnom, restrict='oui') # On ajoute dans le contexte de la macro les concepts nommes # Ceci est indispensable pour les CO (macro) dans un INCLUDE self.g_context[sdnom] = sd else: # La demande de nommage vient probablement d'une macro qui a mis # le concept dans son contexte. On ne traite plus que le nommage (restrict="oui") - self.parent.NommerSdprod(sd, sdnom, restrict='oui') + self.parent.nommerSDProd(sd, sdnom, restrict='oui') def deleteConceptAfterEtape(self, etape, sd): """ @@ -719,7 +720,7 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t, if etp.reuse: new_sd.setName(etp.sd.nom) else: - self.NommerSdprod(new_sd, etp.sd.nom) + self.nommerSDProd(new_sd, etp.sd.nom) new_etp.copyIntern(etp) self.etapes.append(new_etp) self.index_etapes[new_etp] = len(self.etapes) - 1 @@ -729,9 +730,9 @@ Le type demande (%s) et le type du concept (%s) devraient etre derives""" % (t, Reinitialise l'etape avec un nouveau jdc parent new_jdc """ if self.sd and self.reuse == None: - self.parent.NommerSdprod(self.sd, self.sd.nom) + self.parent.nommerSDProd(self.sd, self.sd.nom) for concept in self.sdprods: - self.parent.NommerSdprod(concept, concept.nom) + self.parent.nommerSDProd(concept, concept.nom) def reparent(self, parent): """ diff --git a/Noyau/N_MCCOMPO.py b/Noyau/N_MCCOMPO.py index c4d641fd..03d2a38c 100644 --- a/Noyau/N_MCCOMPO.py +++ b/Noyau/N_MCCOMPO.py @@ -482,6 +482,7 @@ class MCCOMPO(N_OBJECT.OBJECT): return l + def intersection_vide(dict1, dict2): """Verification qu'il n'y a pas de clé commune entre 'dict1' et 'dict2'.""" sk1 = set(dict1) diff --git a/Noyau/N_MCFACT.py b/Noyau/N_MCFACT.py index 52be4313..38234f62 100644 --- a/Noyau/N_MCFACT.py +++ b/Noyau/N_MCFACT.py @@ -56,7 +56,7 @@ class MCFACT(N_MCCOMPO.MCCOMPO): self.nom = nom self.val = val self.parent = parent - self.valeur = self.GETVAL(self.val) + self.valeur = self.getValeurEffective(self.val) if parent: self.jdc = self.parent.jdc self.niveau = self.parent.niveau @@ -68,7 +68,7 @@ class MCFACT(N_MCCOMPO.MCCOMPO): self.etape = None self.mcListe = self.buildMc() - def GETVAL(self, val): + def getValeurEffective(self, val): """ Retourne la valeur effective du mot-clé en fonction de la valeur donnée. Defaut si val == None diff --git a/Noyau/N_MCSIMP.py b/Noyau/N_MCSIMP.py index e4d510c0..c00b06ef 100644 --- a/Noyau/N_MCSIMP.py +++ b/Noyau/N_MCSIMP.py @@ -54,17 +54,12 @@ class MCSIMP(N_OBJECT.OBJECT): - valeur : valeur du mot-clé simple en tenant compte de la valeur par défaut """ - #print ("MCSIMP, ------------------------") - #print (self, val, definition, nom, parent) - #print ("MCSIMP, ------------------------") + print ("MCSIMP, ------------------------") + print (self, val, definition, nom, parent) self.definition = definition self.nom = nom self.val = val self.parent = parent - self.convProto = ConversionFactory('type', typ=self.definition.type) - self.valeur = self.GETVAL(self.val) - self.objPyxbDeConstruction = objPyxbDeConstruction - self.listeNomsObjsCrees = [] if parent: self.jdc = self.parent.jdc if self.jdc : self.cata = self.jdc.cata @@ -76,27 +71,50 @@ class MCSIMP(N_OBJECT.OBJECT): # Le mot cle simple a été créé sans parent # est-ce possible ? print ('je suis dans le else sans parent du build') + print (poum) self.jdc = None self.cata = None self.niveau = None self.etape = None - if self.definition.doitSenregistrerComme != None : - if self.definition.doitSenregistrerComme in list(self.jdc.utilise_un_sds_dict.keys()): - self.jdc.utilise_un_sds_dict[self.definition.doitSenregistrerComme].append(self) - else : - self.jdc.utilise_un_sds_dict[self.definition.doitSenregistrerComme] = [self,] + print (self,val) + if self.definition.creeDesObjets : + self.convProto = ConversionFactory('UserASSD', self.definition.creeDesObjetsDeType) + # isinstance(val, self.definition.creeDesObjetsDeType) ne fonctionne pas car il y a un avec cata devant et l autre non + else : + self.convProto = ConversionFactory('type', typ=self.definition.type) + self.valeur = self.getValeurEffective(self.val) + print (self,val) + self.objPyxbDeConstruction = objPyxbDeConstruction + self.listeNomsObjsCrees = [] - def GETVAL(self, val): + def getValeurEffective(self, val): """ Retourne la valeur effective du mot-clé en fonction de la valeur donnée. Defaut si val == None """ if (val is None and hasattr(self.definition, 'defaut')): val = self.definition.defaut + if val in self.jdc.sdsDict.keys(): + return self.jdc.sdsDict[val] + # dans le cas de lecture de .comm, il est possible que l objet est deja ete cree + # peut-etre devrait on aussi verifier que val est de type string ? + if self.definition.creeDesObjets : + if val != None and (not(val.__class__.__name__ == self.definition.creeDesObjetsDeType.__name__)) : val=self.convProto.convert(val) + return val if self.convProto: - val = self.convProto.convert(val) + val = self.convProto.convert(val) return val + def creeUserASSDetSetValeur(self, val): + self.state='changed' + nomVal=val + if nomVal in self.jdc.sdsDict.keys(): + if isinstance(self.jdc.sdsDict[nomVal],self.definition.creeDesObjetsDeType): return (1, 'concept deja reference') + else : return (0, 'concept d un autre type existe deja') + if self.convProto: + objVal = self.convProto.convert(nomVal) + return (self.setValeur(objVal), 'reference cree') + def getValeur(self): """ Retourne la "valeur" d'un mot-clé simple. diff --git a/Noyau/N_OBJECT.py b/Noyau/N_OBJECT.py index dce2d528..1d0f2a1a 100644 --- a/Noyau/N_OBJECT.py +++ b/Noyau/N_OBJECT.py @@ -1,4 +1,4 @@ -# coding=utf-8 +## coding=utf-8 # Copyright (C) 2007-2017 EDF R&D # # This library is free software; you can redistribute it and/or @@ -83,7 +83,7 @@ class OBJECT(object): else: return self - def GETVAL(self, val): + def getValeurEffective(self, val): """ Retourne la valeur effective du mot-clé en fonction de la valeur donnée. Defaut si val == None @@ -110,74 +110,6 @@ class OBJECT(object): def longueurDsArbre(self): return 1 - def creeObjetClasse(self, classeACreer): - # lors de la lecture du .comm, 1ere phase, les objets n existent pas - # mais il ne faut pas mettre la valeur des MC utilisant la classe a None - # sinon, le siValide ne peut rien faire - # c est pourquoi il faut gerer listeDesValeursSupprimees - # et une liste des valeurs qui peut contenir un melange objet/nom selon - # la creation des objets dans le .comm - - if not hasattr(self,'listeNomsObjsCrees') : self.listeNomsObjsCrees = [] - newlisteNomsObjsCrees = [] - listeSupprimees = [] - change=False - if not isinstance(self.valeur,(list, tuple)) : valTraitee = (self.valeur,) - else : valTraitee = self.valeur - - for v in valTraitee: - if not (v in self.listeNomsObjsCrees): - change=True - newObj=classeACreer(v) - if v in list(self.jdc.sds_dict.keys()): - if not isinstance (self.jdc.sds_dict[v], classeACreer): - if not type(self.valeur) in (list, tuple) :self.Valeur=None - else : self.valeur.remove(v) - self.valeur=None - self.state = 'undetermined' - self.isValid() - return - self.jdc.sds_dict[v] = newObj - newObj.sdnom = v - newlisteNomsObjsCrees.append(v) - - for oldv in self.listeNomsObjsCrees : - if oldv not in valTraitee : - change=True - listeSupprimees.append(self.jdc.sds_dict[oldv]) - self.jdc.sds_dict.pop(oldv) - self.listeNomsObjsCrees.remove(oldv) - - for v in newlisteNomsObjsCrees : - self.listeNomsObjsCrees.append(v) - - if not change : return - - if classeACreer in list(self.jdc.utilise_un_sds_dict.keys()): - for MC in self.jdc.utilise_un_sds_dict[classeACreer] : - if MC.valeur == None : return - if MC.definition.max == 1 : - if isinstance(MC.valeur, str) and MC.valeur in list(self.jdc.sds_dict.keys()): - MC.valeur=self.jdc.sds_dict[MC.valeur] - else : - newVal=[] - for val in MC.valeur : - if isinstance(val, str) and val in list(self.jdc.sds_dict.keys()): - newVal.append(self.jdc.sds_dict[val]) - else: - newVal.append(val) - MC.valeur=newVal - - if MC.definition.max == 1 : - if MC.valeur in listeSupprimees: - MC.valeur=None - else : - for val in MC.valeur : - if val in listeSupprimees: - MC.valeur=remove(val) - - MC.state = 'undetermined' - MC.isValid() class ErrorObj(OBJECT): diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py index c8710876..b7a324f9 100644 --- a/Noyau/N_SIMP.py +++ b/Noyau/N_SIMP.py @@ -80,16 +80,16 @@ class SIMP(N_ENTITE.ENTITE): #print (self) N_ENTITE.ENTITE.__init__(self, validators) # Initialisation des attributs + self.creeDesObjets = False if type(typ) == tuple: self.type = typ else: self.type = (typ,) for t in (self.type) : - if isinstance(t,str): continue - if isinstance(t,Accas.A_TUPLE.Tuple): continue - try : - if issubclass(t, Accas.UserASSD) : self.doitSenregistrerComme= t + try : + if issubclass(t,Accas.UserASSD) : creeDesObjetsDeType = t except : pass + if t == 'createObject' : self.creeDesObjets=True self.fr = fr self.statut = statut self.into = into @@ -111,7 +111,8 @@ class SIMP(N_ENTITE.ENTITE): if self.val_min == '**' : self.val_min = float('-inf') self.fenetreIhm=fenetreIhm self.attribut = attribut - self.creeDesObjetsDeType = creeDesObjetsDeType + if self.creeDesObjets : self.creeDesObjetsDeType = creeDesObjetsDeType + else : self.creeDesObjetsDeType = None self.nomXML = nomXML self.sortie=sortie diff --git a/Noyau/N_UserASSD.py b/Noyau/N_UserASSD.py new file mode 100644 index 00000000..6b94ea91 --- /dev/null +++ b/Noyau/N_UserASSD.py @@ -0,0 +1,68 @@ +# coding=utf-8 +# Copyright (C) 2007-2017 EDF R&D +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this library; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# +# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com + +""" + +""" + +from __future__ import absolute_import +from __future__ import print_function +try : + from builtins import object +except : pass +import traceback + +from .N_ASSD import ASSD + +class UserASSD(ASSD): + """ + Classe de base pour definir des types de structures de donnees definie par + l utilisateur + equivalent d un concept ASSD pour un SIMP ou un FACT + Attention : le parent est le JDC et non le MC createur que l on ne connait pas + """ + + def __init__(self,nom='sansNom'): + print ('dans l init de UserASSD', nom, type(nom)) + #import traceback + #traceback.print_stack() + self.nom = nom + self.jdc = CONTEXT.getCurrentJdC() + self.parent = self.jdc + self.id = self.parent.regUserSD(self) + self.utilisePar=set() + + + def initialiseNom(self,nom): + print ('je passe par la pour', nom) + self.nom = nom + + def ajoutUtilisePar(self,mc): + self.utilisePar.add(mc) + + def enleveUtilisePar(self,mc): + try : self.utilisePar.remove(mc) + except : pass + + def renomme(self,nouveauNom): + self.parent.delConcept(self.nom) + self.parent.sdsDict[nouveauNom] = self + self.setName(nouveauNom) + + diff --git a/Noyau/context.py b/Noyau/context.py index 4e0833e0..0101982f 100644 --- a/Noyau/context.py +++ b/Noyau/context.py @@ -21,6 +21,7 @@ from __future__ import absolute_import _root = None _cata = None +_jdc = None debug = 0 # Le "current step" est l'etape courante. @@ -78,3 +79,26 @@ def unsetCurrentCata(): """ global _cata _cata = None + + +def getCurrentJdC(): + """ + Fonction qui retourne l'objet JDC courant + """ + return _jdc + +def setCurrentJdC(jdc): + """ + Fonction qui permet de changer l'objet JDC courant + """ + global _jdc + if _jdc: + raise Exception("Impossible d'affecter _jdc. Il devrait valoir None") + _jdc = jdc + +def unsetCurrentJdC(): + """ + Fonction qui permet de remettre a None le JDC courant + """ + global _jdc + _jdc = None diff --git a/Noyau/nommage.py b/Noyau/nommage.py index 72b4ceed..e8a24ee2 100644 --- a/Noyau/nommage.py +++ b/Noyau/nommage.py @@ -42,6 +42,7 @@ except : pass import re import linecache +import sys from functools import partial # Modules EFICAS @@ -77,7 +78,10 @@ def _getNomConceptResultat(ope, level=2): 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()) + if sys.version_info >= (3,0) : + filename = co.co_filename + else : + filename = six.text_type(co.co_filename, getEncoding()) name = co.co_name # pattern pour identifier le debut de la commande pattern_oper = re.compile(regex1 % ope) diff --git a/UiQT5/desVisu.ui b/UiQT5/desVisu.ui index 6f25807a..9c013397 100644 --- a/UiQT5/desVisu.ui +++ b/UiQT5/desVisu.ui @@ -1,7 +1,7 @@ DVisu - + 0 diff --git a/UiQT5/desWidgetFact.ui b/UiQT5/desWidgetFact.ui index 9a0d006f..c7f86cb3 100644 --- a/UiQT5/desWidgetFact.ui +++ b/UiQT5/desWidgetFact.ui @@ -433,8 +433,7 @@ ... - - ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + @@ -493,8 +492,6 @@ - verticalSpacer_2 - line_7 diff --git a/UiQT5/desWidgetPlusieursBase.ui b/UiQT5/desWidgetPlusieursBase.ui index d9457a40..b4d801dc 100644 --- a/UiQT5/desWidgetPlusieursBase.ui +++ b/UiQT5/desWidgetPlusieursBase.ui @@ -6,8 +6,8 @@ 0 0 - 1122 - 163 + 1002 + 91 @@ -28,7 +28,7 @@ - + 0 @@ -39,10 +39,10 @@ 2 - 2 + 0 - 0 + 2 @@ -209,7 +209,7 @@ 0 0 300 - 111 + 60 @@ -261,13 +261,10 @@ - - 0 - - + 0 0 @@ -275,16 +272,14 @@ 400 - 50 + 20 - - - + - QFrame::Box + QFrame::NoFrame QFrame::Plain @@ -303,19 +298,19 @@ 0 0 - 705 - 122 + 589 + 44 - + 0 0 - 2 + 0 2 @@ -330,14 +325,17 @@ 0 - + Qt::Vertical + + QSizePolicy::Fixed + 20 - 40 + 1 @@ -347,40 +345,21 @@ - - - QFrame::Box + + + QLayout::SetFixedSize - - - 0 - - - 0 - - - 0 - - - 0 - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 13 - 20 - - - - - + + + + + 0 + 0 + + + + QFrame::Box + 0 @@ -388,8 +367,20 @@ QLayout::SetFixedSize + + 0 + + + 0 + + + 0 + + + 0 + - + 21 @@ -406,7 +397,7 @@ Qt::ClickFocus - Remonte la ligne + Descend la ligne border : 0px @@ -415,7 +406,7 @@ ... - + .. @@ -427,7 +418,7 @@ - + 21 @@ -444,7 +435,7 @@ Qt::ClickFocus - Descend la ligne + Remonte la ligne border : 0px @@ -453,7 +444,7 @@ ... - + .. @@ -491,8 +482,7 @@ ... - - ../Editeur/icons/MoinsBleu.png../Editeur/icons/MoinsBleu.png + @@ -529,8 +519,7 @@ ... - - ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + @@ -540,88 +529,8 @@ - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 40 - 20 - - - - - - - - - 21 - 31 - - - - - 21 - 31 - - - - Qt::ClickFocus - - - Montre l'ensemble des valeurs - - - border : 0px - - - ... - - - - ../Editeur/icons/verre-loupe-icone-6087-64.png../Editeur/icons/verre-loupe-icone-6087-64.png - - - - 32 - 32 - - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 40 - 20 - - - - - - - - 0 - - - QLayout::SetFixedSize - - + 21 @@ -638,7 +547,7 @@ Qt::ClickFocus - Sélectionne depuis Salome + Montre l'ensemble des valeurs border : 0px @@ -647,8 +556,7 @@ ... - - ../Editeur/icons/flecheSalome.png../Editeur/icons/flecheSalome.png + @@ -696,10 +604,61 @@ + + + + + 21 + 31 + + + + + 21 + 31 + + + + Qt::ClickFocus + + + Sélectionne depuis Salome + + + border : 0px + + + ... + + + + ../Editeur/icons/flecheSalome.png../Editeur/icons/flecheSalome.png + + + + 32 + 32 + + + + - - - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + @@ -841,13 +800,7 @@ - scrollArea - RBHaut - RBBas RBMoins - RBVoisListe - RBSalome - RBSalomeVue BSelectFichier RBPoubelle diff --git a/UiQT5/desWidgetPlusieursIntoOrdonne.ui b/UiQT5/desWidgetPlusieursIntoOrdonne.ui index a893b65e..832a9176 100644 --- a/UiQT5/desWidgetPlusieursIntoOrdonne.ui +++ b/UiQT5/desWidgetPlusieursIntoOrdonne.ui @@ -6,7 +6,7 @@ 0 0 - 1013 + 1386 538 @@ -353,7 +353,7 @@ 0 0 18 - 174 + 189 @@ -423,7 +423,7 @@ 0 0 - 300 + 425 519 @@ -520,7 +520,7 @@ 0 0 - 297 + 421 474 @@ -694,8 +694,8 @@ ... - - ../Editeur/icons/MoinsBleu.png../Editeur/icons/MoinsBleu.png + + .. @@ -729,8 +729,8 @@ ... - - ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + + .. @@ -779,8 +779,8 @@ ... - - ../Editeur/icons/verre-loupe-icone-6087-64.png../Editeur/icons/verre-loupe-icone-6087-64.png + + .. diff --git a/UiQT5/desWidgetPlusieursTuple.ui b/UiQT5/desWidgetPlusieursTuple.ui index bbb59be7..1b4ccfbf 100644 --- a/UiQT5/desWidgetPlusieursTuple.ui +++ b/UiQT5/desWidgetPlusieursTuple.ui @@ -222,7 +222,7 @@ 0 0 - 265 + 270 307 @@ -394,7 +394,7 @@ border : 0px - + ../Editeur/icons/MoinsBleu.png../Editeur/icons/MoinsBleu.png @@ -432,7 +432,7 @@ ... - + ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png @@ -488,8 +488,7 @@ ... - - ../Editeur/icons/verre-loupe-icone-6087-64.png../Editeur/icons/verre-loupe-icone-6087-64.png + diff --git a/UiQT5/desWidgetTableau.ui b/UiQT5/desWidgetTableau.ui index ecb56142..30e2f41c 100644 --- a/UiQT5/desWidgetTableau.ui +++ b/UiQT5/desWidgetTableau.ui @@ -153,8 +153,7 @@ ... - - ../Editeur/icons/PlusBleu.png../Editeur/icons/PlusBleu.png + @@ -188,8 +187,7 @@ border : 0px - - ../Editeur/icons/MoinsBleu.png../Editeur/icons/MoinsBleu.png + @@ -304,8 +302,7 @@ ... - - ../Editeur/icons/verre-loupe-icone-6087-64.png../Editeur/icons/verre-loupe-icone-6087-64.png + diff --git a/Validation/V_ETAPE.py b/Validation/V_ETAPE.py index 75479958..2b8b1ee9 100644 --- a/Validation/V_ETAPE.py +++ b/Validation/V_ETAPE.py @@ -115,7 +115,9 @@ class ETAPE(V_MCCOMPO.MCCOMPO): """ if CONTEXT.debug: - print(("ETAPE.isValid ", self.nom)) + print(("ETAPE.isValid ", self.nom, self.state)) + import traceback + traceback.print_stack() if self.state == 'unchanged': return self.valid else: diff --git a/Validation/V_MCSIMP.py b/Validation/V_MCSIMP.py index 00694c95..5eeed4ab 100644 --- a/Validation/V_MCSIMP.py +++ b/Validation/V_MCSIMP.py @@ -46,7 +46,6 @@ from Extensions.i18n import tr class MCSIMP(object): """ - COMMENTAIRE CCAR: Cette classe est quasiment identique a la classe originale d'EFICAS a part quelques changements cosmetiques et des chagements pour la faire fonctionner de facon plus autonome par rapport a l'environnement diff --git a/Validation/V_PROC_ETAPE.py b/Validation/V_PROC_ETAPE.py index edd5b138..facf03dd 100644 --- a/Validation/V_PROC_ETAPE.py +++ b/Validation/V_PROC_ETAPE.py @@ -57,8 +57,9 @@ class PROC_ETAPE(V_ETAPE.ETAPE): - propager l'eventuel changement d'etat au parent """ - if CONTEXT.debug: - print(("ETAPE.isValid ", self.nom)) + #print ("ETAPE.isValid ", self.nom, self.state) + #import traceback + #traceback.print_stack() if self.state == 'unchanged': return self.valid else: -- 2.39.2