]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceTK/compomclist.py
Salome HOME
Modif V6_4_°
[tools/eficas.git] / InterfaceTK / compomclist.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 import types
22 from Tkinter import *
23 import Pmw
24
25 from Noyau.N_OBJECT import ErrorObj
26 from Editeur import Objecttreeitem
27 import panels
28 import traceback
29
30 class MCLISTPanel(panels.Panel):
31     def init(self):
32         test_ajout = self.node.item.ajout_possible()
33         nom_mcfact = self.node.item.get_nom()
34         if test_ajout:
35             texte = "Pour ajouter une autre occurrence du mot-clé facteur %s, cliquez ci-dessous" %nom_mcfact
36         else:
37             texte = "Vous ne pouvez pas ajouter une autre occurrence du mot-clé facteur %s ?" %nom_mcfact
38         self.label = Label(self,text = texte)
39         self.label.place(relx=0.5,rely=0.4,anchor='center')
40         if test_ajout:
41             self.but=Button(self,text="AJOUTER",command=self.ajout_occurrence)
42             self.but.place(relx=0.5,rely=0.6,anchor='center')
43             #Button(self,text="NON",command=None).place(relx=0.6,rely=0.6,anchor='center')
44
45     def ajout_occurrence(self,event=None):
46         self.node.parent.append_child(self.node.item.get_nom())
47
48 import compofact
49 import compoerror
50 import treewidget
51
52 class Node(treewidget.Node):
53     def doPaste(self,node_selected):
54         objet_a_copier = self.item.get_copie_objet()
55         child=node_selected.doPaste_MCF(objet_a_copier)
56         #print "doPaste",child
57         return child
58
59     def doPaste_MCF(self,objet_a_copier):
60         if self.item.isMCList() :
61           # le noeud courant est une MCList
62           child = self.append_child(objet_a_copier,pos='first',retour='oui')
63           #child = self.parent.append_child(objet_a_copier,pos='first',retour='oui')
64         elif self.item.isMCFact() :
65           # le noeud courant est un MCFACT
66           if self.parent.item.isMCList():
67              # le noeud selectionne est un MCFACT dans une MCList
68              child = self.parent.append_child(objet_a_copier,
69                                               pos=self.item,
70                                               retour='oui')
71           else:
72              # le noeud MCFACT selectionne n'est pas dans une MCList
73              child = self.parent.append_child(objet_a_copier,retour='oui')
74         else:
75           showinfo("Copie impossible",
76                    "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
77           self.appli.affiche_infos("Copie refusée")
78           child=None
79         #print "doPaste_MCF",child
80         return child
81
82 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
83     """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
84         du noyau Accas instances de la classe MCLIST.
85         Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
86         noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
87         Cette classe délègue les appels de méthode et les accès
88         aux attributs à l'objet du noyau soit manuellement soit 
89         automatiquement (voir classe Delegate et attribut object).
90     """
91     itemNode=Node
92
93     def init(self):
94         # Si l'objet Accas (MCList) a moins d'un mot cle facteur
95         # on utilise directement ce mot cle facteur comme delegue
96         self.updateDelegate()
97
98     def updateDelegate(self):
99         if len(self._object) > 1:
100            self.setdelegate(self._object)
101         else:
102            self.setdelegate(self._object.data[0])
103
104     def panel(self,jdcdisplay,pane,node):
105         """ Retourne une instance de l'objet panneau associe a l'item (self)
106             Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
107             FACTPanel.
108             Si la liste est plus longue on utilise le panneau MCLISTPanel.
109         """
110         if len(self._object) > 1:
111            return MCLISTPanel(jdcdisplay,pane,node)
112         elif isinstance(self._object.data[0],ErrorObj):
113            return compoerror.ERRORPanel(jdcdisplay,pane,node)
114         else:
115            return compofact.FACTPanel(jdcdisplay,pane,node)
116
117     def IsExpandable(self):
118         if len(self._object) > 1:
119            return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
120         else:
121            return compofact.FACTTreeItem.IsExpandable(self)
122
123     def GetSubList(self):
124         self.updateDelegate()
125         if len(self._object) <= 1:
126            self._object.data[0].alt_parent=self._object
127            return compofact.FACTTreeItem.GetSubList(self)
128
129         liste=self._object.data
130         sublist=[None]*len(liste)
131         # suppression des items lies aux objets disparus
132         for item in self.sublist:
133            old_obj=item.getObject()
134            if old_obj in liste:
135               pos=liste.index(old_obj)
136               sublist[pos]=item
137            else:
138               pass # objets supprimes ignores
139         # ajout des items lies aux nouveaux objets
140         pos=0
141         for obj in liste:
142            if sublist[pos] is None:
143               # nouvel objet : on cree un nouvel item
144               def setfunction(value, object=obj):
145                   object=value
146               item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
147               sublist[pos]=item
148               #Attention : on ajoute une information supplementaire pour l'actualisation de 
149               # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
150               # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
151               # informations de validite. alt_parent permet de remedier a ce defaut.
152               obj.alt_parent=self._object
153            pos=pos+1
154
155         self.sublist=sublist
156         return self.sublist
157
158     def GetIconName(self):
159         if self._object.isvalid():
160             return "ast-green-los"
161         elif self._object.isoblig():
162             return "ast-red-los"
163         else:
164             return "ast-yel-los"
165
166     def get_docu(self):
167         """ Retourne la clé de doc de l'objet pointé par self """
168         return self.object.get_docu()    
169
170     def iscopiable(self):
171         if len(self._object) > 1:
172            return Objecttreeitem.SequenceTreeItem.iscopiable(self)
173         else:
174            return compofact.FACTTreeItem.iscopiable(self)
175
176     def isMCFact(self):
177         """
178         Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
179         """
180         return len(self._object) <= 1
181
182     def isMCList(self):
183         """
184         Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
185         """
186         return len(self._object) > 1
187         
188     def get_copie_objet(self):
189         return self._object.data[0].copy()
190
191     def additem(self,obj,pos):
192         #print "compomclist.additem",obj,pos
193         if len(self._object) <= 1:
194            return compofact.FACTTreeItem.additem(self,obj,pos)
195
196         o= self.object.addentite(obj,pos)
197         return o
198
199     def suppitem(self,item):
200         """
201         Retire un objet MCFACT de la MCList (self.object) 
202         """
203         #print "compomclist.suppitem",item
204         obj=item.getObject()
205         if len(self._object) <= 1:
206            return compofact.FACTTreeItem.suppitem(self,item)
207
208         if self.object.suppentite(obj):
209            if len(self._object) == 1: self.updateDelegate()
210            message = "Mot-clef " + obj.nom + " supprime"
211            self.appli.affiche_infos(message)
212            return 1
213         else:
214            self.appli.affiche_infos('Impossible de supprimer ce mot-clé')
215            return 0
216
217             
218 import Accas
219 objet = Accas.MCList    
220
221 def treeitem(appli,labeltext,object,setfunction):
222   """ Factory qui produit un objet treeitem adapte a un objet 
223       Accas.MCList (attribut objet de ce module)
224   """
225   return MCListTreeItem(appli,labeltext,object,setfunction)