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