]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monWidgetPlusieursBase.py
Salome HOME
05d653e132a98bd1bc5ae4a9ddd1bb1713541919
[tools/eficas.git] / InterfaceQT4 / monWidgetPlusieursBase.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 desWidgetPlusieursBase import Ui_WidgetPlusieursBase 
30 from politiquesValidation   import PolitiquePlusieurs
31 from qtSaisie               import SaisieValeur
32 from gereListe              import GereListe
33 from gereListe              import LECustom
34
35 class MonWidgetPlusieursBase (Ui_WidgetPlusieursBase,Feuille,GereListe):
36
37   def __init__(self,node,monSimpDef,nom,objSimp,parentQt):
38         #print "MonWidgetPlusieursBase", nom
39         self.index=1
40         self.indexDernierLabel=0
41         Feuille.__init__(self,node,monSimpDef,nom,objSimp,parentQt)
42         GereListe.__init__(self)
43         self.listeValeursCourantes=self.node.item.GetListeValeurs()
44         self.parentQt.commandesLayout.insertWidget(1,self)
45
46
47   def setValeurs(self):
48        #print "je passe dans SetValeur"
49        self.vScrollBar = self.scrollArea.verticalScrollBar()
50        self.politique=PolitiquePlusieurs(self.node,self.editor)
51        # construction du min de valeur a entrer
52        if self.monSimpDef.max == "**" : aConstruire=7
53        else                           : aConstruire=self.monSimpDef.max
54        for i in range(1,aConstruire):
55            self.ajoutLineEdit()
56        qApp.processEvents()
57        self.scrollArea.ensureWidgetVisible(self.labelVal1)
58        self.listeValeursCourantes=self.node.item.GetListeValeurs()
59        index=1
60        for valeur in self.listeValeursCourantes :
61            val=self.politique.GetValeurTexte(valeur)
62            nomLineEdit="labelVal"+str(index)
63            if hasattr(self,nomLineEdit) : 
64               courant=getattr(self,nomLineEdit)
65               courant.setText(str(val))
66            else :
67               self.ajoutLineEdit(val)
68            index=index+1
69        # ajout d'une ligne vide ou affichage commentaire
70        if self.indexDernierLabel < self.monSimpDef.max  : self.ajoutLineEdit()
71        else : self.scrollArea.setToolTip('nb max de valeurs atteint')
72        #self.vScrollBar.triggerAction(QScrollBar.SliderToMinimum)
73        
74
75   def ajoutLineEdit(self,valeur=None):
76       self.indexDernierLabel=self.indexDernierLabel+1
77       nomLineEdit="labelVal"+str(self.indexDernierLabel)
78       if hasattr(self,nomLineEdit) : 
79          self.indexDernierLabel=self.indexDernierLabel-1
80          return
81       nouveauLE = LECustom(self.scrollArea,self,self.indexDernierLabel)
82       self.verticalLayoutLE.insertWidget(self.indexDernierLabel-1,nouveauLE)
83       nouveauLE.setText("")
84       if self.indexDernierLabel % 2 == 1 : nouveauLE.setStyleSheet("background:rgb(210,210,210)")
85       else :                               nouveauLE.setStyleSheet("background:rgb(235,235,235)")
86       nouveauLE.setFrame(False)
87       self.connect(nouveauLE,SIGNAL("returnPressed()"),self.changeValeur)
88       nouveauLE.setFocus()
89       setattr(self,nomLineEdit,nouveauLE)
90       if valeur != None : nouveauLE.setText(str(valeur))
91       # deux lignes pour que le ensureVisible fonctionne
92       self.estVisible=nouveauLE
93       QTimer.singleShot(1, self.rendVisible)
94
95
96   def rendVisible(self):
97       qApp.processEvents()
98       self.estVisible.setFocus()
99       self.scrollArea.ensureWidgetVisible(self.estVisible,0,0)
100       
101
102   def finCommentaire(self):
103         commentaire=""
104         mc = self.node.item.get_definition()
105         d_aides = { 'TXM' : 'chaines de caracteres',
106                   'R'   : 'reels',
107                   'I'   : 'entiers',
108                   'C'   : 'complexes'}
109         type = mc.type[0]
110         if not d_aides.has_key(type) :
111            if mc.min == mc.max:
112                commentaire=tr("Entrez ")+str(mc.min)+tr(" valeurs ")
113            else :
114                commentaire=tr("Entrez entre ")+str(mc.min)+tr(" et ")+str(mc.max)+tr(" valeurs ")
115         else :
116            if mc.min == mc.max:
117                commentaire=tr("Entrez ")+str(mc.min)+" "+tr(d_aides[type])
118            else :
119                commentaire=tr("Entrez entre ")+str(mc.min)+(" et  ")+str(mc.max) +" " +tr(d_aides[type])
120         aideval=self.node.item.aide()
121         commentaire=commentaire + "   " + QString.toUtf8(QString(aideval))
122         return str(commentaire)
123
124   def ajout1Valeur(self,valeur=None):
125         if valeur == None : return
126         liste,validite=SaisieValeur.TraiteLEValeur(self,str(valeur))
127         if validite == 0 : return
128         if liste ==[]    : return
129         listeVal=[]
130         for valeur in self.listeValeursCourantes : listeVal.append(valeur)
131         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,-1,listeVal)
132         if (comm2 != "" and comm != None) : return comm2
133         if validite : 
134            self.listeValeursCourantes=self.listeValeursCourantes+listeRetour
135            if len(self.listeValeursCourantes) > self.monSimpDef.min :
136               self.node.item.set_valeur(self.listeValeursCourantes)
137            return None
138         else :
139            return(comm2+" "+comm)
140         
141
142
143   def changeValeur(self,changeDePlace=True):
144       print 'ds chge valeur'
145       donneFocus=None
146       derniereValeur=None
147       self.listeValeursCourantes = []
148       for i in range (1, self.indexDernierLabel+1):
149           nomLineEdit="labelVal"+str(i)
150           courant=getattr(self,nomLineEdit)
151           valeur=courant.text()
152           if valeur != None and valeur != "" : 
153              commentaire=self.ajout1Valeur(valeur)
154              if (commentaire != None ):
155                  self.editor.affiche_infos(commentaire,Qt.red)
156                  courant.setText("")
157                  donneFocus=courant
158           elif donneFocus==None : donneFocus=courant
159       nomDernierLineEdit="labelVal"+str(self.indexDernierLabel)
160       dernier=getattr(self,nomDernierLineEdit)
161       derniereValeur=dernier.text()
162       if changeDePlace:
163          if donneFocus != None : 
164            donneFocus.setFocus()
165            self.scrollArea.ensureWidgetVisible(donneFocus)
166          elif self.indexDernierLabel < self.monSimpDef.max  : 
167            self.ajoutLineEdit()
168       if  self.indexDernierLabel == self.monSimpDef.max  :
169         self.scrollArea.setToolTip('nb max de valeurs atteint')
170         self.editor.affiche_infos('nb max de valeurs atteint')
171       if self.listeValeursCourantes == [] : return
172       min,max = self.node.item.GetMinMax()
173       if len(self.listeValeursCourantes) > max : return
174       if len(self.listeValeursCourantes) < min : return
175       self.node.item.set_valeur(self.listeValeursCourantes)
176       self.setValide()
177
178           
179
180 # Avertissement quand on quitte le widget