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
21 from __future__ import absolute_import
25 from . import compofact
27 from . import typeNode
28 from Extensions.i18n import tr
30 from Editeur import Objecttreeitem
31 from Noyau.N_OBJECT import ErrorObj
34 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
36 def createPopUpMenu(self):
37 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
39 def getPanelGroupe(self,parentQt,commande):
40 maDefinition=self.item.get_definition()
41 monObjet=self.item.object
44 #print "ds getPanelGroupe" , self.item.nom
45 #if hasattr(self,'plie'): print "self.plie", self.plie
46 # if self.item.nom == "BackgroundError" and not(self.plie): print i
48 if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
50 if not (monObjet.isMCList()) :
51 if hasattr(self,'plie') and self.plie==True :
52 from .monWidgetFactPlie import MonWidgetFactPlie
53 widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
55 from .monWidgetFact import MonWidgetFact
56 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
58 from .monWidgetBloc import MonWidgetBloc
59 widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
63 #def doPaste(self,node_selected):
64 # objet_a_copier = self.item.get_copie_objet()
65 # child=node_selected.doPasteMCF(objet_a_copier)
66 #print "doPaste",child
69 #def doPasteMCF(self,objet_a_copier):
71 # le noeud courant est une MCList
72 # if self.item.isMCList() :
73 # child = self.append_child(objet_a_copier,pos='first',retour='oui')
75 # le noeud courant est un MCFACT
76 # elif self.item.isMCFact() :
77 # le noeud selectionne est un MCFACT dans une MCList
78 # if self.parent.item.isMCList():
79 # child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
81 # le noeud MCFACT selectionne n'est pas dans une MCList
83 # child = self.parent.append_child(objet_a_copier,retour='oui')
86 # QMessageBox.information( self, "Copie impossible",
87 # "Vous ne pouvez coller le mot-cle facteur copie a ce niveau de l'arborescence !")
88 # self.editor.affiche_infos("Copie refusee")
92 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
93 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
94 du noyau Accas instances de la classe MCLIST.
95 Elle adapte ces objets pour leur permettre d'etre integres en tant que
96 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
97 Cette classe delegue les appels de methode et les acces
98 aux attributs a l'objet du noyau soit manuellement soit
99 automatiquement (voir classe Delegate et attribut object).
104 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
105 # on utilise directement ce mot cle facteur comme delegue
106 self.updateDelegate()
108 def updateDelegate(self):
109 if len(self._object) > 1:
110 self.setdelegate(self._object)
112 self.setdelegate(self._object.data[0])
114 def panel(self,jdcdisplay,pane,node):
115 """ Retourne une instance de l'objet panneau associe a l'item (self)
116 Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
118 Si la liste est plus longue on utilise le panneau MCLISTPanel.
120 if len(self._object) > 1:
121 return MCLISTPanel(jdcdisplay,pane,node)
122 elif isinstance(self._object.data[0],ErrorObj):
123 return compoerror.ERRORPanel(jdcdisplay,pane,node)
125 return compofact.FACTPanel(jdcdisplay,pane,node)
127 def IsExpandable(self):
128 if len(self._object) > 1:
129 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
131 return compofact.FACTTreeItem.IsExpandable(self)
133 def GetSubList(self):
134 self.updateDelegate()
135 if len(self._object) <= 1:
136 self._object.data[0].alt_parent=self._object
137 return compofact.FACTTreeItem.GetSubList(self)
139 liste=self._object.data
140 sublist=[None]*len(liste)
141 # suppression des items lies aux objets disparus
142 for item in self.sublist:
143 old_obj=item.getObject()
145 pos=liste.index(old_obj)
148 pass # objets supprimes ignores
149 # ajout des items lies aux nouveaux objets
152 if sublist[pos] is None:
153 # nouvel objet : on cree un nouvel item
154 def setfunction(value, object=obj):
156 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
158 #Attention : on ajoute une information supplementaire pour l'actualisation de
159 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
160 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
161 # informations de validite. alt_parent permet de remedier a ce defaut.
162 obj.alt_parent=self._object
168 def GetIconName(self):
169 if self._object.isvalid():
170 return "ast-green-los"
171 elif self._object.isoblig():
177 """ Retourne la clef de doc de l'objet pointe par self """
178 return self.object.get_docu()
180 def iscopiable(self):
181 if len(self._object) > 1:
182 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
184 return compofact.FACTTreeItem.iscopiable(self)
188 Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
190 return len(self._object) <= 1
194 Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
196 return len(self._object) > 1
198 def get_copie_objet(self):
199 return self._object.data[0].copy()
201 def additem(self,obj,pos):
202 #print "compomclist.additem",obj,pos
203 if len(self._object) <= 1:
204 return compofact.FACTTreeItem.additem(self,obj,pos)
206 o= self.object.addentite(obj,pos)
209 def suppitem(self,item):
211 Retire un objet MCFACT de la MCList (self.object)
213 #print "compomclist.suppitem",item
215 if len(self._object) <= 1:
216 return compofact.FACTTreeItem.suppitem(self,item)
218 if self.object.suppentite(obj):
219 if len(self._object) == 1: self.updateDelegate()
220 message = "Mot-clef " + obj.nom + " supprime"
221 #self.editor.affiche_commentaire(message)
224 return (0,tr('Impossible de supprimer ce mot-clef'))
230 def treeitem(appli,labeltext,object,setfunction):
231 """ Factory qui produit un objet treeitem adapte a un objet
232 Accas.MCList (attribut objet de ce module)
234 return MCListTreeItem(appli,labeltext,object,setfunction)