Salome HOME
248c6e1415c86ba277c68fc2c6385ef4236aef41
[tools/eficas.git] / InterfaceQT4 / monWidgetMatrice.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20 # Modules Python
21 from __future__ import absolute_import
22 from __future__ import print_function
23 try :
24    from builtins import str
25    from builtins import range
26 except : pass
27
28 import types,os,sys
29
30 # Modules Eficas
31 from Extensions.i18n import tr
32 from .feuille         import Feuille
33
34
35 from desWidgetMatrice  import Ui_desWidgetMatrice 
36
37 from PyQt5.QtCore import QSize, Qt
38 from PyQt5.QtWidgets import QTableWidgetItem
39 from PyQt5.QtGui import QIcon
40
41
42 class MonWidgetMatrice (Ui_desWidgetMatrice,Feuille):
43 # c est juste la taille des differents widgets de base qui change
44
45   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
46         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
47         self.monType= self.node.item.object.definition.type[0]
48         parentQt.commandesLayout.insertWidget(-1,self)
49         self.nbLigs=0
50         self.nbCols=0
51         self.nomVariables={}
52         self.creeColonnes()
53         self.connecterSignaux()
54         if self.node.item.getValeur()== None:  self.initialSsValeur()
55         else :
56            try    : self.initialValeur()
57            except : self.initialSsValeur()
58         if sys.platform[0:5]!="linux" : 
59           repIcon=self.node.editor.appliEficas.repIcon
60           fichier=os.path.join(repIcon, 'update.png')
61           icon = QIcon(fichier)
62           self.PBrefresh.setIcon(icon)
63           self.PBrefresh.setIconSize(QSize(32, 32))
64
65
66
67   def connecterSignauxQT4(self) :
68       self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged)
69       self.connect(self.PBrefresh,SIGNAL("clicked()"), self.afficheEntete)
70
71   def connecterSignaux(self) :
72       self.TBMatrice.itemChanged.connect(self.itemChanged)
73       self.PBrefresh.clicked.connect( self.afficheEntete)
74
75   def afficheEntete(self):
76       self.objSimp.changeEnteteMatrice()
77       self.TBMatrice.clear()
78       if self.node.item.getValeur()== None:  self.initialSsValeur()
79       else :
80          try    : self.initialValeur()
81          except : self.initialSsValeur()
82       self.node.item.object.state='changed'
83       self.node.item.object.parent.state='changed'
84       self.setValide()
85       self.parentQt.setValide()
86       self.node.item.jdc.isValid()
87
88
89   def itemChanged(self):
90       monItem=self.TBMatrice.currentItem()
91       if monItem==None : return
92       texte=monItem.text()
93       if texte=="" : return
94       #try :
95       if 1 :
96         val=float(str(texte))
97         ok=True
98       #except :
99       else :
100         ok=False
101       if ok == False :
102         self.editor.afficheInfos(tr("Entrer un float SVP"),Qt.red)
103         monItem.setText("")
104         return
105       if self.monType.valSup != None :
106          if val > self.monType.valSup :
107             self.editor.afficheInfos(tr("Entrer un float inferieur a ") + repr(self.monType.valSup),Qt.red)
108             monItem.setText("")
109             return
110       if self.monType.valMin != None :
111          if val < self.monType.valMin :
112             self.editor.afficheInfos(tr("Entrer un float superieur a ") + repr(self.monType.valMin),Qt.red)
113             monItem.setText("")
114             return
115       self.editor.afficheInfos("")
116       if self.monType.structure != None: MonWidgetMatrice.__dict__[self.monType.structure](*(self,))
117       self.acceptVal()
118
119
120   def symetrique(self):
121       monItem=self.TBMatrice.currentItem()
122       texte=monItem.text()
123       if monItem.row() != monItem.column():
124          print(monItem.row(), monItem.column())
125          monItemSym=self.TBMatrice.item(monItem.column(), monItem.row())
126          monItemSym.setText(texte)
127
128   def creeColonnes(self):
129       if self.monType.methodeCalculTaille != None :
130          #try:
131          if 1 :
132            MonWidgetMatrice.__dict__[self.monType.methodeCalculTaille](*(self,))
133          else :
134          #except :
135            QMessageBox.critical( self, tr("Mauvaise execution "),tr( "impossible d executer la methode ") + monType.methodeCalculTaille )
136            return
137       else :
138          self.nbLigs=self.monType.nbLigs
139          self.nbCols=self.monType.nbCols
140
141
142   def  nbDeVariables(self):
143        jdc=self.node.item.object.jdc
144        etape=self.node.item.object.etape
145        self.listeVariables=jdc.getVariables(etape)
146        if self.listeVariables == [] :
147            QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
148            return
149        self.TBMatrice.setColumnCount(len(self.listeVariables))
150        self.TBMatrice.setRowCount(len(self.listeVariables))
151        self.nbLigs=len(self.listeVariables)
152        self.nbCols=len(self.listeVariables)
153
154   def  nbDeDistributions(self):
155        jdc=self.node.item.object.jdc
156        etape=self.node.item.object.etape
157        self.listeVariables=jdc.getDistributions(etape)
158        if self.listeVariables == [] :
159            QMessageBox.critical( self, tr("Mauvaise Commande "),tr( "Aucune variable connue"))
160            return
161        self.TBMatrice.setColumnCount(len(self.listeVariables))
162        self.TBMatrice.setRowCount(len(self.listeVariables))
163        self.nbLigs=len(self.listeVariables)
164        self.nbCols=len(self.listeVariables)
165
166   def  initialSsValeur(self):
167        for row in range(self.nbLigs):
168            for column in range(self.nbCols):
169                if row == column :
170                   initialFloat=1
171                else :
172                   initialFloat=0
173                self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
174        #header=QStringList()
175        header=[]
176        for var in self.listeVariables :
177 #          header << var
178            header.append(var)
179        self.TBMatrice.setVerticalHeaderLabels(header)
180        self.TBMatrice.setHorizontalHeaderLabels(header)
181
182   def  initialValeur(self):
183       liste=self.node.item.getValeur()
184       dejaAffiche=0
185       if (len(liste)) != self.nbLigs +1  :
186          QMessageBox.critical( self,tr( "Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
187          dejaAffiche=1
188          raise  EficasException('dimension')
189       for i in range(self.nbLigs):
190           inter=liste[i+1]
191           if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) :
192              QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
193              dejaAffiche=1
194              raise  EficasException('dimension')
195           for j in range(self.nbCols):
196               self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j])))
197       header=QStringList()
198       for var in liste[0]:
199            header << var
200       self.TBMatrice.setVerticalHeaderLabels(header)
201       self.TBMatrice.setHorizontalHeaderLabels(header)
202               
203   def acceptVal(self):
204       liste=[]
205       liste.append(self.listeVariables)
206       if self.TBMatrice.rowCount() != self.nbLigs :
207          QMessageBox.critical( self, tr("Mauvaise dimension de matrice"),tr( "le nombre de ligne n est pas egal a ") + str(self.nbLigs))
208       if self.TBMatrice.columnCount() != self.nbCols :
209          QMessageBox.critical( self, tr("Mauvaise dimension de matrice"), tr("le nombre de colonne n est pas egal a ") + str(self.nbCols))
210       for i in range(self.nbLigs):
211           listeCol=[]
212           for j in range(self.nbCols):
213               monItem=self.TBMatrice.item(i,j)       
214               texte=monItem.text()
215               try :
216                  val=float(str(texte))
217                  ok=True
218               except :
219                  ok=False
220               #val,ok=texte.toDouble() 
221               if ok == False :
222                  QMessageBox.critical( self, tr("Mauvaise Valeur"),tr( "l element ") + str(i) + "," +str(j) +tr("n est pas correct"))
223               listeCol.append(val)
224           liste.append(listeCol)
225       # on ajoute l ordre des variables aux valeurs
226       self.node.item.setValeur(liste)