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