X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=InterfaceQT4%2FmonWidgetMatrice.py;h=02fb9311bda7fc5277ad3b57457a31af294b9208;hb=8b202e4a0e933f400731a984944bf84aa9a06f48;hp=248c6e1415c86ba277c68fc2c6385ef4236aef41;hpb=077439ef6c2658c74d473ce67113108334b450ed;p=tools%2Feficas.git diff --git a/InterfaceQT4/monWidgetMatrice.py b/InterfaceQT4/monWidgetMatrice.py index 248c6e14..02fb9311 100644 --- a/InterfaceQT4/monWidgetMatrice.py +++ b/InterfaceQT4/monWidgetMatrice.py @@ -21,8 +21,8 @@ from __future__ import absolute_import from __future__ import print_function try : - from builtins import str - from builtins import range + from builtins import str + from builtins import range except : pass import types,os,sys @@ -30,197 +30,235 @@ 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 +from desWidgetMatrice import Ui_desWidgetMatrice from PyQt5.QtCore import QSize, Qt -from PyQt5.QtWidgets import QTableWidgetItem -from PyQt5.QtGui import QIcon +from PyQt5.QtWidgets import QTableWidgetItem, QTableWidget +from PyQt5.QtGui import QIcon, QColor +from PyQt5.QtWidgets import QMessageBox class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille): # c est juste la taille des differents widgets de base qui change - def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): + def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) - self.monType= self.node.item.object.definition.type[0] + self.monType = self.node.item.object.definition.type[0] parentQt.commandesLayout.insertWidget(-1,self) self.nbLigs=0 self.nbCols=0 - self.nomVariables={} self.creeColonnes() self.connecterSignaux() + self.initialValeur() + + + def connecterSignaux(self) : + self.TBMatrice.itemChanged.connect(self.itemChanged) + self.PBrefresh.clicked.connect( self.acceptVal) + self.TBMatrice.focusOutEvent=self.monFocusOutEvent + + + def monFocusOutEvent(self,event): + self.acceptVal() + QTableWidget.focusOutEvent(self.TBMatrice,event) + + + def itemChanged(self): + monItem=self.TBMatrice.currentItem() + if monItem==None : return + texte=monItem.text() + if texte=="" : return + boolOk, commentaire = self.monType.verifItem(texte,self.node.item.object) + if not boolOk : + self.editor.afficheInfos(tr(commentaire),Qt.red) + monItem.setText("") + return + if self.monType.coloree : self.coloreItem(monItem,texte) + + + def coloreItem(self,monItem,texte): + if texte in self.monType.dictCouleurs.keys() : + monItem.setBackground(self.monType.dictCouleurs[texte]) + else : + i=self.monType.indiceCouleur%20 + newCouleur=QColor(*self.monType.listeCouleurs[i]) + #monItem.setBackground(Qt.red) + monItem.setBackground(newCouleur) + self.monType.dictCouleurs[texte]=newCouleur + self.monType.indiceCouleur+=1 + + + + def creeColonnes(self): + if self.monType.methodeCalculTaille != None : + try: + MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,)) + except : + QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille ) + return + else : + self.nbLigs=self.monType.nbLigs + self.nbCols=self.monType.nbCols + self.TBMatrice.setColumnCount(self.nbCols) + self.TBMatrice.setRowCount(self.nbLigs) + if self.nbLigs <15 : taille = 50 + else : taille = 30 + for i in range(self.nbLigs) : + self.TBMatrice.setRowHeight(i,taille) + for i in range(self.nbCols) : + self.TBMatrice.setColumnWidth(i,taille) + if self.monType.listeHeaders != None : + self.TBMatrice.setHorizontalHeaderLabels(self.monType.listeHeaders[0]) + self.TBMatrice.setVerticalHeaderLabels(self.monType.listeHeaders[1]) + else : + self.TBMatrice.verticalHeader().hide() + self.TBMatrice.horizontalHeader().hide() + # self.TBMatrice.setFixedSize(self.nbCols*20+10,self.nbLigs*20+10) + + + def initialValeur(self): + liste=self.node.item.getValeur() + if liste == None : return + dejaAffiche=0 + if (len(liste)) != self.nbLigs : + QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs)) + for i in range(self.nbLigs): + inter=liste[i] + if (len(inter)) != self.nbCols : + QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols)) + raise EficasException('dimension') + for j in range(self.nbCols): + self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j]))) + if self.monType.coloree : self.coloreItem(self.TBMatrice.item(i,j),str(liste[i][j])) + + def acceptVal(self): + liste=[] + for i in range(self.nbLigs): + listeCol=[] + for j in range(self.nbCols): + monItem=self.TBMatrice.item(i,j) + if monItem : texte=monItem.text() + else : texte = '' + if texte != '' : val=self.monType.convertItem(texte) + else : val = None + listeCol.append(val) + liste.append(listeCol) + self.node.item.setValeur(liste) + + +class MonWidgetMatriceOT (MonWidgetMatrice): + + def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande): + monWidgetMatrice.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande) + + def connecterSignaux(self) : + self.TBMatrice.itemChanged.connect(self.itemChanged) + self.PBrefresh.clicked.connect( self.afficheEntete) + + + def afficheEntete(self): + self.objSimp.changeEnteteMatrice() + self.TBMatrice.clear() if self.node.item.getValeur()== None: self.initialSsValeur() else : - try : self.initialValeur() - except : self.initialSsValeur() - if sys.platform[0:5]!="linux" : - repIcon=self.node.editor.appliEficas.repIcon - fichier=os.path.join(repIcon, 'update.png') - icon = QIcon(fichier) - self.PBrefresh.setIcon(icon) - self.PBrefresh.setIconSize(QSize(32, 32)) - - - - def connecterSignauxQT4(self) : - self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged) - self.connect(self.PBrefresh,SIGNAL("clicked()"), self.afficheEntete) - - def connecterSignaux(self) : - self.TBMatrice.itemChanged.connect(self.itemChanged) - self.PBrefresh.clicked.connect( self.afficheEntete) - - def afficheEntete(self): - self.objSimp.changeEnteteMatrice() - self.TBMatrice.clear() - if self.node.item.getValeur()== None: self.initialSsValeur() - else : - try : self.initialValeur() - except : self.initialSsValeur() - self.node.item.object.state='changed' - self.node.item.object.parent.state='changed' - self.setValide() - self.parentQt.setValide() - self.node.item.jdc.isValid() - - - def itemChanged(self): - monItem=self.TBMatrice.currentItem() - if monItem==None : return - texte=monItem.text() - if texte=="" : return - #try : - if 1 : - val=float(str(texte)) - ok=True - #except : - else : - 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) + try : self.initialValeur() + except : self.initialSsValeur() + self.node.item.object.state='changed' + self.node.item.object.parent.state='changed' + self.setValide() + self.parentQt.setValide() + self.node.item.jdc.isValid() + + + def itemChanged(self): + monItem=self.TBMatrice.currentItem() + if monItem==None : return + texte=monItem.text() + if texte=="" : return + 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.valMin != None : - if val < self.monType.valMin : - self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red) - monItem.setText("") + 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,)) + self.acceptVal() + + + + def creeColonnes(self): + if self.monType.methodeCalculTaille != None : + try: + MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,)) + except : + QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille ) + return + else : + self.nbLigs=self.monType.nbLigs + self.nbCols=self.monType.nbCols + + + def nbDeVariables(self): + # uniquement pour OT + jdc=self.node.item.object.jdc + etape=self.node.item.object.etape + self.listeVariables=jdc.getVariables(etape) + if self.listeVariables == [] : + QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue")) return - self.editor.afficheInfos("") - if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,)) - self.acceptVal() - - - def symetrique(self): - monItem=self.TBMatrice.currentItem() - texte=monItem.text() - if monItem.row() != monItem.column(): - print(monItem.row(), monItem.column()) - monItemSym=self.TBMatrice.item(monItem.column(), monItem.row()) - monItemSym.setText(texte) - - def creeColonnes(self): - if self.monType.methodeCalculTaille != None : - #try: - if 1 : - MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,)) - else : - #except : - QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille ) - return - else : - self.nbLigs=self.monType.nbLigs - self.nbCols=self.monType.nbCols - - - def nbDeVariables(self): - jdc=self.node.item.object.jdc - etape=self.node.item.object.etape - self.listeVariables=jdc.getVariables(etape) - if self.listeVariables == [] : - QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue")) - return - self.TBMatrice.setColumnCount(len(self.listeVariables)) - self.TBMatrice.setRowCount(len(self.listeVariables)) - self.nbLigs=len(self.listeVariables) - self.nbCols=len(self.listeVariables) - - def nbDeDistributions(self): - jdc=self.node.item.object.jdc - etape=self.node.item.object.etape - self.listeVariables=jdc.getDistributions(etape) - if self.listeVariables == [] : - QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue")) - return - self.TBMatrice.setColumnCount(len(self.listeVariables)) - self.TBMatrice.setRowCount(len(self.listeVariables)) - self.nbLigs=len(self.listeVariables) - self.nbCols=len(self.listeVariables) - - def initialSsValeur(self): - for row in range(self.nbLigs): - for column in range(self.nbCols): - if row == column : - initialFloat=1 - else : - initialFloat=0 - self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat))) - #header=QStringList() - header=[] - for var in self.listeVariables : -# header << var - header.append(var) - self.TBMatrice.setVerticalHeaderLabels(header) - self.TBMatrice.setHorizontalHeaderLabels(header) - - def initialValeur(self): - liste=self.node.item.getValeur() - dejaAffiche=0 - if (len(liste)) != self.nbLigs +1 : - QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs)) - dejaAffiche=1 - raise EficasException('dimension') - for i in range(self.nbLigs): - inter=liste[i+1] - if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) : - QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols)) - dejaAffiche=1 - raise EficasException('dimension') - for j in range(self.nbCols): - self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j]))) - header=QStringList() - for var in liste[0]: - header << var - self.TBMatrice.setVerticalHeaderLabels(header) - self.TBMatrice.setHorizontalHeaderLabels(header) - - def acceptVal(self): - liste=[] - liste.append(self.listeVariables) - if self.TBMatrice.rowCount() != self.nbLigs : - QMessageBox.critical( self, tr("Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs)) - if self.TBMatrice.columnCount() != self.nbCols : - QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols)) - for i in range(self.nbLigs): - listeCol=[] - for j in range(self.nbCols): - monItem=self.TBMatrice.item(i,j) - texte=monItem.text() - try : - val=float(str(texte)) - ok=True - except : - ok=False - #val,ok=texte.toDouble() - if ok == False : - QMessageBox.critical( self, tr("Mauvaise Valeur"),tr( "l element ") + str(i) + "," +str(j) +tr("n est pas correct")) - listeCol.append(val) - liste.append(listeCol) - # on ajoute l ordre des variables aux valeurs - self.node.item.setValeur(liste) + self.TBMatrice.setColumnCount(len(self.listeVariables)) + self.TBMatrice.setRowCount(len(self.listeVariables)) + self.nbLigs=len(self.listeVariables) + self.nbCols=len(self.listeVariables) + + + def initialSsValeur(self): + # uniquement pour OT + self.listeVariables=[] + for row in range(self.nbLigs): + for column in range(self.nbCols): + if row == column : + initialFloat=1 + else : + initialFloat=0 + self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat))) + header =[] + for var in liste[0]: header .append(str(var)) + self.TBMatrice.setVerticalHeaderLabels(header) + self.TBMatrice.setHorizontalHeaderLabels(header) + + def initialValeur(self): + # uniquement pour OT + liste=self.node.item.getValeur() + dejaAffiche=0 + if (len(liste)) != self.nbLigs +1 : + QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs)) + raise EficasException('dimension') + for i in range(self.nbLigs): + inter=liste[i+1] + if (len(inter)) != self.nbCols : + QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols)) + raise EficasException('dimension') + for j in range(self.nbCols): + self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j]))) + header =[] + for var in liste[0]: header .append(str(var)) + self.TBMatrice.setVerticalHeaderLabels(header) + self.TBMatrice.setHorizontalHeaderLabels(header)