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