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(parentQt,'niveau'): self.niveau=parentQt.niveau+1
47 if not (monObjet.isMCList()) :
48 if hasattr(self,'plie') and self.plie==True :
49 from .monWidgetFactPlie import MonWidgetFactPlie
50 widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
52 from .monWidgetFact import MonWidgetFact
53 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
55 from .monWidgetBloc import MonWidgetBloc
56 widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
61 def doPaste(self,node_selected,pos):
62 objet_a_copier = self.item.get_copie_objet()
63 # before est un effet de bord heureux sur l index
64 child=self.append_brother(objet_a_copier,'before')
65 if self.editor.fenetreCentraleAffichee : self.editor.fenetreCentraleAffichee.node.affichePanneau()
66 self.update_node_label_in_black()
71 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
72 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
73 du noyau Accas instances de la classe MCLIST.
74 Elle adapte ces objets pour leur permettre d'etre integres en tant que
75 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
76 Cette classe delegue les appels de methode et les acces
77 aux attributs a l'objet du noyau soit manuellement soit
78 automatiquement (voir classe Delegate et attribut object).
83 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
84 # on utilise directement ce mot cle facteur comme delegue
87 def updateDelegate(self):
88 if len(self._object) > 1:
89 self.setdelegate(self._object)
91 self.setdelegate(self._object.data[0])
93 def panel(self,jdcdisplay,pane,node):
94 """ Retourne une instance de l'objet panneau associe a l'item (self)
95 Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
97 Si la liste est plus longue on utilise le panneau MCLISTPanel.
99 if len(self._object) > 1:
100 return MCLISTPanel(jdcdisplay,pane,node)
101 elif isinstance(self._object.data[0],ErrorObj):
102 return compoerror.ERRORPanel(jdcdisplay,pane,node)
104 return compofact.FACTPanel(jdcdisplay,pane,node)
106 def IsExpandable(self):
107 if len(self._object) > 1:
108 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
110 return compofact.FACTTreeItem.IsExpandable(self)
112 def GetSubList(self):
113 self.updateDelegate()
114 if len(self._object) <= 1:
115 self._object.data[0].alt_parent=self._object
116 return compofact.FACTTreeItem.GetSubList(self)
118 liste=self._object.data
119 sublist=[None]*len(liste)
120 # suppression des items lies aux objets disparus
121 for item in self.sublist:
122 old_obj=item.getObject()
124 pos=liste.index(old_obj)
127 pass # objets supprimes ignores
128 # ajout des items lies aux nouveaux objets
131 if sublist[pos] is None:
132 # nouvel objet : on cree un nouvel item
133 def setfunction(value, object=obj):
135 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
137 #Attention : on ajoute une information supplementaire pour l'actualisation de
138 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
139 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
140 # informations de validite. alt_parent permet de remedier a ce defaut.
141 obj.alt_parent=self._object
147 def GetIconName(self):
148 if self._object.isvalid():
149 return "ast-green-los"
150 elif self._object.isoblig():
156 """ Retourne la clef de doc de l'objet pointe par self """
157 return self.object.get_docu()
159 def iscopiable(self):
160 if len(self._object) > 1:
161 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
163 return compofact.FACTTreeItem.iscopiable(self)
167 Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
169 return len(self._object) <= 1
173 Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
175 return len(self._object) > 1
177 def get_copie_objet(self):
178 return self._object.data[0].copy()
180 def additem(self,obj,pos):
181 #print "compomclist.additem",obj,pos
182 if len(self._object) <= 1:
183 return compofact.FACTTreeItem.additem(self,obj,pos)
185 o= self.object.addentite(obj,pos)
188 def suppitem(self,item):
190 Retire un objet MCFACT de la MCList (self.object)
192 #print "compomclist.suppitem",item
194 if len(self._object) <= 1:
195 return compofact.FACTTreeItem.suppitem(self,item)
197 if self.object.suppentite(obj):
198 if len(self._object) == 1: self.updateDelegate()
199 message = "Mot-clef " + obj.nom + " supprime"
200 #self.editor.affiche_commentaire(message)
203 return (0,tr('Impossible de supprimer ce mot-clef'))
209 def treeitem(appli,labeltext,object,setfunction):
210 """ Factory qui produit un objet treeitem adapte a un objet
211 Accas.MCList (attribut objet de ce module)
213 return MCListTreeItem(appli,labeltext,object,setfunction)