Salome HOME
nettoyage des GetPanel et affichage pler deplier selon l ancien etat
[tools/eficas.git] / InterfaceQT4 / composimp.py
index fbbf61b4de05c8c247d61186d5d50c2438757021..ca8a572a91b5ccb5a29e7494c3d023fa4f6c0642 100644 (file)
@@ -1,4 +1,22 @@
-# -*- coding: utf-8 -*-
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2013   EDF R&D
+#
+# 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.
+#
+# 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
 
@@ -10,88 +28,148 @@ import typeNode
 from Editeur import Objecttreeitem
 import browser
 from Noyau.N_CR   import justify_text
+from Accas        import SalomeEntry
     
 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):    
-    def getPanel(self):
-        """        
-        """
-        klass = None 
-        
-        # Attention l ordre des if est important        
 
-        if self.item.wait_matrice ():
-               from monMatricePanel import MonMatricePanel
-                klass=MonMatricePanel
-        # l'objet prend sa (ses) valeur(s) dans un ensemble discret de valeurs
-        elif self.item.has_into():
-            if self.item.is_list() :
-                from monPlusieursIntoPanel import MonPlusieursIntoPanel
-                klass = MonPlusieursIntoPanel
-            else:
-                from monUniqueIntoPanel import MonUniqueIntoPanel
-                klass = MonUniqueIntoPanel
-
-        # l'objet prend une ou des valeurs a priori quelconques
-        else:
-            # on attend une liste de valeurs 
-            if self.item.is_list() :
-                # on attend une liste de SD
-                if self.item.wait_tuple() :
-                    from monFonctionPanel import MonFonctionPanel
-                    klass = MonFonctionPanel
-                elif self.item.wait_assd():
-                    from monPlusieursASSDPanel import MonPlusieursASSDPanel 
-                    klass = MonPlusieursASSDPanel
-                else:
-                    # on attend une liste de valeurs de types debase (entiers, réels,...)
-                    from monPlusieursBasePanel import MonPlusieursBasePanel 
-                    klass = MonPlusieursBasePanel
-            # on n'attend qu'une seule valeur 
-            else:
-                # on attend une SD ou un objet de la classe CO (qui n'existe pas encore)
-                if self.item.wait_co():
-                    if len(self.item.get_sd_avant_du_bon_type()) != 0 :
-                       from monUniqueSDCOIntoPanel import MonUniqueSDCOIntoPanel
-                       klass = MonUniqueSDCOIntoPanel
-                    else :
-                       from monUniqueSDCOPanel import MonUniqueSDCOPanel
-                       klass = MonUniqueSDCOPanel
-
-                # on attend une SD
-                elif self.item.wait_assd():
-                    if 'R' in self.item.GetType():
-                        from monUniqueASSDPanel import MonUniqueASSDReelPanel
-                        klass = MonUniqueASSDReelPanel
-                    else :
-                        from monUniqueASSDPanel import MonUniqueASSDPanel
-                        klass = MonUniqueASSDPanel
-
-                # on attend une valeur d'un type de base (entier,reel,...)
-                else:
-                        # on attend un complexe
-                     if self.item.wait_complex():
-                        from monUniqueCompPanel import MonUniqueCompPanel
-                        klass = MonUniqueCompPanel
-                     else:
-                        # on attend un entier, un réel ou une string
-                        from monUniqueBasePanel import MonUniqueBasePanel
-                        klass = MonUniqueBasePanel
-                        
-        # cas particulier des fonctions
-        genea = self.item.get_genealogie()
-        if "VALE" in genea or "VALE_C" in genea:
-            if "DEFI_FONCTION" in genea :
-                from monFonctionPanel import MonFonctionPanel
-                klass = MonFonctionPanel
-
-        if not klass:
-            return None
-        return klass( self, self.editor )
-        
     def createPopUpMenu(self):
         typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
 
