Salome HOME
66bd646fe7dd1131aa2af4ba959350116b184f99
[tools/eficas.git] / InterfaceQT4 / compooper.py
1 # -*- coding: utf-8 -*-
2 import traceback
3 import string
4 from PyQt4 import *
5 from PyQt4.QtGui  import *
6 from PyQt4.QtCore import *
7
8
9 from Editeur     import Objecttreeitem
10 import browser
11 import typeNode
12
13 class Node(browser.JDCNode, typeNode.PopUpMenuNode):
14     def getPanel( self ):
15         """
16         """
17         from monCommandePanel import MonCommandePanel
18         return MonCommandePanel(self,parent=self.editor)
19
20     def createPopUpMenu(self):
21         typeNode.PopUpMenuNode.createPopUpMenu(self)
22         if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome: 
23            self.menu.insertItem( 'View3D', self.view3D )
24
25     def doPaste(self,node_selected):
26         """
27             Déclenche la copie de l'objet item avec pour cible
28             l'objet passé en argument : node_selected
29         """
30         objet_a_copier = self.item.get_copie_objet()
31         child=node_selected.doPasteCommande(objet_a_copier)
32         return child
33
34     def doPasteCommande(self,objet_a_copier):
35         """
36           Réalise la copie de l'objet passé en argument qui est nécessairement
37           une commande
38         """
39         parent=self.parent
40         #child = parent.item.append_child(objet_a_copier,self.item.getObject())
41         child = self.append_brother(objet_a_copier)
42         #if child is None:return 0
43         return child
44
45     def doPasteMCF(self,objet_a_copier):
46         """
47            Réalise la copie de l'objet passé en argument (objet_a_copier)
48            Il s'agit forcément d'un mot clé facteur
49         """
50         child = self.append_child(objet_a_copier,pos='first',retour='oui')
51         return child
52
53     def view3D(self) :
54         import TroisDPal
55         troisD=TroisDPal.TroisDPilote(self.item,self.editor.parent.appliEficas)
56         troisD.envoievisu()
57
58
59 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
60   """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
61       Accas. Elle leur permet d'etre affichés comme des noeuds
62       d'un arbre graphique.
63       Cette classe a entre autres deux attributs importants :
64         - _object qui est un pointeur vers l'objet du noyau
65         - object qui pointe vers l'objet auquel sont délégués les
66           appels de méthode et les acces aux attributs
67       Dans le cas d'une ETAPE, _object et object pointent vers le 
68       meme objet.
69   """
70   itemNode=Node
71   
72   def IsExpandable(self):
73       return 1
74
75   def GetIconName(self):
76       """
77       Retourne le nom de l'icone a afficher dans l'arbre
78       Ce nom dépend de la validité de l'objet
79       """
80       if not self.object.isactif():
81          return "ast-white-square"
82       elif self.object.isvalid():
83          return "ast-green-square"
84       else:
85          valid=self.valid_child()
86          valid=valid * self.valid_regles("non")
87          if self.reste_val != {}:
88             valid=0
89          if valid==0  :
90             return "ast-red-square"
91          else :
92             try :
93             # on traite ici le cas d include materiau
94             #  print self.object.definition.nom 
95               if  self.object.fichier_ini != self.object.nom_mater :
96                   return "ast-red-square"
97             except :
98               pass
99             return "ast-yellow-square"
100
101   def GetLabelText(self):
102       """ Retourne 3 valeurs :
103       - le texte a afficher dans le noeud représentant l'item
104       - la fonte dans laquelle afficher ce texte
105       - la couleur du texte
106       """
107       if self.object.isactif():
108         # None --> fonte et couleur par défaut
109         return self.labeltext,None,None
110       else:
111         return self.labeltext, None, None #CS_pbruno todo
112       
113   def get_objet(self,name) :
114       for v in self.object.mc_liste:
115           if v.nom == name : return v
116       return None
117       
118   def get_type_sd_prod(self):
119       """
120          Retourne le nom du type du concept résultat de l'étape
121       """
122       sd_prod=self.object.get_type_produit()
123       if sd_prod:
124          return sd_prod.__name__
125       else:
126          return ""
127
128   def additem(self,name,pos):      
129       mcent = self._object.addentite(name,pos)
130       return mcent
131       
132
133   def suppitem(self,item) :
134       # item : item du MOCLE de l'ETAPE a supprimer
135       # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
136       itemobject=item.getObject()
137       if itemobject.isoblig() :
138           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ')
139           return 0
140       if self.object.suppentite(itemobject):
141           message = "Mot-clé " + itemobject.nom + " supprimé"
142           self.appli.affiche_infos(message)
143           return 1
144       else :
145           self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé')
146           return 0
147
148   def GetText(self):
149       try:
150           return self.object.get_sdname()
151       except:
152           return ''
153
154   def keys(self):
155       keys=self.object.mc_dict.keys()
156       return keys
157
158   def GetSubList(self):
159       """
160          Reactualise la liste des items fils stockes dans self.sublist
161       """
162       if self.isactif():
163          liste=self.object.mc_liste
164       else:
165          liste=[]
166
167       sublist=[None]*len(liste)
168       # suppression des items lies aux objets disparus
169       for item in self.sublist:
170          old_obj=item.getObject()
171          if old_obj in liste:
172             pos=liste.index(old_obj)
173             sublist[pos]=item
174          else:
175             pass # objets supprimes ignores
176
177       # ajout des items lies aux nouveaux objets
178       pos=0
179       for obj in liste:
180          if sublist[pos] is None:
181             # nouvel objet : on cree un nouvel item
182             def setfunction(value, object=obj):
183                 object.setval(value)
184             item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
185             sublist[pos]=item
186          pos=pos+1
187
188       self.sublist=sublist
189       return self.sublist
190
191   def isvalid(self):
192       return self.object.isvalid()
193
194   def iscopiable(self):
195       """
196       Retourne 1 si l'objet est copiable, 0 sinon
197       """
198       return 1
199
200   def update(self,item):
201       if item.sd and item.sd.nom:
202          self.nomme_sd(item.sd.nom)
203
204   def nomme_sd(self,nom):
205       """ Lance la méthode de nommage de la SD """
206       oldnom=""
207       if self.object.sd != None :
208          oldnom=self.object.sd.nom
209       test,mess= self.object.nomme_sd(nom)
210       if test:self.object.parent.reset_context()
211       if (test and self.appli.dict_reels.has_key(oldnom) ):
212               self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
213       return test,mess
214
215   def is_reentrant(self):
216       return self.object.is_reentrant()
217     
218   def get_noms_sd_oper_reentrant(self):
219       return self.object.get_noms_sd_oper_reentrant()
220
221   def get_objet_commentarise(self):
222       """
223           Cette méthode retourne un objet commentarisé
224           représentatif de self.object
225       """
226       # Format de fichier utilisé
227       format=self.appli.format_fichier
228       return self.object.get_objet_commentarise(format)
229
230   def get_objet_commentarise_BAK(self):
231       """
232           Cette méthode retourne un objet commentarisé
233           représentatif de self.object
234       """
235       import generator,string,Accas
236       # Format de fichier utilisé
237       format=self.appli.format_fichier
238       g=generator.plugins[format]()
239       texte_commande = g.gener(self.object,format='beautifie')
240       # Il faut enlever la premiere ligne vide de texte_commande que 
241       # rajoute le generator
242       rebut,texte_commande = string.split(texte_commande,'\n',1)
243       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
244       # enregistré dans le jdc
245       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
246                                              parent=self.object.parent)
247       commande_comment.niveau = self.object.niveau
248       commande_comment.jdc = commande_comment.parent = self.object.jdc
249
250       pos=self.object.parent.etapes.index(self.object)
251       parent=self.object.parent
252       self.object.parent.suppentite(self.object)
253       parent.addentite(commande_comment,pos)
254
255       return commande_comment
256
257
258 import Accas
259 treeitem = EtapeTreeItem
260 objet = Accas.ETAPE    
261