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