Salome HOME
fin portage python 3
[tools/eficas.git] / InterfaceQT4 / monFonctionPanel.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 from __future__ import absolute_import
22 try :
23    from builtins import str
24    from builtins import range
25 except : pass
26
27 import types,os
28 from six.moves import range
29 from PyQt5.QtCore import  Qt
30
31
32 # Modules Eficas
33 from .qtSaisie      import SaisieValeur
34 from monPlusieursBasePanel import MonPlusieursBasePanel
35
36 from Extensions.i18n import tr
37
38 # Import des panels
39
40 class MonFonctionPanel(MonPlusieursBasePanel):
41 #  Classe definissant le panel associee aux mots-cles qui demandent
42 #  a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
43 #  discretes
44   def __init__(self,node, parent = None,name = None,fl = 0):
45         #print "MonFonctionPanel"
46         self.node=node
47         self.SetNbValeurs()
48         MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
49
50   def SetNbValeurs(self):
51         self.nbValeurs = 1
52         if self.node.item.wait_tuple()== 1 :
53            for a in self.node.item.definition.type :
54                try :
55                    self.nbValeurs = a.ntuple
56                    break
57                except :
58                    pass
59         genea=self.node.item.get_genealogie()
60         self.nbValeursASaisir=self.nbValeurs
61         if "VALE" in genea: self.nbValeurs=2
62         if "VALE_C" in genea: self.nbValeurs=3
63
64
65   def DecoupeListeValeurs(self,liste):
66         #decoupe la liste des valeurs en n ( les x puis les y)
67         l_valeurs=[]
68         if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
69             message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
70             self.editor.affiche_infos(message,Qt.red)
71         i=0
72         while ( i < len(liste) ) :
73             try :
74               t=tuple(liste[i:i+self.nbValeurs])
75               i=i+self.nbValeurs
76             except:
77               t=tuple(liste[i:len(liste)])
78             l_valeurs.append(t)
79         return l_valeurs
80
81   def BuildLBValeurs(self,listeValeurs=None):
82         self.LBValeurs.clear()
83         if listeValeurs== None :
84            listeValeurs=self.node.item.GetListeValeurs()
85         if self.node.item.wait_tuple()== 1 :
86               listeATraiter=listeValeurs
87               for valeur in listeATraiter:
88                   str_valeur=str(valeur)
89                   self.LBValeurs.addItem(str_valeur)
90         else : 
91               for valeur in self.DecoupeListeValeurs(listeValeurs):
92                    if type(valeur) == tuple:
93                        TupleEnTexte="("
94                        for val in valeur :
95                            TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
96                        TupleEnTexte = TupleEnTexte[0:-2] +")"
97                        self.LBValeurs.addItem(TupleEnTexte)
98                    else :
99                        self.LBValeurs.addItem(str(valeur))
100
101
102   def  ajout1Valeur(self,liste=[]):
103         # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
104         validite=1
105         if liste == [] :
106            if self.node.item.wait_tuple()== 1 :
107               liste=SaisieValeur.TraiteLEValeurTuple(self)
108               if liste == [''] : return
109            else :
110               liste,validite=SaisieValeur.TraiteLEValeur(self)
111               if validite == 0 : return
112         if liste ==[]    : return
113
114         if (self.node.item.wait_tuple()== 1 and len(liste) != self.nbValeurs):
115             commentaire  = str(liste) 
116             commentaire += tr(" n est pas un tuple de ") 
117             commentaire += str(self.nbValeursASaisir) 
118             commentaire += tr(" valeurs")
119             self.LEValeur.setText(str(liste))
120             self.editor.affiche_infos(commentaire,Qt.red)
121             return
122
123         if self.node.item.wait_tuple()== 1 :
124               liste2=tuple(liste)
125               liste=liste2
126
127         index=self.LBValeurs.currentRow()
128         if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
129            index=0
130         else :
131            index=self.LBValeurs.currentRow() + 1
132         indexListe=index*self.nbValeurs
133         if index == 0 : indexListe=len(self.listeValeursCourantes)
134
135         listeVal=[]
136         for valeur in self.listeValeursCourantes :
137                 listeVal.append(valeur)
138         if self.node.item.wait_tuple()== 1 :
139              indexListe = index
140              validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
141         else :
142              validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
143         self.Commentaire.setText(tr(comm2))
144         if not validite :
145                 self.editor.affiche_infos(comm,Qt.red)
146         else:
147            self.LEValeur.setText("")
148            l1=self.listeValeursCourantes[:indexListe]
149            l3=self.listeValeursCourantes[indexListe:]
150            if self.node.item.wait_tuple()== 1 :
151               listeATraiter=listeRetour
152            else : 
153               listeATraiter=self.DecoupeListeValeurs(listeRetour)
154            for valeur in  listeATraiter :
155                if type(valeur) == tuple:
156                   TupleEnTexte="("
157                   for val in valeur :
158                       TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
159                   str_valeur = TupleEnTexte[0:-2] +")"
160                else :
161                   str_valeur=str(valeur)
162                self.LBValeurs.insertItem(index,str_valeur)
163                item=self.LBValeurs.item(index)
164                item.setSelected(1)
165                self.LBValeurs.setCurrentItem(item)
166                index=index+1
167            self.listeValeursCourantes=l1+listeRetour+l3
168            self.BuildLBValeurs(self.listeValeursCourantes)
169
170
171   def ajoutNValeur(self,liste) :
172         if len(liste)%self.nbValeurs != 0 :
173            texte="Nombre de valeur incorrecte"
174            #self.Commentaire.setText(texte)
175            self.editor.affiche_infos(texte,Qt.red)
176            return
177         listeDecoupee=self.DecoupeListeValeurs(liste)
178         for vals in listeDecoupee :
179             self.ajout1Valeur(vals)
180            
181   def Sup1Valeur(self):
182         index=self.LBValeurs.currentRow()
183         if index == None : return
184         removed_item = self.LBValeurs.takeItem(index)
185         text = removed_item.text()[1:-1] # Remove the parenthesis
186         self.LEValeur.setText(text)
187         listeVal=[]
188         indexInterdit=[]
189         for i in range(self.nbValeurs):
190             indexAOter=index*self.nbValeurs + i
191             indexInterdit.append(indexAOter)
192         if self.node.item.wait_tuple()== 1 :
193            indexInterdit=[index]
194
195         i=0
196         for valeur in self.listeValeursCourantes :
197             if not (i in indexInterdit) : 
198                 listeVal.append(valeur)
199             i = i+1
200         self.listeValeursCourantes=listeVal
201         listeValeurs=self.listeValeursCourantes
202
203