1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021 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 if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
46 # attention si l objet est une mclist on utilise bloc
47 if not (monObjet.isMCList()) :
48 if hasattr(self,'plie') and self.plie==True :
49 from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
50 widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
51 elif self.editor.maConfiguration.afficheFirstPlies and self.firstAffiche:
52 self.firstAffiche = False
54 from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
55 widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
57 from InterfaceQT4.monWidgetFact import MonWidgetFact
58 widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
60 from InterfaceQT4.monWidgetBloc import MonWidgetBloc
61 widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
66 def doPaste(self,node_selected,pos):
67 objet_a_copier = self.item.getCopieObjet()
68 # before est un effet de bord heureux sur l index
69 child=self.appendBrother(objet_a_copier,'before')
70 if self.editor.fenetreCentraleAffichee : self.editor.fenetreCentraleAffichee.node.affichePanneau()
71 self.update_NodeLabelInBlack()
72 self.parent().buildChildren()
77 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
78 """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
79 du noyau Accas instances de la classe MCLIST.
80 Elle adapte ces objets pour leur permettre d'etre integres en tant que
81 noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
82 Cette classe delegue les appels de methode et les acces
83 aux attributs a l'objet du noyau soit manuellement soit
84 automatiquement (voir classe Delegate et attribut object).
89 # Si l'objet Accas (MCList) a moins d'un mot cle facteur
90 # on utilise directement ce mot cle facteur comme delegue
93 def updateDelegate(self):
94 if len(self._object) > 1:
95 self.setDelegate(self._object)
97 self.setDelegate(self._object.data[0])
99 def panel(self,jdcdisplay,pane,node):
100 """ Retourne une instance de l'objet panneau associe a l'item (self)
101 Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
103 Si la liste est plus longue on utilise le panneau MCLISTPanel.
105 if len(self._object) > 1:
106 return MCLISTPanel(jdcdisplay,pane,node)
107 elif isinstance(self._object.data[0],ErrorObj):
108 return compoerror.ERRORPanel(jdcdisplay,pane,node)
110 return compofact.FACTPanel(jdcdisplay,pane,node)
112 def isExpandable(self):
113 if len(self._object) > 1:
114 return Objecttreeitem.SequenceTreeItem.isExpandable(self)
116 return compofact.FACTTreeItem.isExpandable(self)
118 def getSubList(self):
119 self.updateDelegate()
120 if len(self._object) <= 1:
121 self._object.data[0].alt_parent=self._object
122 return compofact.FACTTreeItem.getSubList(self)
124 liste=self._object.data
125 sublist=[None]*len(liste)
126 # suppression des items lies aux objets disparus
127 for item in self.sublist:
128 old_obj=item.getObject()
130 pos=liste.index(old_obj)
133 pass # objets supprimes ignores
134 # ajout des items lies aux nouveaux objets
137 if sublist[pos] is None:
138 # nouvel objet : on cree un nouvel item
139 def setFunction(value, object=obj):
141 item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
143 #Attention : on ajoute une information supplementaire pour l'actualisation de
144 # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
145 # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
146 # informations de validite. alt_parent permet de remedier a ce defaut.
147 obj.alt_parent=self._object
153 def getIconName(self):
154 if self._object.isValid():
155 return "ast-green-los"
156 elif self._object.isOblig():
162 """ Retourne la clef de doc de l'objet pointe par self """
163 return self.object.getDocu()
165 def isCopiable(self):
166 if len(self._object) > 1:
167 return Objecttreeitem.SequenceTreeItem.isCopiable(self)
169 return compofact.FACTTreeItem.isCopiable(self)
173 Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
175 return len(self._object) <= 1
179 Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
181 return len(self._object) > 1
183 def getCopieObjet(self):
184 return self._object.data[0].copy()
186 def addItem(self,obj,pos):
187 #print "compomclist.addItem",obj,pos
188 if len(self._object) <= 1:
189 return compofact.FACTTreeItem.addItem(self,obj,pos)
191 o= self.object.addEntite(obj,pos)
194 def suppItem(self,item):
196 Retire un objet MCFACT de la MCList (self.object)
198 #print "compomclist.suppItem",item
200 if len(self._object) <= 1:
201 return compofact.FACTTreeItem.suppItem(self,item)
203 if self.object.suppEntite(obj):
204 if len(self._object) == 1: self.updateDelegate()
205 message = "Mot-clef " + obj.nom + " supprime"
208 return (0,tr('Impossible de supprimer ce mot-clef'))
214 def treeitem(appliEficas,labeltext,object,setFunction):
215 """ Factory qui produit un objet treeitem adapte a un objet
216 Accas.MCList (attribut objet de ce module)
218 return MCListTreeItem(appliEficas,labeltext,object,setFunction)