Salome HOME
gestion des listes et label sur 2
[tools/eficas.git] / Editeur / comploader.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 """
21    Module de chargement des composants et de mapping des objets du noyau
22    Accas vers les items d'EFICAS
23
24      - composants : dictionnaire de stockage des relations entre types
25        d'objet du noyau et types d'item
26      - charger_composants() : fonction de chargement des composants. Retourne
27        le dictionnaire composants.
28      - gettreeitem(object) -> type d'item : fonction qui retourne un type
29        d'item correspondant au type de l'objet noyau fourni.
30      - make_objecttreeitem(appli,labeltext, object, setfunction=None) -> item : fonction qui retourne un item
31        correspondant à l'objet noyau fourni.
32 """
33 # import généraux
34 import os,glob,types
35
36 # Dictionnaire {object : item} permettant d'associer un item à un object
37 # Ce dictionnaire est renseigné par la méthode charger_composants 
38 composants = {}
39
40 def charger_composants(Ihm="TK"):
41     """
42         Cette fonction a pour but de charger tous les modules composants graphiques
43         (fichiers compo*.py dans le même répertoire que ce module )
44         et de remplir le dictionnaire composants utilisé par make_objecttreeitem
45     """
46     reper=os.path.dirname(__file__)
47     if Ihm == "TK" :
48        repertoire=reper+"/../InterfaceTK"
49        package="InterfaceTK"
50     else :
51        repertoire=reper+"/../InterfaceQT4"
52        package="InterfaceQT4"
53        #repertoire=reper+"/../InterfaceQT"
54        #package="InterfaceQT"
55     listfich=glob.glob(os.path.join(repertoire, "compo*.py"))
56     for fichier in listfich:
57         m= os.path.basename(fichier)[:-3]
58         module=__import__(package,globals(),locals(),[m])
59         module = getattr(module, m)
60         composants[module.objet]=module.treeitem
61     return composants
62
63 def gettreeitem(object):
64     """
65       Cette fonction retourne la classe item associée à l'objet object.
66       Cette classe item dépend bien sûr de la nature de object, d'où
67       l'interrogation du dictionnaire composants
68     """
69     # Si la definition de l'objet a un attribut itemeditor, il indique 
70     # la classe a utiliser pour l'item
71     try:
72        return object.definition.itemeditor
73     except:
74        pass
75
76     # On cherche ensuite dans les composants (plugins)
77     try:
78        itemtype= composants[object.__class__]
79        return itemtype
80     except:
81        pass
82
83     # Puis une eventuelle classe heritee (aleatoire car sans ordre)
84     for e in composants.keys():
85         if e and isinstance(object,e):
86            itemtype= composants[e]
87            return itemtype
88
89     # Si on n'a rien trouve dans les composants on utilise l'objet par defaut
90     itemtype=composants[None]
91     return itemtype
92
93 def make_objecttreeitem(appli,labeltext, object, setfunction=None):
94     """
95        Cette fonction permet de construire et de retourner un objet
96        de type item associé à l'object passé en argument.
97     """
98     c = gettreeitem(object)
99     #print appli,labeltext, object, setfunction
100     return c(appli,labeltext, object, setfunction)
101