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
# 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)