]> SALOME platform Git repositories - tools/eficas.git/blob - InterfaceQT/compomclist.py
Salome HOME
CCAR: merge de la version 1.14 dans la branche principale
[tools/eficas.git] / InterfaceQT / compomclist.py
1 # -*- coding: utf-8 -*-
2
3 import types
4 import traceback
5
6 from qt import *
7
8 import compofact
9 import browser
10 from Editeur     import Objecttreeitem
11 from Noyau.N_OBJECT import ErrorObj
12 #import compoerror
13
14
15 class Node(browser.JDCNode):
16     def getPanel(self):
17         """        
18         """    
19         if self.item.isMCList() :
20            if self.item.ajout_possible():
21               from monMCListAjoutPanel import MonMCListAjoutPanel
22               return MonMCListAjoutPanel(self,parent=self.editor)
23            else :
24               print "MCList"
25         elif self.item.isMCFact() :
26            from monMCFactPanel import MonMCFactPanel
27            return MonMCFactPanel(self,parent=self.editor)
28         else :
29            print "MCList"
30
31     def doPaste(self,node_selected):
32         objet_a_copier = self.item.get_copie_objet()
33         child=node_selected.doPasteMCF(objet_a_copier)
34         #print "doPaste",child
35         return child
36
37     def doPasteMCF(self,objet_a_copier):
38         child=None
39         # le noeud courant est une MCList
40         if self.item.isMCList() :
41           child = self.append_child(objet_a_copier,pos='first',retour='oui')
42
43         # le noeud courant est un MCFACT
44         elif self.item.isMCFact() :
45           # le noeud selectionne est un MCFACT dans une MCList
46           if self.parent.item.isMCList():
47              child = self.parent.append_child(objet_a_copier,
48                                               pos=self.item,
49                                               retour='oui')
50
51           # le noeud MCFACT selectionne n'est pas dans une MCList
52           else:
53              child = self.parent.append_child(objet_a_copier,retour='oui')
54
55         else:
56           QMessageBox.information( self, "Copie impossible",
57                    "Vous ne pouvez coller le mot-clé facteur copié à ce niveau de l'arborescence !")          
58           self.editor.affiche_infos("Copie refusée")
59
60         return child
61
62 class MCListTreeItem(Objecttreeitem.SequenceTreeItem,compofact.FACTTreeItem):
63     """ La classe MCListTreeItem joue le role d'un adaptateur pour les objets
64         du noyau Accas instances de la classe MCLIST.
65         Elle adapte ces objets pour leur permettre d'etre intégrés en tant que
66         noeuds dans un arbre graphique (voir treewidget.py et ObjectTreeItem.py).
67         Cette classe délègue les appels de méthode et les accès
68         aux attributs à l'objet du noyau soit manuellement soit 
69         automatiquement (voir classe Delegate et attribut object).
70     """
71     itemNode=Node
72
73     def init(self):
74         # Si l'objet Accas (MCList) a moins d'un mot cle facteur
75         # on utilise directement ce mot cle facteur comme delegue
76         self.updateDelegate()
77
78     def updateDelegate(self):
79         if len(self._object) > 1:
80            self.setdelegate(self._object)
81         else:
82            self.setdelegate(self._object.data[0])
83
84     def panel(self,jdcdisplay,pane,node):
85         """ Retourne une instance de l'objet panneau associe a l'item (self)
86             Si la liste ne contient qu'un mot clé facteur, on utilise le panneau
87             FACTPanel.
88             Si la liste est plus longue on utilise le panneau MCLISTPanel.
89         """
90         if len(self._object) > 1:
91            return MCLISTPanel(jdcdisplay,pane,node)
92         elif isinstance(self._object.data[0],ErrorObj):
93            return compoerror.ERRORPanel(jdcdisplay,pane,node)
94         else:
95            return compofact.FACTPanel(jdcdisplay,pane,node)
96
97     def IsExpandable(self):
98         if len(self._object) > 1:
99            return Objecttreeitem.SequenceTreeItem.IsExpandable(self)
100         else:
101            return compofact.FACTTreeItem.IsExpandable(self)
102
103     def GetSubList(self):
104         self.updateDelegate()
105         if len(self._object) <= 1:
106            self._object.data[0].alt_parent=self._object
107            return compofact.FACTTreeItem.GetSubList(self)
108
109         liste=self._object.data
110         sublist=[None]*len(liste)
111         # suppression des items lies aux objets disparus
112         for item in self.sublist:
113            old_obj=item.getObject()
114            if old_obj in liste:
115               pos=liste.index(old_obj)
116               sublist[pos]=item
117            else:
118               pass # objets supprimes ignores
119         # ajout des items lies aux nouveaux objets
120         pos=0
121         for obj in liste:
122            if sublist[pos] is None:
123               # nouvel objet : on cree un nouvel item
124               def setfunction(value, object=obj):
125                   object=value
126               item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
127               sublist[pos]=item
128               #Attention : on ajoute une information supplementaire pour l'actualisation de 
129               # la validite. L'attribut parent d'un MCFACT pointe sur le parent de la MCLISTE
130               # et pas sur la MCLISTE elle meme ce qui rompt la chaine de remontee des
131               # informations de validite. alt_parent permet de remedier a ce defaut.
132               obj.alt_parent=self._object
133            pos=pos+1
134
135         self.sublist=sublist
136         return self.sublist
137
138     def GetIconName(self):
139         if self._object.isvalid():
140             return "ast-green-los"
141         elif self._object.isoblig():
142             return "ast-red-los"
143         else:
144             return "ast-yel-los"
145
146     def get_docu(self):
147         """ Retourne la clef de doc de l'objet pointé par self """
148         return self.object.get_docu()    
149
150     def iscopiable(self):
151         if len(self._object) > 1:
152            return Objecttreeitem.SequenceTreeItem.iscopiable(self)
153         else:
154            return compofact.FACTTreeItem.iscopiable(self)
155
156     def isMCFact(self):
157         """
158         Retourne 1 si l'objet pointé par self est un MCFact, 0 sinon
159         """
160         return len(self._object) <= 1
161
162     def isMCList(self):
163         """
164         Retourne 1 si l'objet pointé par self est une MCList, 0 sinon
165         """
166         return len(self._object) > 1
167         
168     def get_copie_objet(self):
169         return self._object.data[0].copy()
170
171     def additem(self,obj,pos):
172         #print "compomclist.additem",obj,pos
173         if len(self._object) <= 1:
174            return compofact.FACTTreeItem.additem(self,obj,pos)
175
176         o= self.object.addentite(obj,pos)
177         return o
178
179     def suppitem(self,item):
180         """
181         Retire un objet MCFACT de la MCList (self.object) 
182         """
183         #print "compomclist.suppitem",item
184         obj=item.getObject()
185         if len(self._object) <= 1:
186            return compofact.FACTTreeItem.suppitem(self,item)
187
188         if self.object.suppentite(obj):
189            if len(self._object) == 1: self.updateDelegate()     
190            message = "Mot-clef " + obj.nom + " supprimé"
191            self.appli.affiche_infos(message)
192            return 1
193         else:
194            self.appli.affiche_infos('Impossible de supprimer ce mot-clef')
195            return 0
196
197             
198 import Accas
199 objet = Accas.MCList    
200
201 def treeitem(appli,labeltext,object,setfunction):
202   """ Factory qui produit un objet treeitem adapte a un objet 
203       Accas.MCList (attribut objet de ce module)
204   """
205   return MCListTreeItem(appli,labeltext,object,setfunction)