Salome HOME
12d542d4b3e7e1e286dcae14f8340142c171d4d9
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursIntoOrdonne.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
22
23 # Modules Eficas
24 from PyQt4.QtGui import *
25 from PyQt4.QtCore import *
26 from Extensions.i18n import tr
27
28 from feuille                import Feuille
29 from desWidgetPlusieursIntoOrdonne import Ui_WidgetPlusieursIntoOrdonne 
30 from politiquesValidation   import PolitiquePlusieurs
31 from qtSaisie               import SaisieValeur
32 from gereListe              import GereListe
33 from gereListe              import LECustom
34 from monLabelClic           import MonLabelClic
35
36
37 class MonWidgetPlusieursIntoOrdonne (Ui_WidgetPlusieursIntoOrdonne, Feuille,GereListe):
38
39   def __init__(self,node,monSimpDef,nom,objSimp,parentQt,commande):
40         #print "MonWidgetPlusieursInto", nom, self
41         self.nomLine="LEResultat"
42         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt,commande)
43         GereListe.__init__(self)
44         self.parentQt.commandesLayout.insertWidget(-1,self)
45         self.maCommande.listeAffichageWidget.append(self.lineEditVal1)
46         self.ouAjouter=0
47         self.prepareListeResultat()
48         self.vScrollBarRE = self.scrollAreaRE.verticalScrollBar()
49        
50
51   def setValeurs(self):
52        listeValeursCourantes=self.node.item.GetListeValeurs()
53        if hasattr(self.node.item.definition.validators,'set_MCSimp'):
54             obj=self.node.item.getObject()
55             self.node.item.definition.validators.set_MCSimp(obj)
56             if self.node.item.isvalid() == 0 :
57                liste=[]
58                for item in listeValeursCourantes:
59                    if self.node.item.definition.validators.verif_item(item)==1:
60                       liste.append(item)
61                self.listeAAfficher=self.node.item.get_liste_possible(liste)
62             else: 
63                self.listeAAfficher=self.node.item.get_liste_possible([])
64        else :
65                self.listeAAfficher=self.monSimpDef.into
66        if len(self.listeAAfficher)*20 > 400 : self.setMinimumHeight(400)
67        else : self.setMinimumHeight(len(self.listeAAfficher)*30)
68        self.adjustSize()
69        self.vScrollBar = self.scrollArea.verticalScrollBar()
70        self.politique=PolitiquePlusieurs(self.node,self.editor)
71        for i in range(1,len(self.listeAAfficher)+1):
72            self.ajoutLE(i)
73        for i in range(len(self.listeAAfficher)):
74            nomLE="lineEditVal"+str(i+1)
75            courant=getattr(self,nomLE)
76            courant.setText(str(self.listeAAfficher[i]))
77        self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
78        
79   def prepareListeResultat(self):
80        listeValeursCourantes=self.node.item.GetListeValeurs()
81        if self.monSimpDef.max == "**" : aConstruire=7
82        else                           : aConstruire=self.monSimpDef.max
83        if len(listeValeursCourantes) > aConstruire : aConstruire=len(listeValeursCourantes)
84        for i in range(1,aConstruire+1):
85            self.ajoutLEResultat(i)
86        self.indexDernierLabel=aConstruire
87        index=1
88        for val in listeValeursCourantes :
89           nomLE="LEResultat"+str(index)
90           courant=getattr(self,nomLE)
91           courant.setText(str(val))
92           courant.setReadOnly(True)
93           index=index+1
94
95   def moinsPushed(self):
96       self.ouAjouter=self.ouAjouter-1
97       feuille.moinsPushed(self)
98
99   #def ajoutLineEdit(self):
100   #    print "kljlkj"
101
102   def ajoutLEResultat (self,index,valeur=None):
103       nomLE="LEResultat"+str(index)
104       if hasattr(self,nomLE) : return
105       nouveauLE = LECustom(self.scrollAreaRE,self,index)
106       nouveauLE.setFrame(False)
107       #self.CBChoisis.addWidget(nouveauLE)
108       self.CBChoisis.insertWidget(self.ouAjouter,nouveauLE)
109       self.ouAjouter=self.ouAjouter+1
110       nouveauLE.setText("")
111       nouveauLE.setReadOnly(True)
112       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
113       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
114       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
115       setattr(self,nomLE,nouveauLE)
116       self.estVisibleRE=nouveauLE
117       if valeur != None : 
118          nouveauLE.setText(valeur)
119       
120   def ajoutLE(self,index,valeur=None):
121       #print "ajoutLE ", index
122       nomLE="lineEditVal"+str(index)
123       if hasattr(self,nomLE) : return
124       nouveauLE = MonLabelClic(self)
125       #self.CBLayout.addWidget(nouveauLE)
126       self.CBLayout.insertWidget(index -1,nouveauLE)
127       nouveauLE.setFrameShape(QFrame.NoFrame)
128       qApp.processEvents()
129       nouveauLE.setText("")
130       if index % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
131       else :              nouveauLE.setStyleSheet("background:rgb(240,240,240)")
132       self.vScrollBar.triggerAction(QScrollBar.SliderToMaximum)
133       nouveauLE.setFocus()
134       setattr(self,nomLE,nouveauLE)
135       
136
137   def finCommentaire(self):
138         commentaire=""
139         mc = self.node.item.get_definition()
140         d_aides = { 'TXM' : 'chaines de caracteres',
141                   'R'   : 'reels',
142                   'I'   : 'entiers',
143                   'C'   : 'complexes'}
144         type = mc.type[0]
145         if not d_aides.has_key(type) :
146            if mc.min == mc.max:
147                commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")
148            else :
149                commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")
150         else :
151            if mc.min == mc.max:
152                commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])
153            else :
154                commentaire=tr("Entrez entre ")+str(mc.min)+(" et  ")+str(mc.max) +" " +tr(d_aides[type])
155         aideval=self.node.item.aide()
156         com=commentaire + "   " + QString.toUtf8(QString(aideval))
157         return str(com)
158
159
160   def traiteClicSurLabel(self,valeur):
161         if valeur == None : return
162         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
163         if validite == 0 : return
164         if liste ==[]    : return
165         listeVal=[]
166
167         listeValeursCourantes=self.node.item.GetListeValeurs()
168         min,max = self.node.item.GetMinMax()
169         if len(listeValeursCourantes) +1 > max : 
170            self.editor.affiche_infos(tr("Nombre maximal de valeurs : ") + str(max),Qt.red)
171            return
172         else :
173            self.editor.affiche_infos(tr(""))
174
175         affiche=False
176         for i in range(1,self.indexDernierLabel+1):
177            nomLE="LEResultat"+str(i)
178            courant=getattr(self,nomLE)
179            if str(courant.text())==str("") : 
180               courant.setText(valeur)
181               courant.setReadOnly(True)
182               affiche=True
183               self.estVisibleRE=courant
184               QTimer.singleShot(1, self.rendVisibleLigneRE)
185               break
186           
187         if affiche == False:
188            self.indexDernierLabel = self.indexDernierLabel+1
189            self.ajoutLEResultat (self.indexDernierLabel,str(valeur))
190            self.vScrollBarRE.triggerAction(QScrollBar.SliderToMaximum)
191            QTimer.singleShot(1, self.rendVisibleLigneRE)
192         self.changeValeur()
193
194   def changeValeur(self,changeDePlace=False,oblige=False):
195 #PN les 2 arg sont pour que la signature de ma fonction soit identique a monWidgetPlusieursBase
196         listeVal=[]
197         for i in range(1,self.indexDernierLabel+1):
198            nomLE="LEResultat"+str(i)
199            courant=getattr(self,nomLE)
200            valeur=courant.text()
201            if str(valeur)=="" : continue
202            liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
203            listeVal.append(str(valeur))
204
205         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(listeVal,-1,[])
206
207         listeValeursCourantes=self.node.item.GetListeValeurs()
208         min,max = self.node.item.GetMinMax()
209         if len(listeValeursCourantes) < min : 
210            self.editor.affiche_infos(tr("Nombre minimal de valeurs : ") + str(min),Qt.red)
211         else :
212            self.editor.affiche_infos("")
213     
214         if validite :
215            self.node.item.set_valeur(listeRetour)
216         else :
217            commentaire=comm+" "+comm2
218            self.editor.affiche_infos(commentaire,Qt.red)
219         self.setValide()
220 #
221   def rendVisibleLigneRE(self):
222       qApp.processEvents()
223       self.estVisibleRE.setFocus()
224       self.scrollArea.ensureWidgetVisible(self.estVisibleRE,0,0)
225 #