]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monMatricePanel.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceQT4 / monMatricePanel.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import string,types,os
23
24 # Modules Eficas
25 from PyQt4.QtGui import *
26 from PyQt4.QtCore import *
27
28 from desMatrice           import Ui_desMatrice
29
30
31 class MonMatricePanel(Ui_desMatrice,QDialog):
32   """
33   Classe définissant le panel Matrice
34   Attention n herite pas de QtPanel
35   """
36   def __init__(self,node, parent = None,name = None,fl = 0):
37        QDialog.__init__(self,parent)
38        self.node=node
39        self.editor = parent
40        self.nbLigs=0
41        self.nbCols=0
42        self.monType= self.node.item.object.definition.type[0]
43        if hasattr(parent,"leLayout"):
44           parent.leLayout.removeWidget(parent.leLayout.widgetActive)
45           parent.leLayout.widgetActive.close()
46           parent.leLayout.addWidget(self)
47           parent.leLayout.widgetActive=self
48        else:
49           parent.partieDroite=QWidget()
50           parent.leLayout=QGridLayout(parent.partieDroite)
51           parent.leLayout.addWidget(self)
52           parent.addWidget(parent.partieDroite)
53           parent.leLayout.widgetActive=self
54        self.setupUi(self)
55        self.initVal()
56        self.creeColonnes()
57        self.connecterSignaux()
58        if self.node.item.get_valeur()== None:
59           self.initialSsValeur()
60        else :
61           try :
62              self.initialValeur()
63           except :
64              self.initialSsValeur()
65
66   def initVal(self):
67       self.nomVariables={}
68
69   def connecterSignaux(self) :
70       self.connect(self.TBMatrice,SIGNAL("itemChanged(QTableWidgetItem *)"),self.itemChanged)
71       self.connect(self.BOk,SIGNAL("clicked()"),self.acceptVal)
72
73   def itemChanged(self):
74       monItem=self.TBMatrice.currentItem()
75       if monItem==None : return
76       texte=monItem.text()
77       if texte=="" : return
78       val,ok=texte.toDouble() 
79       if ok == False :
80         self.editor.affiche_infos("Entrer un float SVP",Qt.red)
81         monItem.setText("")
82         return
83       if self.monType.valSup != None :
84          if val > self.monType.valSup :
85             self.editor.affiche_infos("Entrer un float inférieur à " + repr(self.monType.valSup),Qt.red)
86             monItem.setText("")
87             return
88       if self.monType.valMin != None :
89          if val < self.monType.valMin :
90             self.editor.affiche_infos("Entrer un float superieur à " + repr(self.monType.valMin),Qt.red)
91             monItem.setText("")
92             return
93       self.editor.affiche_infos("")
94       if self.monType.structure != None:
95            apply (MonMatricePanel.__dict__[self.monType.structure],(self,))
96
97
98   def symetrique(self):
99       monItem=self.TBMatrice.currentItem()
100       texte=monItem.text()
101       if monItem.row() != monItem.column():
102          monItemSym=self.TBMatrice.item(monItem.column(), monItem.row())
103          monItemSym.setText(texte)
104
105   def creeColonnes(self):
106       if self.monType.methodeCalculTaille != None :
107          #try:
108          if 1 :
109            apply (MonMatricePanel.__dict__[self.monType.methodeCalculTaille],(self,))
110          else :
111          #except :
112            QMessageBox.critical( self, "Mauvaise execution ", "impossible d executer la méthode " + monType.methodeCalculTaille )
113            return
114       else :
115          self.nbLigs=self.monType.nbLigs
116          self.nbCols=self.monType.nbCols
117
118
119   def  NbDeVariables(self):
120        jdc=self.node.item.object.jdc
121        etape=self.node.item.object.etape
122        self.listeVariables=jdc.get_variables(etape)
123        if self.listeVariables == [] :
124            QMessageBox.critical( self, "Mauvaise Commande ", "Aucune variable connue")
125            return
126        self.TBMatrice.setColumnCount(len(self.listeVariables))
127        self.TBMatrice.setRowCount(len(self.listeVariables))
128        self.nbLigs=len(self.listeVariables)
129        self.nbCols=len(self.listeVariables)
130
131   def  initialSsValeur(self):
132        for row in range(self.nbLigs):
133            for column in range(self.nbCols):
134                if row == column :
135                   initialFloat=1
136                else :
137                   initialFloat=0
138                self.TBMatrice.setItem(row,column,QTableWidgetItem(str(initialFloat)))
139        header=QStringList()
140        for var in self.listeVariables :
141            header << var
142        self.TBMatrice.setVerticalHeaderLabels(header)
143        self.TBMatrice.setHorizontalHeaderLabels(header)
144
145   def  initialValeur(self):
146       liste=self.node.item.get_valeur()
147       dejaAffiche=0
148       if (len(liste)) != self.nbLigs +1  :
149          QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
150          dejaAffiche=1
151       for i in range(self.nbLigs):
152           inter=liste[i+1]
153           if (len(inter)) != self.nbCols and (dejaAffiche == 0 ) :
154              QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
155              dejaAffiche=1
156           for j in range(self.nbCols):
157               self.TBMatrice.setItem(i,j,QTableWidgetItem(str(liste[i+1][j])))
158       header=QStringList()
159       for var in liste[0]:
160            header << var
161       self.TBMatrice.setVerticalHeaderLabels(header)
162       self.TBMatrice.setHorizontalHeaderLabels(header)
163               
164   def acceptVal(self):
165       liste=[]
166       liste.append(self.listeVariables)
167       if self.TBMatrice.rowCount() != self.nbLigs :
168          QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de ligne n est pas egal a " + str(self.nbLigs))
169       if self.TBMatrice.columnCount() != self.nbCols :
170          QMessageBox.critical( self, "Mauvaise dimension de matrice", "le nombre de colonne n est pas egal a " + str(self.nbCols))
171       for i in range(self.nbLigs):
172           listeCol=[]
173           for j in range(self.nbCols):
174               monItem=self.TBMatrice.item(i,j)       
175               texte=monItem.text()
176               val,ok=texte.toDouble() 
177               if ok == False :
178                  QMessageBox.critical( self, "Mauvaise Valeur", "l element " + str(i) + "," +str(j) +"n est pas correct")
179               listeCol.append(val)
180           liste.append(listeCol)
181       # on ajoute l ordre des variables aux valeurs
182       self.node.item.set_valeur(liste)