Salome HOME
reindent + copyright + merge manuel avec la V9_dev sauf repertoires metier
[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)