Salome HOME
chgt Copyrigth
[tools/eficas.git] / InterfaceQT4 / compomclist.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2021   EDF R&D
3 #
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.
8 #
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.
13 #
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
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 from __future__ import absolute_import
22 import types
23 import traceback
24
25 from . import compofact
26 from . import browser
27 from . import typeNode
28 from Extensions.i18n import tr
29
30 from Editeur     import Objecttreeitem
31 from Noyau.N_OBJECT import ErrorObj
32
33
34 class Node(browser.JDCNode,typeNode.PopUpMenuNodeMinimal):
35
36     def createPopUpMenu(self):
37         typeNode.PopUpMenuNodeMinimal.createPopUpMenu(self)
38
39     def getPanelGroupe(self,parentQt,commande):
40         maDefinition=self.item.get_definition()
41         monObjet=self.item.object
42         monNom=self.item.nom
43         maCommande=commande
44         if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
45         else : self.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
53                self.setPlie()
54                from InterfaceQT4.monWidgetFactPlie import MonWidgetFactPlie
55                widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
56            else:
57                from InterfaceQT4.monWidgetFact import MonWidgetFact
58                widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
59         else :
60            from InterfaceQT4.monWidgetBloc import MonWidgetBloc
61            widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
62         return widget
63
64
65
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()
73         return child
74
75
76
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).
85     """
86     itemNode=Node
87
88     def init(self):
89         # Si l'objet Accas (MCList) a moins d'un mot cle facteur
90         # on utilise directement ce mot cle facteur comme delegue
91         self.updateDelegate()
92
93     def updateDelegate(self):
94         if len(self._object) > 1:
95            self.setDelegate(self._object)
96         else:
97            self.setDelegate(self._object.data[0])
98
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
102             FACTPanel.
103             Si la liste est plus longue on utilise le panneau MCLISTPanel.
104         """
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)
109         else:
110            return compofact.FACTPanel(jdcdisplay,pane,node)
111
112     def isExpandable(self):
113         if len(self._object) > 1:
114            return Objecttreeitem.SequenceTreeItem.isExpandable(self)
115         else:
116            return compofact.FACTTreeItem.isExpandable(self)
117
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)
123
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()
129            if old_obj in liste:
130               pos=liste.index(old_obj)
131               sublist[pos]=item
132            else:
133               pass # objets supprimes ignores
134         # ajout des items lies aux nouveaux objets
135         pos=0
136         for obj in liste:
137            if sublist[pos] is None:
138               # nouvel objet : on cree un nouvel item
139               def setFunction(value, object=obj):
140                   object=value
141               item = self.makeObjecttreeitem(self.appliEficas, obj.nom + " : ", obj, setFunction)
142               sublist[pos]=item
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
148            pos=pos+1
149
150         self.sublist=sublist
151         return self.sublist
152
153     def getIconName(self):
154         if self._object.isValid():
155             return "ast-green-los"
156         elif self._object.isOblig():
157             return "ast-red-los"
158         else:
159             return "ast-yel-los"
160
161     def getDocu(self):
162         """ Retourne la clef de doc de l'objet pointe par self """
163         return self.object.getDocu()    
164
165     def isCopiable(self):
166         if len(self._object) > 1:
167            return Objecttreeitem.SequenceTreeItem.isCopiable(self)
168         else:
169            return compofact.FACTTreeItem.isCopiable(self)
170
171     def isMCFact(self):
172         """
173         Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
174         """
175         return len(self._object) <= 1
176
177     def isMCList(self):
178         """
179         Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
180         """
181         return len(self._object) > 1
182         
183     def getCopieObjet(self):
184         return self._object.data[0].copy()
185
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)
190
191         o= self.object.addEntite(obj,pos)
192         return o
193
194     def suppItem(self,item):
195         """
196         Retire un objet MCFACT de la MCList (self.object) 
197         """
198         #print "compomclist.suppItem",item
199         obj=item.getObject()
200         if len(self._object) <= 1:
201            return compofact.FACTTreeItem.suppItem(self,item)
202
203         if self.object.suppEntite(obj):
204            if len(self._object) == 1: self.updateDelegate()     
205            message = "Mot-clef " + obj.nom + " supprime"
206            return (1,message)
207         else:
208            return (0,tr('Impossible de supprimer ce mot-clef'))
209
210             
211 import Accas
212 objet = Accas.MCList    
213
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)
217   """
218   return MCListTreeItem(appliEficas,labeltext,object,setFunction)