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):
35 def createPopUpMenu(self):
36 typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
38 def getPanelGroupe(self,parentQt,commande):
39 maDefinition=self.item.get_definition()
40 monObjet=self.item.object
43 #print "ds getPanelGroupe" , self.item.nom
44 #if hasattr(self,'plie'): print "self.plie", self.plie
45 # if self.item.nom == "BackgroundError" and not(self.plie): print i
47 if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
49 if not (monObjet.isMCList()) :
50 if hasattr(self,'plie') and self.plie==True :
51 from monWidgetFactPlie import MonWidgetFactPlie
52 widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
54 from monWidgetFact import MonWidgetFact
55 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
57 from monWidgetBloc import MonWidgetBloc
58 widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
62 #def doPaste(self,node_selected):
63 # objet_a_copier = self.item.get_copie_objet()
64 # child=node_selected.doPasteMCF(objet_a_copier)
65 #print "doPaste",child
68 #def doPasteMCF(self,objet_a_copier):
70 # le noeud courant est une MCList
71 # if self.item.isMCList() :
72 # child = self.append_child(objet_a_copier,pos='first',retour='oui')
74 # le noeud courant est un MCFACT
75 # elif self.item.isMCFact() :
76 # le noeud selectionne est un MCFACT dans une MCList
77 # if self.parent.item.isMCList():
78 # child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
80 # le noeud MCFACT selectionne n'est pas dans une MCList
82 # child = self.parent.append_child(objet_a_copier,retour='oui')
85 # QMessageBox.information( self, "Copie impossible",
86 # "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")
87 # self.editor.affiche_infos("Copie refusée")
91 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
92 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
93 du noyau Accas instances de la classe MCLIST.
94 Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
95 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
96 Cette classe délègue les appels de méthode et les accès
97 aux attributs à l'objet du noyau soit manuellement soit
98 automatiquement (voir classe Delegate et attribut object).
103 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
104 # on utilise directement ce mot cle facteur comme delegue
105 self.updateDelegate()
107 def updateDelegate(self):
108 if len(self._object) > 1:
109 self.setdelegate(self._object)
111 self.setdelegate(self._object.data[0])
113 def panel(self,jdcdisplay,pane,node):
114 """ Retourne une instance de l'objet panneau associe a l'item (self)
115 Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
117 Si la liste est plus longue on utilise le panneau MCLISTPanel.
119 if len(self._object) > 1:
120 return MCLISTPanel(jdcdisplay,pane,node)
121 elif isinstance(self._object.data[0],ErrorObj):
122 return compoerror.ERRORPanel(jdcdisplay,pane,node)
124 return compofact.FACTPanel(jdcdisplay,pane,node)
126 def IsExpandable(self):
127 if len(self._object) > 1:
128 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
130 return compofact.FACTTreeItem.IsExpandable(self)
132 def GetSubList(self):
133 self.updateDelegate()
134 if len(self._object) <= 1:
135 self._object.data[0].alt_parent=self._object
136 return compofact.FACTTreeItem.GetSubList(self)
138 liste=self._object.data
139 sublist=[None]*len(liste)
140 # suppression des items lies aux objets disparus
141 for item in self.sublist:
142 old_obj=item.getObject()
144 pos=liste.index(old_obj)
147 pass # objets supprimes ignores
148 # ajout des items lies aux nouveaux objets
151 if sublist[pos] is None:
152 # nouvel objet : on cree un nouvel item
153 def setfunction(value, object=obj):
155 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
157 #Attention : on ajoute une information supplementaire pour l'actualisation de
158 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
159 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
160 # informations de validite. alt_parent permet de remedier a ce defaut.
161 obj.alt_parent=self._object
167 def GetIconName(self):
168 if self._object.isvalid():
169 return "ast-green-los"
170 elif self._object.isoblig():
176 """ Retourne la clef de doc de l'objet pointé par self """
177 return self.object.get_docu()
179 def iscopiable(self):
180 if len(self._object) > 1:
181 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
183 return compofact.FACTTreeItem.iscopiable(self)
187 Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
189 return len(self._object) <= 1
193 Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
195 return len(self._object) > 1
197 def get_copie_objet(self):
198 return self._object.data[0].copy()
200 def additem(self,obj,pos):
201 #print "compomclist.additem",obj,pos
202 if len(self._object) <= 1:
203 return compofact.FACTTreeItem.additem(self,obj,pos)
205 o= self.object.addentite(obj,pos)
208 def suppitem(self,item):
210 Retire un objet MCFACT de la MCList (self.object)
212 #print "compomclist.suppitem",item
214 if len(self._object) <= 1:
215 return compofact.FACTTreeItem.suppitem(self,item)
217 if self.object.suppentite(obj):
218 if len(self._object) == 1: self.updateDelegate()
219 message = "Mot-clef " + obj.nom + " supprime"
220 #self.editor.affiche_commentaire(message)
223 return (0,tr('Impossible de supprimer ce mot-clef'))
229 def treeitem(appli,labeltext,object,setfunction):
230 """ Factory qui produit un objet treeitem adapte a un objet
231 Accas.MCList (attribut objet de ce module)
233 return MCListTreeItem(appli,labeltext,object,setfunction)