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