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