Salome HOME
linux/windows
[tools/eficas.git] / InterfaceQT4 / monFonctionPanel.py
index 4dba067e9e7c9b27b18bbd7e859c67e80f108c04..599b81db602cbd1ba241f7c4ff38420d41514846 100644 (file)
@@ -1,23 +1,22 @@
 # -*- coding: utf-8 -*-
-#            CONFIGURATION MANAGEMENT OF EDF VERSION
-# ======================================================================
-# COPYRIGHT (C) 1991 - 2002  EDF R&D                  WWW.CODE-ASTER.ORG
-# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR MODIFY
-# IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS PUBLISHED BY
-# THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE LICENSE, OR
-# (AT YOUR OPTION) ANY LATER VERSION.
+# Copyright (C) 2007-2013   EDF R&D
 #
-# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL, BUT
-# WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF
-# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU
-# GENERAL PUBLIC LICENSE FOR MORE DETAILS.
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License.
 #
-# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE
-# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO EDF R&D CODE_ASTER,
-#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
 #
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-# ======================================================================
 # Modules Python
 import string,types,os
 
@@ -27,15 +26,14 @@ from monPlusieursBasePanel import MonPlusieursBasePanel
 
 from PyQt4.QtGui  import *
 from PyQt4.QtCore import *
+from Extensions.i18n import tr
 
 # Import des panels
 
 class MonFonctionPanel(MonPlusieursBasePanel):
-  """
-  Classe définissant le panel associé aux mots-clés qui demandent
-  à l'utilisateur de choisir une seule valeur parmi une liste de valeurs
-  discrètes
-  """
+#  Classe definissant le panel associe© aux mots-cles qui demandent
+#  a l'utilisateur de choisir une seule valeur parmi une liste de valeurs
+#  discretes
   def __init__(self,node, parent = None,name = None,fl = 0):
         #print "MonFonctionPanel"
         self.node=node
@@ -43,113 +41,157 @@ class MonFonctionPanel(MonPlusieursBasePanel):
         MonPlusieursBasePanel.__init__(self,node,parent,name,fl)
 
   def SetNbValeurs(self):
+        self.nbValeurs = 1
+        if self.node.item.wait_tuple()== 1 :
+           for a in self.node.item.definition.type :
+               try :
+                   self.nbValeurs = a.ntuple
+                   break
+               except :
+                   pass
         genea=self.node.item.get_genealogie()
-        if "VALE" in genea:
-            self.nbValeurs=2
-        if "VALE_C" in genea:
-            self.nbValeurs=3
+        self.nbValeursASaisir=self.nbValeurs
+        if "VALE" in genea: self.nbValeurs=2
+        if "VALE_C" in genea: self.nbValeurs=3
 
 
   def DecoupeListeValeurs(self,liste):
         #decoupe la liste des valeurs en n ( les x puis les y)
         l_valeurs=[]
-        if (len(liste)% self.nbValeurs != 0):
-            message="La cardinalité n'est pas correcte, la dernière valeur est ignorée"
+        if ((len(liste)% self.nbValeursASaisir != 0 and (len(liste)% self.nbValeurs))):
+            message=tr("La cardinalite n'est pas correcte, la derniere valeur est ignoree")
             #self.Commentaire.setText(QString(commentaire)) 
-            self.editor.affiche_infos(commentaire)
-        for i in range(len(liste)/ self.nbValeurs) :
-            if (self.nbValeurs==2):
-              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1])
-            else:
-              t=(liste[i*self.nbValeurs], liste[i*self.nbValeurs+1], liste[i*self.nbValeurs+2])
+            self.editor.affiche_infos(message,Qt.red)
+        i=0
+        while ( i < len(liste) ) :
+            try :
+              t=tuple(liste[i:i+self.nbValeurs])
+              i=i+self.nbValeurs
+            except:
+              t=tuple(liste[i:len(liste)])
             l_valeurs.append(t)
         return l_valeurs
 
-  def BuildLBValeurs(self):
+  def BuildLBValeurs(self,listeValeurs=None):
         self.LBValeurs.clear()
-        listeValeurs=self.node.item.GetListeValeurs()
-        for valeur in self.DecoupeListeValeurs(listeValeurs):
-               if (self.nbValeurs==2):
-                    str_valeur=str(valeur[0])+","+str(valeur[1])
-               else:
-                    str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2])
-               self.LBValeurs.addItem(str_valeur)
+        if listeValeurs== None :
+           listeValeurs=self.node.item.GetListeValeurs()
+        if self.node.item.wait_tuple()== 1 :
+             listeATraiter=listeValeurs
+              for valeur in listeATraiter:
+                  str_valeur=str(valeur)
+                  self.LBValeurs.addItem(str_valeur)
+        else : 
+             for valeur in self.DecoupeListeValeurs(listeValeurs):
+                   if type(valeur) == types.TupleType:
+                       TupleEnTexte="("
+                       for val in valeur :
+                           TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+                       TupleEnTexte = TupleEnTexte[0:-2] +")"
+                       self.LBValeurs.addItem(TupleEnTexte)
+                   else :
+                       self.LBValeurs.addItem(QString(str(valeur)))
+
 
   def  Ajout1Valeur(self,liste=[]):
-        # Pour être appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+        # Pour etre appele a partir du Panel Importer (donc plusieurs fois par AjouterNValeur)
+        validite=1
         if liste == [] :
