From: pascale.noyret Date: Mon, 3 Apr 2017 12:31:28 +0000 (+0200) Subject: modif Yoann X-Git-Tag: V8_3_0~62 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=d850460808b68f3e00e3555a66502236e5eb32e5;p=tools%2Feficas.git modif Yoann --- diff --git a/Accas/__init__NonAster.py b/Accas/__init__NonAster.py deleted file mode 100644 index 15ba86de..00000000 --- a/Accas/__init__NonAster.py +++ /dev/null @@ -1,104 +0,0 @@ -# -*- coding: iso-8859-1 -*- -# Copyright (C) 2007-2015 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 -# -""" - Ce package contient les classes qui seront effectivement utilisees dans les applications. - C'est dans ce package que sont realisees les combinaisons de classes de base - avec les classes MIXIN qui implementent les fonctionnalites qui ont ete separees - du noyau pour des raisons de modularite afin de faciliter la maintenance et - l'extensibilite. - - De plus toutes les classes utilisables par les applications sont remontees au - niveau du package afin de rendre le plus independant possible l'utilisation des - classes et leur implementation. -""" - -# permet de se proteger de l'oubli de carte coding -# ce warning deviendra fatal en python 2.4 -import warnings -warnings.filterwarnings('error','Non-ASCII character.*pep-0263',DeprecationWarning) - -from A_JDC_CATA import JDC_CATA -from A_OPER import OPER -from A_PROC import PROC -from A_MACRO import MACRO -from A_FORM import FORM -from A_BLOC import BLOC -from A_FACT import FACT -from A_SIMP import SIMP -from A_EVAL import EVAL -from A_NUPLET import NUPL - -from A_JDC import JDC -from A_ETAPE import ETAPE -from A_PROC_ETAPE import PROC_ETAPE -from A_MACRO_ETAPE import MACRO_ETAPE -from A_FORM_ETAPE import FORM_ETAPE -from A_MCFACT import MCFACT -from A_MCLIST import MCList -from A_MCBLOC import MCBLOC -from A_MCSIMP import MCSIMP - -# Les règles -from A_AU_MOINS_UN import AU_MOINS_UN -from A_MEME_NOMBRE import MEME_NOMBRE -from A_AU_PLUS_UN import AU_PLUS_UN -from A_UN_PARMI import UN_PARMI -from A_PRESENT_PRESENT import PRESENT_PRESENT -from A_PRESENT_ABSENT import PRESENT_ABSENT -from A_EXCLUS import EXCLUS -from A_ENSEMBLE import ENSEMBLE -from A_A_CLASSER import A_CLASSER -from A_AVANT import AVANT - -from A_ASSD import ASSD,assd -from A_ASSD import GEOM,geom -# Pour le moment on laisse fonction (ceinture et bretelles) -from A_ASSD import FONCTION, fonction -from A_ASSD import formule -from A_ASSD import formule_c -from A_ASSD import CO - -from Noyau.N__F import _F - -from Noyau.N_Exception import AsException -from Noyau.N_utils import AsType - -from A_VALIDATOR import OrVal,AndVal,OnlyStr -from A_VALIDATOR import OrdList,NoRepeat,LongStr,Compulsory -from A_VALIDATOR import RangeVal, EnumVal, TypeVal, PairVal -from A_VALIDATOR import CardVal, InstanceVal -from A_VALIDATOR import VerifTypeTuple - -# On remplace la factory des validateurs initialement dans Noyau par celle -# de A_VALIDATOR -import A_VALIDATOR -import Noyau.N_ENTITE -Noyau.N_ENTITE.ENTITE.factories['validator']=A_VALIDATOR.validatorFactory - -from A_SENSIBILITE import CONCEPT_SENSIBLE, REUSE_SENSIBLE, DERIVABLE - -from Extensions.niveau import NIVEAU -from Extensions.etape_niveau import ETAPE_NIVEAU -from Extensions.commentaire import COMMENTAIRE -from Extensions.parametre import PARAMETRE -from Extensions.parametre_eval import PARAMETRE_EVAL -from Extensions.commande_comm import COMMANDE_COMM -from Extensions.mcnuplet import MCNUPLET - diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index dd02069d..6fd1fac9 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -64,6 +64,8 @@ class MCSIMP(I_OBJECT.OBJECT): if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice': self.monType=type_permis return self.valideMatrice(cr=cr) + if self.definition.siValide != None : + self.definition.siValide(self) return Validation.V_MCSIMP.MCSIMP.isvalid(self,cr=cr) def GetNomConcept(self): diff --git a/InterfaceQT4/browser.py b/InterfaceQT4/browser.py index 35d45b08..418d0bc8 100644 --- a/InterfaceQT4/browser.py +++ b/InterfaceQT4/browser.py @@ -324,6 +324,7 @@ class JDCNode(QTreeWidgetItem,GereRegles): # posera des pb si un code decide d appeler FIN un mot clef # on resoudera a ce moment la # pour l instant pas de poussiere sous le tapis + #print( 'debut affichePanneau pour', self.item.nom) if not(self.item.isactif()) : from .monWidgetInactif import MonWidgetInactif self.fenetre = MonWidgetInactif(self,self.editor) @@ -357,8 +358,7 @@ class JDCNode(QTreeWidgetItem,GereRegles): self.tree.inhibeExpand=True self.tree.expandItem(self) self.tree.inhibeExpand=False - #print "fin de affichePanneau", self.item.nom - #print "______________________________" + #print( 'fin affichePanneau pour', self.item.nom) def createPopUpMenu(self): diff --git a/InterfaceQT4/composimp.py b/InterfaceQT4/composimp.py index 84f44332..3f3e5a6e 100644 --- a/InterfaceQT4/composimp.py +++ b/InterfaceQT4/composimp.py @@ -68,14 +68,27 @@ class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal): #print "____________________________", monNom, self.item.wait_co() #print "____________________________", monNom, self.item.wait_assd() # Gestion d'une seule valeur (eventuellement un tuple ou un complexe) + if maDefinition.into != [] and maDefinition.into != None: + if type(maDefinition.into) ==types.FunctionType : monInto=maDefinition.into() + else : monInto = maDefinition.into + + # a faire ailleurs + #if maDefinition.intoExe != None : + # print (self.item) + # monInto = maDefinition.intoExe(self.item) + # maDefinition.into = monInto + # from Noyau.N_VALIDATOR import IntoProtocol + # monObjet.intoProto = IntoProtocol("into", into=maDefinition.into, val_min=maDefinition.val_min, val_max=maDefinition.val_max) + + if maDefinition.max == 1 : # A verifier if maDefinition.into != [] and maDefinition.into != None: - if len(maDefinition.into) < 4 : + if len(monInto) < 4 : from .monWidgetRadioButton import MonWidgetRadioButton widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande) - elif len(maDefinition.into) < 7 : + elif len(monInto) < 7 : from .monWidget4a6RadioButton import MonWidget4a6RadioButton widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande) else : diff --git a/InterfaceQT4/configuration.py b/InterfaceQT4/configuration.py index 85e9dd56..8b7bb7d5 100644 --- a/InterfaceQT4/configuration.py +++ b/InterfaceQT4/configuration.py @@ -109,6 +109,7 @@ class CONFIG_BASE(object): self.translatorFichier=None self.dicoImages= {} self.simpleClic= False + self.afficheOptionnelVide=False #-------------------------------------- diff --git a/InterfaceQT4/editor.py b/InterfaceQT4/editor.py index ede146cb..34f26de9 100755 --- a/InterfaceQT4/editor.py +++ b/InterfaceQT4/editor.py @@ -105,6 +105,7 @@ class JDCEditor(Ui_baseWidget,QWidget): self.closeFrameRechercheCommande=self.appliEficas.CONFIGURATION.closeFrameRechercheCommande self.closeArbre=self.appliEficas.CONFIGURATION.closeArbre self.affiche=self.appliEficas.CONFIGURATION.affiche + self.afficheOptionnelVide=self.appliEficas.CONFIGURATION.afficheOptionnelVide self.nombreDeBoutonParLigne = self.appliEficas.CONFIGURATION.nombreDeBoutonParLigne self.dicoImages = self.appliEficas.CONFIGURATION.dicoImages self.simpleClic = self.appliEficas.CONFIGURATION.simpleClic @@ -1395,22 +1396,61 @@ class JDCEditor(Ui_baseWidget,QWidget): if ouChercher ==None : print ('SOUCI'); return monMC=ouChercher.get_child(MCFils,restreint="oui") if monMC== None : monMC= ouChercher.addentite(MCFils) + monMC.definition.into=valeurs + from Noyau.N_VALIDATOR import IntoProtocol + monMC.definition.intoProto = IntoProtocol("into", into=monMC.definition.into, val_min=monMC.definition.val_min, val_max=monMC.definition.val_max) monMC.state='changed' monMC.isvalid() + #----------------------------------------------------# + def reCalculeValiditeMCApresChgtInto(self,nomEtape,MCFils,listeAvant=()): + #----------------------------------------------------# + for e in self.jdc.etapes: + if e.nom == nomEtape : ouChercher=e; break + + for mot in listeAvant : + try : + ouChercher=ouChercher.get_child(mot,restreint="oui") + # Le mot clef n est pas la + except : return 0 + try : + monMC=ouChercher.get_child(MCFils,restreint="oui") + # Le mot clef n est pas la + except : return 0 + + #print ('________',monMC) + if hasattr(monMC.definition,'into') : + if type(monMC.definition.into) ==types.FunctionType : maListeDeValeur=monMC.definition.into() + else : maListeDeValeur=monMC.definition.into + else : + return 0 + + monMC.state='changed' + return 1 + + #-------------------------------------# def changeIntoDefMC(self,etape,listeMC,valeurs): #-------------------------------------# definitionEtape=getattr(self.jdc.cata[0],etape) ouChercher=definitionEtape if len(listeMC) > 1 : + for mc in listeMC[0:-1]: mcfact=ouChercher.entites[mc] ouChercher=mcfact mcAccas=ouChercher.entites[listeMC[-1]] + + if hasattr(mcAccas,'into') : oldValeurs=mcAccas.into + else : oldValeurs=None + if oldValeurs==valeurs : return 0 + mcAccas.into=valeurs + from Noyau.N_VALIDATOR import IntoProtocol + mcAccas.intoProto = IntoProtocol("into", into=valeurs, val_min=mcAccas.val_min, val_max=mcAccas.val_max) + return 1 #-------------------------------------------------------------# def deleteDefinitionMC(self,etape,listeAvant,nomDuMC): diff --git a/InterfaceQT4/gereListe.py b/InterfaceQT4/gereListe.py index 418fa27d..6b568d25 100644 --- a/InterfaceQT4/gereListe.py +++ b/InterfaceQT4/gereListe.py @@ -197,6 +197,7 @@ class GereListe(object): def moinsPushed(self): # on supprime le dernier + if self.NumLineEditEnCours == 0 : return if self.NumLineEditEnCours==self.indexDernierLabel : nomLineEdit=self.nomLine+str(self.indexDernierLabel) courant=getattr(self,nomLineEdit) diff --git a/InterfaceQT4/monGroupeOptionnel.py b/InterfaceQT4/monGroupeOptionnel.py index 9cc037e4..2d5972b2 100644 --- a/InterfaceQT4/monGroupeOptionnel.py +++ b/InterfaceQT4/monGroupeOptionnel.py @@ -78,7 +78,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel): """ """ def __init__(self,liste,parentQt,parentMC): - #print "dans init de monWidgetOptionnel ", parentQt, parentQt.node.item.nom + #print "dans init de monWidgetOptionnel ", parentQt, liste,parentMC QWidget.__init__(self,None) self.setupUi(self) self.listeChecked=[] @@ -88,14 +88,20 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel): self.cb=None self.parentQt=parentQt self.parentMC=parentMC - self.afficheTitre() - if liste != [] : self.affiche(liste) - else : self.MCOptionnelLayout.insertWidget(0,QLabel(tr('Pas de MC Optionnel'))) + if liste != [] : + self.affiche(liste) + self.afficheTitre() + elif self.parentQt.parentQt.afficheOptionnelVide != False : + self.afficheTitre() + self.MCOptionnelLayout.insertWidget(0,QLabel(tr('Pas de MC Optionnel'))) + else : + self.frameLabelMC.close() + #print "dans fin de monWidgetOptionnel ", parentQt def afficheTitre(self): labeltext,fonte,couleur = self.parentMC.node.item.GetLabelText() - print (labeltext) + #print (labeltext) l=tr(labeltext) li=[] while len(l) > 25: @@ -117,7 +123,7 @@ class MonGroupeOptionnel (QWidget,Ui_groupeOptionnel): self.MCOptionnelLayout.insertWidget(0,cb) self.dicoCb[cb]=mot self.scrollAreaCommandesOptionnelles.horizontalScrollBar().setSliderPosition(0) - #print "Fin Optionnel ____ affiche", liste + print "Fin Optionnel ____ affiche", liste diff --git a/InterfaceQT4/monWidget4a6RadioButton.py b/InterfaceQT4/monWidget4a6RadioButton.py index 0e3b97f9..3919b75d 100644 --- a/InterfaceQT4/monWidget4a6RadioButton.py +++ b/InterfaceQT4/monWidget4a6RadioButton.py @@ -32,7 +32,8 @@ class MonWidget4a6RadioButton (Ui_Widget4a6RadioButton,MonWidgetRadioButtonCommu def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): #print "dans le init de MonWidget4a6RadioButton",self - self.maListeDeValeur=monSimpDef.into + if type(monSimpDef.into) ==types.FunctionType : self.maListeDeValeur=monSimpDef.into() + else : self.maListeDeValeur=monSimpDef.into MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) def setMaxI(self): diff --git a/InterfaceQT4/monWidgetCommande.py b/InterfaceQT4/monWidgetCommande.py index 1805b84c..becfee22 100644 --- a/InterfaceQT4/monWidgetCommande.py +++ b/InterfaceQT4/monWidgetCommande.py @@ -222,10 +222,10 @@ class MonWidgetCommande(Ui_WidgetCommande,Groupe): self.monGroupe=self.monOptionnel.afficheOptionnel(liste,self) - #def focusInEvent(self,event): + def focusInEvent(self,event): #print "je mets a jour dans focusInEvent de monWidget Commande " - # if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel - # self.afficheOptionnel() + if self.editor.code == "CARMELCND" : return #Pas de MC Optionnels pour Carmel + self.afficheOptionnel() def reaffiche(self,nodeAVoir=None): diff --git a/InterfaceQT4/monWidgetOptionnel.py b/InterfaceQT4/monWidgetOptionnel.py index cc0fbd29..46f5cb38 100644 --- a/InterfaceQT4/monWidgetOptionnel.py +++ b/InterfaceQT4/monWidgetOptionnel.py @@ -31,33 +31,36 @@ from .monGroupeOptionnel import MonGroupeOptionnel # Import des panels class MonWidgetOptionnel (QWidget,Ui_WidgetOptionnel): def __init__(self,parentQt): - #print "dans init de monWidgetOptionnel ", parentQt, parentQt.node.item.nom + #print ("dans init de monWidgetOptionnel ", parentQt ) QWidget.__init__(self,None) self.setupUi(self) self.dicoMCWidgetOptionnel={} self.parentQt=parentQt def afficheOptionnel(self,liste,MC): - #print "dans Optionnel ____ affiche", liste + print ('afficheOptionnel MonWidgetOptionnel', self,liste,MC) + #import traceback + #traceback.print_stack() self.vireLesAutres(MC) if MC.node.item.nom in self.dicoMCWidgetOptionnel : - self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None) self.dicoMCWidgetOptionnel[MC.node.item.nom].close() + self.dicoMCWidgetOptionnel[MC.node.item.nom].setParent(None) + self.dicoMCWidgetOptionnel[MC.node.item.nom].deleteLater() groupe = MonGroupeOptionnel(liste,self,MC) self.groupesOptionnelsLayout.insertWidget(0,groupe) self.dicoMCWidgetOptionnel[MC.node.item.nom]=groupe return groupe def vireLesAutres(self,MC): - #print "je passe dans vireLesAutres" + #print( "je passe dans vireLesAutres") genea =MC.obj.get_genealogie() - #print genea + #print (genea) for k in list(self.dicoMCWidgetOptionnel.keys()): + #if k not in genea : print ( k) if k not in genea : self.dicoMCWidgetOptionnel[k].close() del self.dicoMCWidgetOptionnel[k] - #if k not in genea : print k - #print "________" + #print( "fin vireLesAutres") def afficheOptionnelVide(self): self.GeneaLabel.setText("") diff --git a/InterfaceQT4/monWidgetPlusieursBase.py b/InterfaceQT4/monWidgetPlusieursBase.py index d66aa6dc..5e4390c7 100644 --- a/InterfaceQT4/monWidgetPlusieursBase.py +++ b/InterfaceQT4/monWidgetPlusieursBase.py @@ -75,16 +75,14 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie) self.BSelectFichier.setIconSize(QSize(32, 32)) self.listeValeursCourantes=self.node.item.GetListeValeurs() - #if self.monSimpDef.max != "**" and self.monSimpDef.max < 7: - # hauteur=dicoLongueur[self.monSimpDef.max] - # hauteur=dicoLongueur[2] - # print ('hauteur', hauteur) - # self.resize(self.width(),hauteur) - # self.setMinimumHeight(hauteur) + self.monSimpDef.max = 3 + if self.monSimpDef.max != "**" and self.monSimpDef.max < 7: + hauteurMax=dicoLongueur[self.monSimpDef.max] + else : + hauteurMax=220 # if self.monSimpDef.max == self.monSimpDef.min : self.setMaximumHeight(hauteur) - #else : - # self.resize(self.width(),hauteurMax) - # self.setMinimumHeight(hauteurMax) + self.resize(self.width(),hauteurMax) + self.setMinimumHeight(hauteurMax) self.finCommentaireListe() self.parentQt.commandesLayout.insertWidget(-1,self) self.maCommande.listeAffichageWidget.append(self.lineEditVal1) @@ -96,9 +94,12 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie) self.vScrollBar = self.scrollArea.verticalScrollBar() self.politique=PolitiquePlusieurs(self.node,self.editor) # construction du min de valeur a entrer + self.monSimpDef.max = 3 if self.monSimpDef.max == "**" : aConstruire=7 elif self.monSimpDef.max == float('inf'): aConstruire=7 else : aConstruire=self.monSimpDef.max + print ('1,aConstruire', aConstruire) + for i in range(1,aConstruire): self.ajoutLineEdit() QApplication.processEvents() @@ -237,6 +238,7 @@ class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe,GerePlie) else : self.editor.affiche_infos("") elif donneFocus==None : donneFocus=courant + nomDernierLineEdit="lineEditVal"+str(self.indexDernierLabel) dernier=getattr(self,nomDernierLineEdit) derniereValeur=dernier.text() diff --git a/InterfaceQT4/monWidgetRadioButton.py b/InterfaceQT4/monWidgetRadioButton.py index 1e40fb75..1ba3e9cf 100644 --- a/InterfaceQT4/monWidgetRadioButton.py +++ b/InterfaceQT4/monWidgetRadioButton.py @@ -133,7 +133,9 @@ class MonWidgetRadioButtonCommun (Feuille): class MonWidgetRadioButton (Ui_WidgetRadioButton,MonWidgetRadioButtonCommun): def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): #print "MonWidgetRadioButton ", self - self.maListeDeValeur=monSimpDef.into + if type(monSimpDef.into) ==types.FunctionType : self.maListeDeValeur=monSimpDef.into() + else : self.maListeDeValeur=monSimpDef.into + MonWidgetRadioButtonCommun.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) def setMaxI(self): diff --git a/InterfaceQT4/monWidgetSimpBase.py b/InterfaceQT4/monWidgetSimpBase.py index 32fde23a..37b51296 100644 --- a/InterfaceQT4/monWidgetSimpBase.py +++ b/InterfaceQT4/monWidgetSimpBase.py @@ -91,6 +91,7 @@ class MonWidgetSimpBase (Ui_WidgetSimpBase,Feuille): 'Fichier' : tr(u'Un fichier est attendu. '), 'FichierNoAbs' : tr(u'Un fichier est attendu. '), 'Repertoire' : tr(u'Un repertoire est attendu. '), + 'FichierOuRepertoire' : tr(u'Un repertoire ou un fichier est attendu. '), 'Heure' : tr(u'Heure sous la forme HH:MM'), 'Date' : tr(u'Date sous la forme JJ/MM/AA')} if mc.type[0] != type: diff --git a/Noyau/N_ENTITE.py b/Noyau/N_ENTITE.py index 27e13d50..d9387e29 100644 --- a/Noyau/N_ENTITE.py +++ b/Noyau/N_ENTITE.py @@ -252,7 +252,7 @@ class ENTITE(object): def check_into(self): """Vérifie l'attribut into.""" if self.into != None: - if type(self.into) not in (list, tuple): + if (type(self.into) not in (list, tuple)) and (type(self.into) != types.FunctionType) : self.cr.fatal( _(u"L'attribut 'into' doit être un tuple : %r"), self.into) diff --git a/Noyau/N_MCLIST.py b/Noyau/N_MCLIST.py index 21912655..cb758ef9 100644 --- a/Noyau/N_MCLIST.py +++ b/Noyau/N_MCLIST.py @@ -90,7 +90,7 @@ class MCList(UserList): for child in self.data: child.supprime() - def get_child(self, name): + def get_child(self, name,restreint='non'): """ Retourne le fils de nom name s'il est contenu dans self Par défaut retourne le fils du premier de la liste diff --git a/Noyau/N_SIMP.py b/Noyau/N_SIMP.py index cc1d47ca..6bf64eb9 100644 --- a/Noyau/N_SIMP.py +++ b/Noyau/N_SIMP.py @@ -46,7 +46,7 @@ class SIMP(N_ENTITE.ENTITE): class_instance = N_MCSIMP.MCSIMP label = 'SIMP' - def __init__(self, typ,ang="", fr="", statut='f', into=None, defaut=None, + def __init__(self, typ,ang="", fr="", statut='f', into=None, siValide = None, defaut=None, min=1, max=1, homo=1, position='local', val_min=float('-inf'), val_max=float('inf'), docu="", validators=None, sug=None): @@ -76,6 +76,7 @@ class SIMP(N_ENTITE.ENTITE): self.fr = fr self.statut = statut self.into = into + self.siValide = siValide self.defaut = defaut self.min = min self.max = max