1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
27 from Extensions.i18n import tr
29 from Editeur import Objecttreeitem
30 from Noyau.N_OBJECT import ErrorObj
33 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
37 if self.item.isMCList() :
38 if self.item.ajout_possible():
39 from monMCListAjoutPanel import MonMCListAjoutPanel
40 return MonMCListAjoutPanel(self,parent=self.editor)
43 elif self.item.isMCFact() :
44 from monMCFactPanel import MonMCFactPanel
45 return MonMCFactPanel(self,parent=self.editor)
49 def createPopUpMenu(self):
50 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
52 def getPanelGroupe(self,parentQt,commande):
53 maDefinition=self.item.get_definition()
54 monObjet=self.item.object
58 if hasattr(parentQt,'niveau'): self.niveau=parentQt.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)
65 from monWidgetFact import MonWidgetFact
66 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
68 from monWidgetBloc import MonWidgetBloc
69 widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
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
79 #def doPasteMCF(self,objet_a_copier):
81 # le noeud courant est une MCList
82 # if self.item.isMCList() :
83 # child = self.append_child(objet_a_copier,pos='first',retour='oui')
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')
91 # le noeud MCFACT selectionne n'est pas dans une MCList
93 # child = self.parent.append_child(objet_a_copier,retour='oui')
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")
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).
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()
118 def updateDelegate(self):
119 if len(self._object) > 1:
120 self.setdelegate(self._object)
122 self.setdelegate(self._object.data[0])
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
128 Si la liste est plus longue on utilise le panneau MCLISTPanel.
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)
135 return compofact.FACTPanel(jdcdisplay,pane,node)
137 def IsExpandable(self):
138 if len(self._object) > 1:
139 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
141 return compofact.FACTTreeItem.IsExpandable(self)
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)
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()
155 pos=liste.index(old_obj)
158 pass # objets supprimes ignores
159 # ajout des items lies aux nouveaux objets
162 if sublist[pos] is None:
163 # nouvel objet : on cree un nouvel item
164 def setfunction(value, object=obj):
166 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
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
178 def GetIconName(self):
179 if self._object.isvalid():
180 return "ast-green-los"
181 elif self._object.isoblig():
187 """ Retourne la clef de doc de l'objet pointé par self """
188 return self.object.get_docu()
190 def iscopiable(self):
191 if len(self._object) > 1:
192 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
194 return compofact.FACTTreeItem.iscopiable(self)
198 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
200 return len(self._object) <= 1
204 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
206 return len(self._object) > 1
208 def get_copie_objet(self):
209 return self._object.data[0].copy()
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)
216 o= self.object.addentite(obj,pos)
219 def suppitem(self,item):
221 Retire un objet MCFACT de la MCList (self.object)
223 #print "compomclist.suppitem",item
225 if len(self._object) <= 1:
226 return compofact.FACTTreeItem.suppitem(self,item)
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)
234 self.appli.affiche_infos(tr('Impossible de supprimer ce mot-clef'),Qt.red)
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)
245 return MCListTreeItem(appli,labeltext,object,setfunction)