-        
+
+    def getPanelGroupe(self,parentQt,commande):
+        maDefinition=self.item.get_definition()
+        monObjet=self.item.object
+        monNom=self.item.nom
+        maCommande=commande
+
+        # label informatif 
+        if monObjet.isInformation():
+          from monWidgetInfo import MonWidgetInfo
+          widget=MonWidgetInfo(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          self.widget=widget
+          return widget
+
+
+      # Attention l ordre des if est important
+      # Attention il faut gerer les blocs et les facteurs 
+      # a gerer comme dans composimp
+      # Gestion des matrices
+        if self.item.wait_matrice ():
+         from monWidgetMatrice import MonWidgetMatrice
+          widget=MonWidgetMatrice(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          self.widget=widget
+          return widget
+
+        #print "____________________________", monNom, self.item.wait_co() 
+        #print "____________________________", monNom, self.item.wait_assd() 
+        # Gestion d'une seule valeur (eventuellement un tuple ou un complexe)
+        if maDefinition.max == 1 :
+
+        # A verifier
+          if maDefinition.into != [] and maDefinition.into != None:
+            if len(maDefinition.into) < 4 :
+              from monWidgetRadioButton import MonWidgetRadioButton
+              widget=MonWidgetRadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            elif len(maDefinition.into) < 7 :
+              from monWidget4a6RadioButton import MonWidget4a6RadioButton
+              widget=MonWidget4a6RadioButton(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :
+              from monWidgetCB import MonWidgetCB
+              widget=MonWidgetCB(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+          elif self.item.wait_bool() :
+            from monWidgetSimpBool import MonWidgetSimpBool
+            widget=MonWidgetSimpBool(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          elif self.item.wait_fichier():
+            from monWidgetSimpFichier import MonWidgetSimpFichier
+            widget=MonWidgetSimpFichier(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+          # PNPNPN - a faire
+          elif self.item.wait_date():
+            from monWidgetDate import MonWidgetDate
+            widget=MonWidgetDate(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          elif self.item.wait_heure():
+            from monWidgetHeure import MonWidgetHeure
+            widget=MonWidgetHeure(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+          elif self.item.wait_tuple() :
+            if self.item.object.definition.type[0].ntuple == 2:
+               from monWidgetSimpTuple2 import MonWidgetSimpTuple2
+               widget=MonWidgetSimpTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            elif self.item.object.definition.type[0].ntuple == 3 :
+               from monWidgetSimpTuple3 import MonWidgetSimpTuple3
+               widget=MonWidgetSimpTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :
+               print "Pas de Tuple de longueur > 3"
+               print "Prevenir la maintenance "
+
+          elif self.item.wait_complex():
+            from monWidgetSimpComplexe import MonWidgetSimpComplexe
+            widget=MonWidgetSimpComplexe(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+          elif self.item.wait_co():
+            if len(self.item.get_sd_avant_du_bon_type()) == 0 :
+               from monWidgetUniqueSDCO import MonWidgetUniqueSDCO
+               widget=MonWidgetUniqueSDCO(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :      
+               from monWidgetSDCOInto import MonWidgetSDCOInto
+               widget=MonWidgetSDCOInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          elif self.item.wait_assd():
+            if len(self.item.get_sd_avant_du_bon_type()) == 0 :
+               from monWidgetVide import MonWidgetVide
+               widget=MonWidgetVide(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            if len(self.item.get_sd_avant_du_bon_type()) < 4 :
+              from monWidgetRadioButton import MonWidgetRadioButtonSD
+              widget=MonWidgetRadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            elif len(self.item.get_sd_avant_du_bon_type()) < 7 :
+              from monWidget4a6RadioButton import MonWidget4a6RadioButtonSD
+              widget=MonWidget4a6RadioButtonSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :
+              from monWidgetCB import MonWidgetCBSD
+              widget=MonWidgetCBSD(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          
+          elif  self.item.wait_Salome() and self.editor.salome:
+          # Pas fait
+            from monWidgetSimpSalome import MonWidgetSimpSalome
+            widget=MonWidgetSimpSalome(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+          elif self.item.wait_TXM():
+            from monWidgetSimpTxt import MonWidgetSimpTxt
+            widget=MonWidgetSimpTxt(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          else :
+            from monWidgetSimpBase import MonWidgetSimpBase
+            widget=MonWidgetSimpBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+
+        # Gestion des listes
+        else :
+          #if maDefinition.into != [] and maDefinition.into != None:
+          # Attention pas fini --> on attend une liste de ASSD avec ordre
+          if self.item.wait_assd() and self.item.is_list_SansOrdreNiDoublon():
+               from monWidgetPlusieursInto import MonWidgetPlusieursInto
+               widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          elif self.item.wait_tuple() :
+            if self.item.object.definition.type[0].ntuple == 2:
+               from monWidgetPlusieursTuple2 import MonWidgetPlusieursTuple2
+               widget=MonWidgetPlusieursTuple2(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            elif self.item.object.definition.type[0].ntuple == 3 :
+               from monWidgetPlusieursTuple3 import MonWidgetPlusieursTuple3
+               widget=MonWidgetPlusieursTuple3(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :
+               print "Pas de Tuple de longueur > 3"
+               print "Prevenir la maintenance "
+          elif self.item.has_into():
+            if self.item.is_list_SansOrdreNiDoublon():
+               from monWidgetPlusieursInto import MonWidgetPlusieursInto
+               widget=MonWidgetPlusieursInto(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+            else :
+               from monWidgetPlusieursIntoOrdonne import MonWidgetPlusieursIntoOrdonne
+               widget=MonWidgetPlusieursIntoOrdonne(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+          else :
+            from monWidgetPlusieursBase import MonWidgetPlusieursBase
+            widget=MonWidgetPlusieursBase(self,maDefinition,monNom,monObjet,parentQt,maCommande)
+        self.widget=widget
+        return widget
+         
     
 class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
   itemNode=Node
@@ -118,14 +196,14 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def is_list(self):
       """
-          Cette méthode indique si le mot cle simple attend une liste (valeur de retour 1)
+          Cette methode indique si le mot cle simple attend une liste (valeur de retour 1)
           ou s'il n'en attend pas (valeur de retour 0)
 
           Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut max
+          Dans le cas sans validateur, l'information est donnee par l'attribut max
           de la definition du mot cle.
-          Dans le cas avec validateur, il faut combiner l'information précédente avec
-          celle issue de l'appel de la méthode is_list sur le validateur.On utilisera
+          Dans le cas avec validateur, il faut combiner l'information precedente avec
+          celle issue de l'appel de la methode is_list sur le validateur.On utilisera
           l'operateur ET pour effectuer cette combinaison (AndVal).
       """
       is_a_list=0
@@ -133,26 +211,29 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       assert (min <= max)
       if max > 1 :
                 is_a_list=1
-      # Dans le cas avec validateurs, pour que le mot cle soit considéré
-      # comme acceptant une liste, il faut que max soit supérieur a 1
-      # ET que la méthode is_list du validateur retourne 1. Dans les autres cas
+      # Dans le cas avec validateurs, pour que le mot cle soit considere
+      # comme acceptant une liste, il faut que max soit superieur a 1
+      # ET que la methode is_list du validateur retourne 1. Dans les autres cas
       # on retournera 0 (n'attend pas de liste)
       if self.definition.validators :
          is_a_list= self.definition.validators.is_list() * is_a_list
       return is_a_list 
 
+  def is_list_SansOrdreNiDoublon(self):
+      if self.definition.homo=="SansOrdreNiDoublon": return 1
+      return 0 
 
   def has_into(self):
       """
-          Cette méthode indique si le mot cle simple propose un choix (valeur de retour 1)
+          Cette methode indique si le mot cle simple propose un choix (valeur de retour 1)
           ou s'il n'en propose pas (valeur de retour 0)
 
           Deux cas principaux peuvent se presenter : avec validateurs ou bien sans.
-          Dans le cas sans validateur, l'information est donnée par l'attribut into
+          Dans le cas sans validateur, l'information est donnee par l'attribut into
           de la definition du mot cle.
-          Dans le cas avec validateurs, pour que le mot cle soit considéré
-          comme proposant un choix, il faut que into soit présent OU
-          que la méthode has_into du validateur retourne 1. Dans les autres cas
+          Dans le cas avec validateurs, pour que le mot cle soit considere
+          comme proposant un choix, il faut que into soit present OU
+          que la methode has_into du validateur retourne 1. Dans les autres cas
           on retournera 0 (ne propose pas de choix)
       """
       has_an_into=0
@@ -164,19 +245,19 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
 
   def GetMinMax(self):
-      """ Retourne les valeurs min et max de la définition de object """
+      """ Retourne les valeurs min et max de la definition de object """
       return self.object.get_min_max()
 
   def GetMultiplicite(self):
-      """ A préciser.
-          Retourne la multiplicité des valeurs affectées a l'objet
-          représenté par l'item. Pour le moment retourne invariablement 1.
+      """ A preciser.
+          Retourne la multiplicite des valeurs affectees a l'objet
+          represente par l'item. Pour le moment retourne invariablement 1.
       """
       return 1
 
   def GetIntervalle(self):
       """ 
-           Retourne le domaine de valeur attendu par l'objet représenté 
+           Retourne le domaine de valeur attendu par l'objet represente 
            par l'item.
       """
       return self.object.getintervalle()
@@ -230,8 +311,9 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def get_liste_param_possible(self):
       liste_param=[]
-      print self.object.jdc.params
+      l1,l2=self.jdc.get_parametres_fonctions_avant_etape(self.get_etape())
       for param in self.object.jdc.params:
+          if param.nom not in l1 : continue
           encorevalide=self.valide_item(param.valeur)
           if encorevalide:
              type_param=param.valeur.__class__.__name__
@@ -261,7 +343,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
 
   def valide_item(self,item):
       """
-        La validation est réalisée directement par l'objet
+        La validation est realisee directement par l'objet
       """
       return self.object.valide_item(item)
      
@@ -298,7 +380,7 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
   def IsInIntervalle(self,valeur):
       """ 
           Retourne 1 si la valeur est dans l'intervalle permis par
-          l'objet représenté par l'item.
+          l'objet represente par l'item.
       """
       return self.valide_item(valeur)
 
@@ -325,12 +407,13 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       return "ast-red-ball"
     else:
       return "ast-yel-ball"
+    print "invalide"
 
   def GetText(self):
     """
     Classe SIMPTreeItem
-    Retourne le texte a afficher dans l'arbre représentant la valeur de l'objet
-    pointé par self 
+    Retourne le texte a afficher dans l'arbre representant la valeur de l'objet
+    pointe par self 
     """
     text= self.object.GetText()
     if text == None : text=""
@@ -390,6 +473,14 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
       """
       return self.object.wait_co()
 
+  def wait_fichier(self):
+      maDefinition=self.object.definition
+      try : 
+        if ('Repertoire' in maDefinition.type[0]) or ('Fichier' in maDefinition.type[0]) :
+           return 1
+      except :
+           return 0
+
   def wait_geom(self):
       """
       Méthode booléenne qui retourne 1 si l'objet pointé par self
@@ -412,6 +503,24 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
           return 1
       else:
           return 0
+
+  def wait_date(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'DateHHMMAAAA' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+  def wait_heure(self):
+      """ Méthode booléenne qui retourne 1 si l'objet pointé par self
+      attend un réel, 0 sinon """
+      if 'HeureHHMMSS' in self.object.definition.type:
+          return 1
+      else:
+          return 0
+        
+        
         
   def wait_tuple(self):
       """ Méthode booléenne qui retourne 1 si l'objet pointé par self
@@ -443,6 +552,12 @@ class SIMPTreeItem(Objecttreeitem.AtomicObjectTreeItem):
             boo = 1
       return boo
 
+  def wait_Salome(self):
+      type = self.object.definition.type[0]
+      if 'grma' in repr(type) : return True
+      if 'grno' in repr(type) : return True
+      if (isinstance(type, types.ClassType) and issubclass(type, SalomeEntry)) : return True
+      return False
    
   def GetType(self):
       """