From: pascale.noyret Date: Wed, 28 Apr 2021 09:49:58 +0000 (+0200) Subject: 1ere version avec les ASSD ds une matrice X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=79372a9d061e514183723384239f8d256af4bc11;p=tools%2Feficas.git 1ere version avec les ASSD ds une matrice --- diff --git a/Accas/A_TUPLE.py b/Accas/A_TUPLE.py index cdc2e7da..c9564e28 100644 --- a/Accas/A_TUPLE.py +++ b/Accas/A_TUPLE.py @@ -1,15 +1,6 @@ -import types -class Tuple: - def __init__(self,ntuple): - self.ntuple=ntuple +# +from __future__ import absolute_import +from Noyau import N_TUPLE - def __convert__(self,valeur): - try: - if isinstance(valeur, basestring) : return None - except NameError: - if isinstance(valeur, str): return None - if len(valeur) != self.ntuple: return None - return valeur - - def info(self): - return "Tuple de %s elements" % self.ntuple +class Tuple (N_TUPLE.N_Tuple): pass +class Matrice(N_TUPLE.N_Matrice): pass diff --git a/Accas/__init__.py b/Accas/__init__.py index 64f3079e..8b3a5f96 100644 --- a/Accas/__init__.py +++ b/Accas/__init__.py @@ -45,6 +45,7 @@ from .A_SIMP import SIMP from .A_EVAL import EVAL from .A_NUPLET import NUPL from .A_TUPLE import Tuple +from .A_TUPLE import Matrice from .A_JDC import JDC diff --git a/Efi2Xsd/AccasXsd.py b/Efi2Xsd/AccasXsd.py index 1af0889b..f1cc9e7e 100755 --- a/Efi2Xsd/AccasXsd.py +++ b/Efi2Xsd/AccasXsd.py @@ -1026,6 +1026,8 @@ class X_SIMP (X_definition): if hasattr(self.type[0], 'typElt') : #print ('je suis une Matrice de ' ,dictNomsDesTypes[self.type[0].typElt]) self.suisUneMatrice = True + # on presume que le type de l elt est un ASSD + if self.type[0].typElt not in dictNomsDesTypes.keys(): return 'xs:string' return dictNomsDesTypes[self.type[0].typElt] else : self.suisUneMatrice = False diff --git a/Ihm/I_MCSIMP.py b/Ihm/I_MCSIMP.py index 1883e1bb..aa0c45ea 100644 --- a/Ihm/I_MCSIMP.py +++ b/Ihm/I_MCSIMP.py @@ -58,7 +58,8 @@ class MCSIMP(I_OBJECT.OBJECT): if self.state == 'unchanged': return self.valid for type_permis in self.definition.type: - if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice': + #if hasattr(type_permis, "__class__") and type_permis.__class__.__name__ == 'Matrice': + if hasattr(type_permis, "typElt") : self.monType=type_permis return self.valideMatrice(cr=cr) validite=Validation.V_MCSIMP.MCSIMP.isValid(self,cr=cr) @@ -736,33 +737,37 @@ class MCSIMP(I_OBJECT.OBJECT): def valideMatrice(self,cr): ok=1 + commentaire ='' if self.valeur == None : self.setValid(0) return 0 + if self.monType.methodeCalculTaille != None : MCSIMP.__dict__[self.monType.methodeCalculTaille](*(self,)) + if len(self.valeur) == self.monType.nbLigs : for i in range(len(self.valeur)): if len(self.valeur[i]) != self.monType.nbCols: ok=0 + else : ok=0 + if not ok : self.setValid(0) if cr == 'oui' : self.cr.fatal(tr("La matrice n'est pas une matrice %(n_lign)d sur %(n_col)d", \ {'n_lign': self.monType.nbLigs, 'n_col': self.monType.nbCols})) return 0 + for i in range(self.monType.nbLigs): for j in range(self.monType.nbCols): val=self.valeur[i][j] - if self.monType.typElt == 'R' : - try : val=float(str(val)) - except : ok=0 - if self.monType.typElt == 'TXM' : - if self.monType.typEltInto != None and val not in self.monType.typEltInto : ok=0 - if not ok : - self.setValid(0) - if cr == 'oui' : - self.cr.fatal(tr("Les elements de la matrice ne sont pas d un bon type")) - return 0 + ok, commentaire = self.monType.verifItem(str(val),self.parent) + if self.monType.typElt not in ('TXM','I','R') and type(val) != self.monType.typElt : + ok=0; commentaire = 'mauvais type'; self.valeur=None + if not ok : + self.setValid(0) + if cr == 'oui' : + self.cr.fatal(tr(commentaire)) + return 0 self.setValid(1) return 1 diff --git a/InterfaceQT4/monWidgetFact.py b/InterfaceQT4/monWidgetFact.py index 74b43bdd..8bf1c5dc 100644 --- a/InterfaceQT4/monWidgetFact.py +++ b/InterfaceQT4/monWidgetFact.py @@ -35,7 +35,7 @@ class MonWidgetFactCommun(Groupe): """ """ def __init__(self,node,editor,parentQt,definition, obj, niveau,commande): - print ("fact : ",node.item.nom) + #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)) diff --git a/InterfaceQT4/monWidgetMatrice.py b/InterfaceQT4/monWidgetMatrice.py index f284026f..0edff3a8 100644 --- a/InterfaceQT4/monWidgetMatrice.py +++ b/InterfaceQT4/monWidgetMatrice.py @@ -30,6 +30,7 @@ import types,os,sys # Modules Eficas from Extensions.i18n import tr from .feuille import Feuille +from Extensions.eficas_exception import EficasException from desWidgetMatrice import Ui_desWidgetMatrice @@ -62,7 +63,7 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille): def monFocusOutEvent(self,event): self.acceptVal() - QTableWidget.focusInEvent(self.TBMatrice,event) + QTableWidget.focusOutEvent(self.TBMatrice,event) def itemChanged(self): @@ -70,30 +71,11 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille): if monItem==None : return texte=monItem.text() if texte=="" : return - if self.monType.typElt == 'R' : - try : val=float(str(texte)); ok=True - except : ok=False - if ok == False : - self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red) - monItem.setText("") - return - if self.monType.valSup != None : - if val > self.monType.valSup : - self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red) - monItem.setText("") - return - if self.monType.valMin != None : - if val < self.monType.valMin : - self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red) - monItem.setText("") - return - self.editor.afficheInfos("") - if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,)) - if self.monType.typElt == 'TXM' : - if self.monType.typEltInto != None and texte not in self.monType.typEltInto : - self.editor.afficheInfos(tr("Entrer une valeur qui est ") + str(self.monType.typEltInto),Qt.red) - monItem.setText("") - return + boolOk, commentaire = self.monType.verifItem(texte,self.node.item.object) + if not boolOk : + self.editor.afficheInfos(tr(commentaire),Qt.red) + monItem.setText("") + return def creeColonnes(self): @@ -138,10 +120,8 @@ class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille): monItem=self.TBMatrice.item(i,j) if monItem : texte=monItem.text() else : texte = '' - if self.monType.typElt == 'R' : - try : val=float(str(texte)) - except : val=None - val=texte + if texte != '' : val=self.monType.convertItem(texte) + else : val = None listeCol.append(val) liste.append(listeCol) self.node.item.setValeur(liste) diff --git a/Noyau/N_TUPLE.py b/Noyau/N_TUPLE.py new file mode 100644 index 00000000..f993939c --- /dev/null +++ b/Noyau/N_TUPLE.py @@ -0,0 +1,82 @@ +import types +import Accas +import inspect +class N_Tuple: + def __init__(self,ntuple): + self.ntuple=ntuple + + def __convert__(self,valeur): + try: + if isinstance(valeur, basestring) : return None + except NameError: + if isinstance(valeur, str): return None + if len(valeur) != self.ntuple: return None + return valeur + + def info(self): + return "Tuple de %s elements" % self.ntuple + +class N_Matrice: + def __init__(self, nbLigs=None, nbCols=None, + methodeCalculTaille=None, formatSortie="ligne", + valSup=None, valMin=None, structure=None, typElt='R', + typEltInto=None, listeHeaders=None): + self.nbLigs = nbLigs + self.nbCols = nbCols + self.methodeCalculTaille = methodeCalculTaille + self.formatSortie = formatSortie + self.valSup = valSup + self.valMin = valMin + self.structure = structure + self.typElt = typElt + self.listeHeaders = listeHeaders + self.typEltInto = typEltInto + self.jdc=None + + def __convert__(self, valeur): + # Attention ne verifie pas grand chose + if not isinstance(valeur, types.ListType): + return None + return valeur + + def verifItem(self,texte,mc): + val='' + if self.typElt == 'R' : + try : val=float(str(texte)); ok=True + except : return (False,"Entrer un float SVP") + if self.typElt == 'I' : + try : val=int(str(texte)); ok=True + except : return (False,"Entrer un float SVP") + if self.typElt in ('R', 'I') and self.valSup != None : + if val > self.valSup : + return (False, "Entrer un nombre inferieur a " + repr(self.valSup)) + if self.typElt in ('R', 'I') and self.valMin != None : + if val < self.valMin : + return (False, "Entrer un nombre superieur a " + repr(self.valMin)) + if val=='' : val = texte + if self.typEltInto != None and val not in self.typEltInto : + return ( "Entrer une valeur contenue dans " + str(self.typEltInto)) + try : + if issubclass (self.typElt, Accas.ASSD): + if not self.jdc : self.jdc = CONTEXT.getCurrentJdC() + if not(val in self.jdc.sdsDict.keys()) : return (False, 'Concept inexistant') + if not (isinstance(self.jdc.sdsDict[val],self.typElt)) : return (False, 'Concept d un autre type') + a=self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,)) + if texte not in self.jdc.getSdAvantDuBonType(mc.etape,(self.typElt,)) : + return (False, 'Le concept doit etre defini avant') + except : + pass + return ( True, "") + + def convertItem(self,texte): + if self.typElt == 'R' : val=float(str(texte)) + if self.typElt == 'I' : val=int(str(texte)) + if issubclass (self.typElt, Accas.ASSD): return self.jdc.sdsDict[texte] + + + def info(self): + return "Matrice %s x %s" % (self.nbLigs, self.nbCols) + + __repr__ = info + __str__ = info + diff --git a/generator/generator_python.py b/generator/generator_python.py index d4432d08..d8623e91 100644 --- a/generator/generator_python.py +++ b/generator/generator_python.py @@ -569,26 +569,35 @@ class PythonGenerator(object): syntaxe python """ waitTuple=0 + waitMatriceDASSD=0 if type(obj.valeur) in (tuple,list) : s = '' for ss_type in obj.definition.type: if repr(ss_type).find('Tuple') != -1 : waitTuple=1 break + if hasattr(ss_type,'typElt'): + if ss_type.typElt not in ('TXM','I','R') : waitMatriceDASSD=1 if waitTuple : #s = str(obj.valeur) +',' #obj.valeurFormatee=obj.valeur s = obj.getText() +',' obj.valeurFormatee=obj.getText() + elif waitMatriceDASSD : + s=s+'(' + for lines in obj.valeur : + s=s+'(' + for elt in lines : + s=s+elt.nom+',' + s=s+'),' + s=s+'),' else : obj.valeurFormatee=[] for val in obj.valeur : s =s +self.formatItem(val,obj.etape,obj,1) + ',' - if obj.waitTxm() : - obj.valeurFormatee.append(val) - else : - obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj)) + if obj.waitTxm() : obj.valeurFormatee.append(val) + else : obj.valeurFormatee.append(self.formatItem(val,obj.etape,obj)) if len(obj.valeur) >= 1: s = '(' + s + '),' if obj.valeur==[] or obj.valeur==() : s="(),"