]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT4/compomclist.py
Salome HOME
pb de check box
[tools/eficas.git] / InterfaceQT4 / compomclist.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   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         #print "ds getPanelGroupe" , self.item.nom
45         #if hasattr(self,'plie'): print "self.plie", self.plie
46        # if self.item.nom == "BackgroundError" and not(self.plie): print i
47         #print parentQt
48         if hasattr(parentQt,'niveau'): self.niveau=parentQt.niveau+1
49         else : self.niveau=1
50         if not (monObjet.isMCList()) :
51            if  hasattr(self,'plie') and self.plie==True : 
52                from .monWidgetFactPlie import MonWidgetFactPlie
53                widget=MonWidgetFactPlie(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
54            else:
55                from .monWidgetFact import MonWidgetFact
56                widget=MonWidgetFact(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
57         else :
58            from .monWidgetBloc import MonWidgetBloc
59            widget=MonWidgetBloc(self,self.editor,parentQt,maDefinition,monObjet,self.niveau,maCommande)
60         return widget
61
62
63     #def doPaste(self,node_selected):
64     #    objet_a_copier = self.item.get_copie_objet()
65     #    child=node_selected.doPasteMCF(objet_a_copier)
66         #print "doPaste",child
67     #    return child
68
69     #def doPasteMCF(self,objet_a_copier):
70     #    child=None
71         # le noeud courant est une MCList
72     #    if self.item.isMCList() :
73     #      child = self.append_child(objet_a_copier,pos='first',retour='oui')
74
75         # le noeud courant est un MCFACT
76     #    elif self.item.isMCFact() :
77           # le noeud selectionne est un MCFACT dans une MCList
78     #      if self.parent.item.isMCList():
79     #         child = self.parent.append_child(objet_a_copier, pos=self.item, retour='oui')
80
81           # le noeud MCFACT selectionne n'est pas dans une MCList
82     #      else:
83     #         child = self.parent.append_child(objet_a_copier,retour='oui')
84
85     #    else:
86     #      QMessageBox.information( self, "Copie impossible",
87     #               "Vous ne pouvez coller le mot-cle facteur copie a ce niveau de l'arborescence !")          
88     #      self.editor.affiche_infos("Copie refusee")
89
90     #    return child
91
92 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
93     """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
94         du noyau Accas instances de la classe MCLIST.
95         Elle adapte ces objets pour leur permettre d'etre integres en tant que
96         noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
97         Cette classe delegue les appels de methode et les acces
98         aux attributs a l'objet du noyau soit manuellement soit 
99         automatiquement (voir classe Delegate et attribut object).
100     """
101     itemNode=Node
102
103     def init(self):
104         # Si l'objet Accas (MCList) a moins d'un mot cle facteur
105         # on utilise directement ce mot cle facteur comme delegue
106         self.updateDelegate()
107
108     def updateDelegate(self):
109         if len(self._object) > 1:
110            self.setdelegate(self._object)
111         else:
112            self.setdelegate(self._object.data[0])
113
114     def panel(self,jdcdisplay,pane,node):
115         """ Retourne une instance de l'objet panneau associe a l'item (self)
116             Si la liste ne contient qu'un mot cle facteur, on utilise le panneau
117             FACTPanel.
118             Si la liste est plus longue on utilise le panneau MCLISTPanel.
119         """
120         if len(self._object) > 1:
121            return MCLISTPanel(jdcdisplay,pane,node)
122         elif isinstance(self._object.data[0],ErrorObj):
123            return compoerror.ERRORPanel(jdcdisplay,pane,node)
124         else:
125            return compofact.FACTPanel(jdcdisplay,pane,node)
126
127     def IsExpandable(self):
128         if len(self._object) > 1:
129            return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
130         else:
131            return compofact.FACTTreeItem.IsExpandable(self)
132
133     def GetSubList(self):
134         self.updateDelegate()
135         if len(self._object) <= 1:
136            self._object.data[0].alt_parent=self._object
137            return compofact.FACTTreeItem.GetSubList(self)
138
139         liste=self._object.data
140         sublist=[None]*len(liste)
141         # suppression des items lies aux objets disparus
142         for item in self.sublist:
143            old_obj=item.getObject()
144            if old_obj in liste:
145               pos=liste.index(old_obj)
146               sublist[pos]=item
147            else:
148               pass # objets supprimes ignores
149         # ajout des items lies aux nouveaux objets
150         pos=0
151         for obj in liste:
152            if sublist[pos] is None:
153               # nouvel objet : on cree un nouvel item
154               def setfunction(value, object=obj):
155                   object=value
156               item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
157               sublist[pos]=item
158               #Attention : on ajoute une information supplementaire pour l'actualisation de 
159               # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
160               # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
161               # informations de validite. alt_parent permet de remedier a ce defaut.
162               obj.alt_parent=self._object
163            pos=pos+1
164
165         self.sublist=sublist
166         return self.sublist
167
168     def GetIconName(self):
169         if self._object.isvalid():
170             return "ast-green-los"
171         elif self._object.isoblig():
172             return "ast-red-los"
173         else:
174             return "ast-yel-los"
175
176     def get_docu(self):
177         """ Retourne la clef de doc de l'objet pointe par self """
178         return self.object.get_docu()    
179
180     def iscopiable(self):
181         if len(self._object) > 1:
182            return Objecttreeitem.SequenceTreeItem.iscopiable(self)
183         else:
184            return compofact.FACTTreeItem.iscopiable(self)
185
186     def isMCFact(self):
187         """
188         Retourne 1 si l'objet pointe par self est un MCFact, 0 sinon
189         """
190         return len(self._object) <= 1
191
192     def isMCList(self):
193         """
194         Retourne 1 si l'objet pointe par self est une MCList, 0 sinon
195         """
196         return len(self._object) > 1
197         
198     def get_copie_objet(self):
199         return self._object.data[0].copy()
200
201     def additem(self,obj,pos):
202         #print "compomclist.additem",obj,pos
203         if len(self._object) <= 1:
204            return compofact.FACTTreeItem.additem(self,obj,pos)
205
206         o= self.object.addentite(obj,pos)
207         return o
208
209     def suppitem(self,item):
210         """
211         Retire un objet MCFACT de la MCList (self.object) 
212         """
213         #print "compomclist.suppitem",item
214         obj=item.getObject()
215         if len(self._object) <= 1:
216            return compofact.FACTTreeItem.suppitem(self,item)
217
218         if self.object.suppentite(obj):
219            if len(self._object) == 1: self.updateDelegate()     
220            message = "Mot-clef " + obj.nom + " supprime"
221            #self.editor.affiche_commentaire(message)
222            return (1,message)
223         else:
224            return (0,tr('Impossible de supprimer ce mot-clef'))
225
226             
227 import Accas
228 objet = Accas.MCList    
229
230 def treeitem(appli,labeltext,object,setfunction):
231   """ Factory qui produit un objet treeitem adapte a un objet 
232       Accas.MCList (attribut objet de ce module)
233   """
234   return MCListTreeItem(appli,labeltext,object,setfunction)