1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2017 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,insertIn=-1):
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,insertIn)
52 from .monWidgetFact import MonWidgetFact
53 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande,insertIn)
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.appendBrother(objet_a_copier,'before')
65 if self.editor.fenetreCentraleAffichee : self.editor.fenetreCentraleAffichee.node.affichePanneau()
66 self.update_node_label_in_black()
67 self.parent().build_children()
72 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
73 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
74 du noyau Accas instances de la classe MCLIST.
75 Elle adapte ces objets pour leur permettre d'etre integres en tant que
76 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
77 Cette classe delegue les appels de methode et les acces
78 aux attributs a l'objet du noyau soit manuellement soit
79 automatiquement (voir classe Delegate et attribut object).
84 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
85 # on utilise directement ce mot cle facteur comme delegue
88 def updateDelegate(self):
89 if len(self._object) > 1:
90 self.setdelegate(self._object)
92 self.setdelegate(self._object.data[0])
94 def panel(self,jdcdisplay,pane,node):
95 """ Retourne une instance de l'objet panneau associe a l'item (self)
96 Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
98 Si la liste est plus longue on utilise le panneau MCLISTPanel.
100 if len(self._object) > 1:
101 return MCLISTPanel(jdcdisplay,pane,node)
102 elif isinstance(self._object.data[0],ErrorObj):
103 return compoerror.ERRORPanel(jdcdisplay,pane,node)
105 return compofact.FACTPanel(jdcdisplay,pane,node)
107 def IsExpandable(self):
108 if len(self._object) > 1:
109 return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
111 return compofact.FACTTreeItem.IsExpandable(self)
113 def GetSubList(self):
114 self.updateDelegate()
115 if len(self._object) <= 1:
116 self._object.data[0].alt_parent=self._object
117 return compofact.FACTTreeItem.GetSubList(self)
119 liste=self._object.data
120 sublist=[None]*len(liste)
121 # suppression des items lies aux objets disparus
122 for item in self.sublist:
123 old_obj=item.getObject()
125 pos=liste.index(old_obj)
128 pass # objets supprimes ignores
129 # ajout des items lies aux nouveaux objets
132 if sublist[pos] is None:
133 # nouvel objet : on cree un nouvel item
134 def setfunction(value, object=obj):
136 item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
138 #Attention : on ajoute une information supplementaire pour l'actualisation de
139 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
140 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
141 # informations de validite. alt_parent permet de remedier a ce defaut.
142 obj.alt_parent=self._object
148 def GetIconName(self):
149 if self._object.isvalid():
150 return "ast-green-los"
151 elif self._object.isoblig():
157 """ Retourne la clef de doc de l'objet pointe par self """
158 return self.object.get_docu()
160 def iscopiable(self):
161 if len(self._object) > 1:
162 return Objecttreeitem.SequenceTreeItem.iscopiable(self)
164 return compofact.FACTTreeItem.iscopiable(self)
168 Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
170 return len(self._object) <= 1
174 Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
176 return len(self._object) > 1
178 def get_copie_objet(self):
179 return self._object.data[0].copy()
181 def additem(self,obj,pos):
182 #print "compomclist.additem",obj,pos
183 if len(self._object) <= 1:
184 return compofact.FACTTreeItem.additem(self,obj,pos)
186 o= self.object.addentite(obj,pos)
189 def suppitem(self,item):
191 Retire un objet MCFACT de la MCList (self.object)
193 #print "compomclist.suppitem",item
195 if len(self._object) <= 1:
196 return compofact.FACTTreeItem.suppitem(self,item)
198 if self.object.suppentite(obj):
199 if len(self._object) == 1: self.updateDelegate()
200 message = "Mot-clef " + obj.nom + " supprime"
201 #self.editor.affiche_commentaire(message)
204 return (0,tr('Impossible de supprimer ce mot-clef'))
210 def treeitem(appli,labeltext,object,setfunction):
211 """ Factory qui produit un objet treeitem adapte a un objet
212 Accas.MCList (attribut objet de ce module)
214 return MCListTreeItem(appli,labeltext,object,setfunction)