1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 EDF R&D
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 # Lesser General Public License for more details.
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 from __future__ import absolute_import
22 from __future__ import print_function
24 from builtins import str
25 from builtins import range
31 from Extensions.i18n import tr
32 from .feuille import Feuille
33 from Extensions.eficas_exception import EficasException
36 from desWidgetMatrice import Ui_desWidgetMatrice
38 from PyQt5.QtCore import QSize, Qt
39 from PyQt5.QtWidgets import QTableWidgetItem, QTableWidget
40 from PyQt5.QtGui import QIcon, QColor
41 from PyQt5.QtWidgets import QMessageBox
44 class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
45 # c est juste la taille des differents widgets de base qui change
47 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
48 Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
49 self.monType = self.node.item.object.definition.type[0]
50 parentQt.commandesLayout.insertWidget(-1,self)
54 self.connecterSignaux()
58 def connecterSignaux(self) :
59 self.TBMatrice.itemChanged.connect(self.itemChanged)
60 self.PBrefresh.clicked.connect( self.acceptVal)
61 self.TBMatrice.focusOutEvent=self.monFocusOutEvent
64 def monFocusOutEvent(self,event):
66 QTableWidget.focusOutEvent(self.TBMatrice,event)
69 def itemChanged(self):
70 monItem=self.TBMatrice.currentItem()
71 if monItem==None : return
74 boolOk, commentaire = self.monType.verifItem(texte,self.node.item.object)
76 self.editor.afficheInfos(tr(commentaire),Qt.red)
79 if self.monType.coloree : self.coloreItem(monItem,texte)
82 def coloreItem(self,monItem,texte):
83 if texte in self.monType.dictCouleurs.keys() :
84 monItem.setBackground(self.monType.dictCouleurs[texte])
86 i=self.monType.indiceCouleur%20
87 newCouleur=QColor(*self.monType.listeCouleurs[i])
88 #monItem.setBackground(Qt.red)
89 monItem.setBackground(newCouleur)
90 self.monType.dictCouleurs[texte]=newCouleur
91 self.monType.indiceCouleur+=1
95 def creeColonnes(self):
96 if self.monType.methodeCalculTaille != None :
98 MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
100 QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + self.monType.methodeCalculTaille )
103 self.nbLigs=self.monType.nbLigs
104 self.nbCols=self.monType.nbCols
105 self.TBMatrice.setColumnCount(self.nbCols)
106 self.TBMatrice.setRowCount(self.nbLigs)
107 if self.nbLigs <15 : taille = 50
109 for i in range(self.nbLigs) :
110 self.TBMatrice.setRowHeight(i,taille)
111 for i in range(self.nbCols) :
112 self.TBMatrice.setColumnWidth(i,taille)
113 if self.monType.listeHeaders != None :
114 self.TBMatrice.setHorizontalHeaderLabels(self.monType.listeHeaders[0])
115 self.TBMatrice.setVerticalHeaderLabels(self.monType.listeHeaders[1])
117 self.TBMatrice.verticalHeader().hide()
118 self.TBMatrice.horizontalHeader().hide()
119 # self.TBMatrice.setFixedSize(self.nbCols*20+10,self.nbLigs*20+10)
122 def initialValeur(self):
123 liste=self.node.item.getValeur()
124 if liste == None : return
126 if (len(liste)) != self.nbLigs :
127 QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
128 for i in range(self.nbLigs):
130 if (len(inter)) != self.nbCols :
131 QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
132 raise EficasException('dimension')
133 for j in range(self.nbCols):
134 self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j])))
135 if self.monType.coloree : self.coloreItem(self.TBMatrice.item(i,j),str(liste[i][j]))
139 for i in range(self.nbLigs):
141 for j in range(self.nbCols):
142 monItem=self.TBMatrice.item(i,j)
143 if monItem : texte=monItem.text()
145 if texte != '' : val=self.monType.convertItem(texte)
148 liste.append(listeCol)
149 self.node.item.setValeur(liste)
152 class MonWidgetMatriceOT (MonWidgetMatrice):
154 def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
155 monWidgetMatrice.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
157 def connecterSignaux(self) :
158 self.TBMatrice.itemChanged.connect(self.itemChanged)
159 self.PBrefresh.clicked.connect( self.afficheEntete)
162 def afficheEntete(self):
163 self.objSimp.changeEnteteMatrice()
164 self.TBMatrice.clear()
165 if self.node.item.getValeur()== None: self.initialSsValeur()
167 try : self.initialValeur()
168 except : self.initialSsValeur()
169 self.node.item.object.state='changed'
170 self.node.item.object.parent.state='changed'
172 self.parentQt.setValide()
173 self.node.item.jdc.isValid()
176 def itemChanged(self):
177 monItem=self.TBMatrice.currentItem()
178 if monItem==None : return
180 if texte=="" : return
182 val=float(str(texte))
187 self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red)
190 if self.monType.valSup != None :
191 if val > self.monType.valSup :
192 self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red)
195 if self.monType.valMin != None :
196 if val < self.monType.valMin :
197 self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red)
200 self.editor.afficheInfos("")
201 if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,))
206 def creeColonnes(self):
207 if self.monType.methodeCalculTaille != None :
209 MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
211 QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + self.monType.methodeCalculTaille )
214 self.nbLigs=self.monType.nbLigs
215 self.nbCols=self.monType.nbCols
218 def nbDeVariables(self):
220 jdc=self.node.item.object.jdc
221 etape=self.node.item.object.etape
222 self.listeVariables=jdc.getVariables(etape)
223 if self.listeVariables == [] :
224 QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
226 self.TBMatrice.setColumnCount(len(self.listeVariables))
227 self.TBMatrice.setRowCount(len(self.listeVariables))
228 self.nbLigs=len(self.listeVariables)
229 self.nbCols=len(self.listeVariables)
232 def initialSsValeur(self):
234 self.listeVariables=[]
235 for row in range(self.nbLigs):
236 for column in range(self.nbCols):
241 self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
243 for var in liste[0]: header .append(str(var))
244 self.TBMatrice.setVerticalHeaderLabels(header)
245 self.TBMatrice.setHorizontalHeaderLabels(header)
247 def nbDeVariables(self):
249 jdc=self.node.item.object.jdc
250 etape=self.node.item.object.etape
251 self.listeVariables=jdc.getVariables(etape)
252 if self.listeVariables == [] :
253 QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue. Entrez les variables avant la matrice"))
255 self.TBMatrice.setColumnCount(len(self.listeVariables))
256 self.TBMatrice.setRowCount(len(self.listeVariables))
257 self.nbLigs=len(self.listeVariables)
258 self.nbCols=len(self.listeVariables)
261 def initialValeur(self):
263 liste=self.node.item.getValeur()
265 if (len(liste)) != self.nbLigs +1 :
266 QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
267 raise EficasException('dimension')
268 for i in range(self.nbLigs):
270 if (len(inter)) != self.nbCols :
271 QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
272 raise EficasException('dimension')
273 for j in range(self.nbCols):
274 self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i][j])))
276 for var in liste[0]: header .append(str(var))
277 self.TBMatrice.setVerticalHeaderLabels(header)
278 self.TBMatrice.setHorizontalHeaderLabels(header)