-           liste,validite=SaisieValeur.TraiteLEValeur(self)
-        else :
-           validite=1
-        if validite == 0 : return
+           if self.node.item.wait_tuple()== 1 :
+              liste=SaisieValeur.TraiteLEValeurTuple(self)
+              if liste == [''] : return
+           else :
+              liste,validite=SaisieValeur.TraiteLEValeur(self)
+              if validite == 0 : return
         if liste ==[]    : return
 
-        if len(liste) != self.nbValeurs :
+        if (self.node.item.wait_tuple()== 1 and len(liste) != self.nbValeurs):
             commentaire  = QString(str(liste)) 
-            commentaire += QString(" n est pas un tuple de "
-            commentaire += QString(str(self.nbValeurs)) 
-            commentaire += QString(" valeurs")
+            commentaire += QString(tr(" n est pas un tuple de ")
+            commentaire += QString(str(self.nbValeursASaisir)) 
+            commentaire += QString(tr(" valeurs"))
            self.LEValeur.setText(QString(str(liste)))
-            self.editor.affiche_infos(commentaire)
+            self.editor.affiche_infos(commentaire,Qt.red)
             return
 
+        if self.node.item.wait_tuple()== 1 :
+              liste2=tuple(liste)
+              liste=liste2
+
         index=self.LBValeurs.currentRow()
         if ((self.LBValeurs.isItemSelected(self.LBValeurs.item(index )) == 0) and (index > 0 )):
            index=0
         else :
            index=self.LBValeurs.currentRow() + 1
         indexListe=index*self.nbValeurs
-        if index == 0 : 
-           indexListe=len(self.listeValeursCourantes)
+        if index == 0 : indexListe=len(self.listeValeursCourantes)
+
         listeVal=[]
         for valeur in self.listeValeursCourantes :
                 listeVal.append(valeur)
-        validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
-        self.Commentaire.setText(comm2)
+        if self.node.item.wait_tuple()== 1 :
+             indexListe = index
+             validite,comm,comm2,listeRetour=self.politique.AjoutTuple(liste,index,listeVal)
+        else :
+             validite,comm,comm2,listeRetour=self.politique.AjoutValeurs(liste,index,listeVal)
+        self.Commentaire.setText(QString.fromUtf8(QString(comm2)))
         if not validite :
-                self.editor.affiche_infos(comm)
+                self.editor.affiche_infos(comm,Qt.red)
         else:
            self.LEValeur.setText(QString(""))
            l1=self.listeValeursCourantes[:indexListe]
            l3=self.listeValeursCourantes[indexListe:]
-           for valeur in  self.DecoupeListeValeurs(listeRetour) :
-               if (self.nbValeurs==2):
-                    str_valeur=str(valeur[0])+","+str(valeur[1])
-               else:
-                    str_valeur=str(valeur[0])+","+str(valeur[1])+","+str(valeur[2])
+           if self.node.item.wait_tuple()== 1 :
+             listeATraiter=listeRetour
+           else : 
+              listeATraiter=self.DecoupeListeValeurs(listeRetour)
+           for valeur in  listeATraiter :
+               if type(valeur) == types.TupleType:
+                  TupleEnTexte="("
+                  for val in valeur :
+                      TupleEnTexte = TupleEnTexte + str(self.politique.GetValeurTexte(val)) +", "
+                  str_valeur = TupleEnTexte[0:-2] +")"
+               else :
+                  str_valeur=str(valeur)
                self.LBValeurs.insertItem(index,str_valeur)
                item=self.LBValeurs.item(index)
                item.setSelected(1)
                self.LBValeurs.setCurrentItem(item)
                index=index+1
            self.listeValeursCourantes=l1+listeRetour+l3
+           self.BuildLBValeurs(self.listeValeursCourantes)
 
 
   def AjoutNValeur(self,liste) :
         if len(liste)%self.nbValeurs != 0 :
            texte="Nombre de valeur incorrecte"
            #self.Commentaire.setText(texte)
-           self.editor.affiche_infos(texte)
+           self.editor.affiche_infos(texte,Qt.red)
            return
         listeDecoupee=self.DecoupeListeValeurs(liste)
         for vals in listeDecoupee :
             self.Ajout1Valeur(vals)
            
-
   def Sup1Valeur(self):
         index=self.LBValeurs.currentRow()
         if index == None : return
-        self.LBValeurs.takeItem(index)
+        removed_item = self.LBValeurs.takeItem(index)
+        text = removed_item.text()[1:-1] # Remove the parenthesis
+        self.LEValeur.setText(text)
         listeVal=[]
+        indexInterdit=[]
+        for i in range(self.nbValeurs):
+            indexAOter=index*self.nbValeurs + i
+            indexInterdit.append(indexAOter)
+        if self.node.item.wait_tuple()== 1 :
+           indexInterdit=[index]
+
         i=0
         for valeur in self.listeValeursCourantes :
-                if self.nbValeurs == 2 :
-                   if (i != index*2 and i != index*2+1 ) : listeVal.append(valeur)
-                elif self.nbValeurs == 3 :
-                   if (i != index*3 and i != index*3+1 and i != index*3 +2) : listeVal.append(valeur)
-                else :
-                   print "aiiiiiiiiiiiiiiiiiieeee"
-                i = i+1
+            if not (i in indexInterdit) : 
+                listeVal.append(valeur)
+            i = i+1
         self.listeValeursCourantes=listeVal
         listeValeurs=self.listeValeursCourantes
 
+