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