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