]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/monPlusieursBasePanel.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceQT4 / monPlusieursBasePanel.py
1 # -*- coding: utf-8 -*-
2 #            CONFIGURATION MANAGEMENT OF EDF VERSION
3 # ======================================================================
4 # COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
5 # THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
6 # IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
7 # THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
8 # (AT YOUR OPTION) ANY LATER VERSION.
9 #
10 # THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
11 # WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
12 # MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
13 # GENERAL PUBLIC LICENSE FOR MORE DETAILS.
14 #
15 # YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
16 # ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
17 #    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
18 #
19 #
20 # ======================================================================
21 # Modules Python
22 import string,types,os
23
24 # Modules Eficas
25 from PyQt4.QtGui import *
26 from PyQt4.QtCore import *
27
28 from desPlusieursBase import Ui_DPlusBase
29 from qtCommun      import QTPanel
30 from qtSaisie      import SaisieValeur
31 from politiquesValidation import PolitiquePlusieurs
32
33 class DPlusBase (Ui_DPlusBase,QDialog):
34    def __init__(self,parent ,modal ) :
35        QDialog.__init__(self,parent)
36        if hasattr(parent,"leLayout"):
37           parent.leLayout.removeWidget(parent.leLayout.widgetActive)
38           parent.leLayout.widgetActive.close()
39           parent.leLayout.addWidget(self)
40           parent.leLayout.widgetActive=self
41        else:
42           parent.partieDroite=QWidget()
43           parent.leLayout=QGridLayout(parent.partieDroite)
44           parent.leLayout.addWidget(self)
45           parent.addWidget(parent.partieDroite)
46           parent.leLayout.widgetActive=self
47        self.setupUi(self)
48        self.appliEficas=parent.appliEficas
49        self.RepIcon=parent.appliEficas.RepIcon
50        icon = QIcon(self.RepIcon+"/arrow_left.png")
51        self.BAjout1Val.setIcon(icon)
52        icon2 = QIcon(self.RepIcon+"/arrow_right.png")
53        self.BSup1Val.setIcon(icon2)
54
55 # Import des panels
56
57 class MonPlusieursBasePanel(DPlusBase,QTPanel,SaisieValeur):
58   """
59   Classe définissant le panel associé aux mots-clés qui demandent
60   à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
61   discrètes
62   """
63   def __init__(self,node, parent = None,name = None,fl = 0):
64         #print "MonPlusieursBasePanel"
65         QTPanel.__init__(self,node,parent)
66         DPlusBase.__init__(self,parent,fl)
67         self.politique=PolitiquePlusieurs(node,parent)
68         self.BuildLBValeurs()
69         self.listeValeursCourantes=self.node.item.GetListeValeurs()
70         self.InitCommentaire()
71         self.detruitBouton()
72         self.connecterSignaux()
73
74   def connecterSignaux(self) :
75         self.connect(self.bOk,SIGNAL("clicked()"),self.BOkPourListePressed)
76         self.connect(self.bParam,SIGNAL("clicked()"),self.BParametresPressed)
77         self.connect(self.bImport,SIGNAL("clicked()"),self.BImportPressed)
78         self.connect(self.BAjout1Val,SIGNAL("clicked()"),self.Ajout1Valeur)
79         self.connect(self.BSup1Val,SIGNAL("clicked()"),self.Sup1Valeur)
80         self.connect(self.LEValeur,SIGNAL("returnPressed()"),self.LEValeurPressed)
81         self.connect(self.BSalome,SIGNAL("clicked()"),self.BSalomePressed)
82         self.connect(self.BView2D,SIGNAL("clicked()"),self.BView2DPressed)
83
84
85   def detruitBouton(self):
86         icon3 = QIcon(self.RepIcon+"/image240.png")
87         self.BSalome.setIcon(icon3)
88         mc = self.node.item.get_definition()
89         type = mc.type[0]
90         if not(('grma' in repr(type)) or ('grno' in repr(type))) or not(self.editor.salome) :
91            self.BSalome.close()
92            self.BView2D.close()
93
94
95   def BuildLBValeurs(self):
96        # redefinit en raison de l heritage par monFonctionPanel
97         SaisieValeur.BuildLBValeurs(self)
98
99   def BOkPourListePressed(self):
100         self.editor.init_modif()
101         if self.listeValeursCourantes == [] :
102            self.editor.affiche_infos("Aucune Valeur",Qt.red)
103            return
104         self.node.item.set_valeur(self.listeValeursCourantes)
105         self.editor.affiche_infos("Valeur Acceptée")
106
107
108   def BParametresPressed(self):
109         QTPanel.BParametresPressed(self)
110
111   def LEValeurPressed(self):
112         self.Ajout1Valeur()
113
114   def Sup1Valeur(self):
115         index=self.LBValeurs.currentRow()
116         if index < 0 : return
117         if self.LBValeurs.isItemSelected(self.LBValeurs.item(index)) == 0 : return
118         self.LEValeur.setText(self.LBValeurs.item(index).text())
119         self.LBValeurs.takeItem(index)
120         listeVal=[]
121         i=0
122         for valeur in self.listeValeursCourantes :
123                 if i != index : listeVal.append(valeur)
124                 i = i+1
125         self.LBValeurs.setCurrentItem(self.LBValeurs.item(index -1))
126         self.listeValeursCourantes=listeVal
127           
128
129   def Ajout1Valeur(self,valeur=None):
130         if valeur == None :
131            valeur=str(self.LEValeur.text())
132
133         liste,validite=SaisieValeur.TraiteLEValeur(self,valeur)
134         if validite == 0 : return
135         if liste ==[]    : return
136
137         indexCourant=self.LBValeurs.currentRow()
138         if ( (self.LBValeurs.isItemSelected(self.LBValeurs.item(indexCourant )) == 0) 
139            and (indexCourant > 0 )):
140            index=0
141         else :
142            index=self.LBValeurs.currentRow() + 1
143
144         listeVal=[]
145         for valeur in self.listeValeursCourantes :
146                 listeVal.append(valeur)
147         validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal) 
148         self.Commentaire.setText(comm2)
149         if not validite :
150                 self.editor.affiche_infos(comm,Qt.red)
151         else:
152            self.LEValeur.setText(QString(""))
153            l1=self.listeValeursCourantes[:index]
154            l3=self.listeValeursCourantes[index:]
155            for valeur in listeRetour:
156                val=self.politique.GetValeurTexte(valeur)
157                self.LBValeurs.insertItem(index,QString(str(val)))
158                item=self.LBValeurs.item(index)
159                item.setSelected(1)
160                self.LBValeurs.setCurrentItem(item)
161                index=index+1
162            self.listeValeursCourantes=l1+listeRetour+l3
163            self.editor.affiche_infos("Valeurs Ajoutées")
164
165   def AjoutNValeur(self,liste) :
166       for val in liste :
167         self.Ajout1Valeur(val)
168
169   def BImportPressed(self):
170         init=QString( self.editor.CONFIGURATION.savedir)
171         fn = QFileDialog.getOpenFileName(self.node.appliEficas, 
172                                          #self.node.appliEficas.trUtf8('Fichier de données'), 
173                                         QApplication.translate('Eficas','Fichier de donnees',None, QApplication.UnicodeUTF8),
174                                          init,
175                                          self.trUtf8('All Files (*)',))
176         if fn == None : return
177         if fn == "" : return
178         ulfile = os.path.abspath(unicode(fn))
179         self.editor.CONFIGURATION.savedir=os.path.split(ulfile)[0]
180
181         from monSelectVal import MonSelectVal
182         MonSelectVal(file=fn,parent=self).show()
183
184   def InitCommentaire(self):
185         commentaire=""
186         mc = self.node.item.get_definition()
187         d_aides = { 'TXM' : 'chaînes de caractères',
188                   'R'   : 'réels',
189                   'I'   : 'entiers',
190                   'C'   : 'complexes'}
191         type = mc.type[0]
192         if not d_aides.has_key(type) :
193            if mc.min == mc.max:
194                commentaire="Entrez "+str(mc.min)+" valeurs "
195            else :
196                commentaire="Entrez entre "+str(mc.min)+" et "+str(mc.max)+" valeurs "
197         else :
198            if mc.min == mc.max:
199                commentaire="Entrez "+str(mc.min)+" "+d_aides[type]
200            else :
201                commentaire="Entrez entre "+str(mc.min)+" et  "+str(mc.max) +" " + d_aides[type]
202         aideval=self.node.item.aide()
203         commentaire=commentaire + "\n" + QString.toUtf8(QString(aideval))
204         self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
205
206   def BSalomePressed(self):
207
208         self.LEValeur.setText(QString(""))
209         self.Commentaire.setText(QString(""))
210         genea=self.node.item.get_genealogie()
211         kwType = None
212         for e in genea:
213             if "GROUP_NO" in e: kwType = "GROUP_NO"
214             if "GROUP_MA" in e: kwType = "GROUP_MA"
215
216         #print "BkwType",kwType
217         selection, commentaire = self.appliEficas.selectGroupFromSalome(kwType,editor=self.editor)
218         if commentaire !="" :
219             self.Commentaire.setText(QString.fromUtf8(QString(commentaire)))
220         monTexte=""
221         if selection == [] : return
222         for geomElt in selection: 
223             monTexte=geomElt+","
224         monTexte= monTexte[0:-1]
225         self.LEValeur.setText(QString(monTexte))
226
227   def BView2DPressed(self):
228         valeur=self.LEValeur.text()
229         if valeur == QString("") :
230            if self.LBValeurs.currentItem() != None :
231               valeur=self.LBValeurs.currentItem().text()
232         if valeur == QString("") : return
233         valeur = str(valeur)
234         if valeur :
235            ok, msgError = self.appliEficas.displayShape(valeur)
236            if not ok:
237               self.editor.affiche_infos(msgError,Qt.red)
238