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