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