Salome HOME
*** empty log message ***
[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.ViewElt = QAction('View3D',self.tree)
24            self.tree.connect(self.ViewElt,SIGNAL("activated()"),self.view3D)
25            self.ViewElt.setStatusTip("affiche dans Geom les elements de structure")
26            self.menu.addAction(self.ViewElt)
27            if self.item.isvalid() :
28               self.ViewElt.setEnabled(1)
29            else:
30               self.ViewElt.setEnabled(0)
31         if  self.item.get_nom() == "DISTRIBUTION" :
32            self.Graphe = QAction('Graphique',self.tree)
33            self.tree.connect(self.Graphe,SIGNAL("activated()"),self.viewPng)
34            self.Graphe.setStatusTip("affiche la distribution ")
35            self.menu.addAction(self.Graphe)
36            if self.item.isvalid() :
37               self.Graphe.setEnabled(1)
38            else:
39               self.Graphe.setEnabled(0)
40
41     def view3D(self) :
42         from Editeur import TroisDPal
43         troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
44         troisD.envoievisu()
45
46     def viewPng(self) :
47         from monPixmap import MonLabelPixmap
48         fichier=self.appliEficas.getName()
49         try :
50             os.remove(fichier)
51         except :
52             pass     
53         #try:
54         if 1:
55             import generator
56             g = generator.plugins[self.appliEficas.format_fichier]()
57             g.gener(self.item.object, format='beautifie')
58             stdGener = g.getGenerateur()
59             if len(g.dictMCLois) != 1:
60                 QMessageBox.warning(
61                     None,
62                     self.appliEficas.trUtf8("Erreur interne"),
63                     self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
64                     self.appliEficas.trUtf8("&Annuler"))
65                 return
66             loi = g.dictMCLois.keys()[0]
67             nomLoi = loi.get_name()
68             script = stdGener.GraphiquePDF(loi, fichier)
69             #print script
70             d = {}
71             exec script in d
72             widgetPng=MonLabelPixmap(self.appliEficas,fichier,nomLoi)
73             widgetPng.show()
74         #except:
75         else:
76             QMessageBox.warning(
77                 None,
78                 self.appliEficas.trUtf8("Erreur interne"),
79                 self.appliEficas.trUtf8("La PDF de la loi ne peut pas etre affichee."),
80                 self.appliEficas.trUtf8("&Annuler"))
81
82 class EtapeTreeItem(Objecttreeitem.ObjectTreeItem):
83   """ La classe EtapeTreeItem est un adaptateur des objets ETAPE du noyau
84       Accas. Elle leur permet d'etre affichés comme des noeuds
85       d'un arbre graphique.
86       Cette classe a entre autres deux attributs importants :
87         - _object qui est un pointeur vers l'objet du noyau
88         - object qui pointe vers l'objet auquel sont délégués les
89           appels de méthode et les acces aux attributs
90       Dans le cas d'une ETAPE, _object et object pointent vers le 
91       meme objet.
92   """
93   itemNode=Node
94   
95   def IsExpandable(self):
96       return 1
97
98   def GetIconName(self):
99       """
100       Retourne le nom de l'icone a afficher dans l'arbre
101       Ce nom dépend de la validité de l'objet
102       """
103       if not self.object.isactif():
104          return "ast-white-square"
105       elif self.object.isvalid():
106          return "ast-green-square"
107       else:
108          valid=self.valid_child()
109          valid=valid * self.valid_regles("non")
110          if self.reste_val != {}:
111             valid=0
112          if valid==0  :
113             return "ast-red-square"
114          else :
115             try :
116             # on traite ici le cas d include materiau
117             #  print self.object.definition.nom 
118               if  self.object.fichier_ini != self.object.nom_mater :
119                   return "ast-red-square"
120             except :
121               pass
122             return "ast-yellow-square"
123
124   def GetLabelText(self):
125       """ Retourne 3 valeurs :
126       - le texte a afficher dans le noeud représentant l'item
127       - la fonte dans laquelle afficher ce texte
128       - la couleur du texte
129       """
130       if self.object.isactif():
131         # None --> fonte et couleur par défaut
132         return self.labeltext,None,None
133       else:
134         return self.labeltext, None, None #CS_pbruno todo
135       
136   def get_objet(self,name) :
137       for v in self.object.mc_liste:
138           if v.nom == name : return v
139       return None
140       
141   def get_type_sd_prod(self):
142       """
143          Retourne le nom du type du concept résultat de l'étape
144       """
145       sd_prod=self.object.get_type_produit()
146       if sd_prod:
147          return sd_prod.__name__
148       else:
149          return ""
150
151   def additem(self,name,pos):      
152       mcent = self._object.addentite(name,pos)
153       return mcent
154       
155
156   def suppitem(self,item) :
157       # item : item du MOCLE de l'ETAPE a supprimer
158       # item.getObject() = MCSIMP, MCFACT, MCBLOC ou MCList 
159       itemobject=item.getObject()
160       if itemobject.isoblig() :
161           self.appli.affiche_infos('Impossible de supprimer un mot-clé obligatoire ',Qt.red)
162           return 0
163       if self.object.suppentite(itemobject):
164           message = "Mot-clef " + itemobject.nom + " supprime"
165           self.appli.affiche_infos(message)
166           return 1
167       else :
168           self.appli.affiche_infos('Pb interne : impossible de supprimer ce mot-clé',Qt.red)
169           return 0
170
171   def GetText(self):
172       try:
173           return self.object.get_sdname()
174       except:
175           return ''
176
177   def keys(self):
178       keys=self.object.mc_dict.keys()
179       return keys
180
181   def GetSubList(self):
182       """
183          Reactualise la liste des items fils stockes dans self.sublist
184       """
185       if self.isactif():
186          liste=self.object.mc_liste
187       else:
188          liste=[]
189
190       sublist=[None]*len(liste)
191       # suppression des items lies aux objets disparus
192       for item in self.sublist:
193          old_obj=item.getObject()
194          if old_obj in liste:
195             pos=liste.index(old_obj)
196             sublist[pos]=item
197          else:
198             pass # objets supprimes ignores
199
200       # ajout des items lies aux nouveaux objets
201       pos=0
202       for obj in liste:
203          if sublist[pos] is None:
204             # nouvel objet : on cree un nouvel item
205             def setfunction(value, object=obj):
206                 object.setval(value)
207             item = self.make_objecttreeitem(self.appli, obj.nom + " : ", obj, setfunction)
208             sublist[pos]=item
209          pos=pos+1
210
211       self.sublist=sublist
212       return self.sublist
213
214   def isvalid(self):
215       return self.object.isvalid()
216
217   def iscopiable(self):
218       """
219       Retourne 1 si l'objet est copiable, 0 sinon
220       """
221       return 1
222
223   def update(self,item):
224       if item.sd and item.sd.nom:
225          self.nomme_sd(item.sd.nom)
226
227   def nomme_sd(self,nom):
228       """ Lance la méthode de nommage de la SD """
229       oldnom=""
230       if self.object.sd != None :
231          oldnom=self.object.sd.nom
232       test,mess= self.object.nomme_sd(nom)
233       if test:self.object.parent.reset_context()
234       if (test and self.appli.dict_reels.has_key(oldnom) ):
235               self.appli.dict_reels[nom]=self.appli.dict_reels[oldnom]
236       return test,mess
237
238   def is_reentrant(self):
239       return self.object.is_reentrant()
240     
241   def get_noms_sd_oper_reentrant(self):
242       return self.object.get_noms_sd_oper_reentrant()
243
244   def get_objet_commentarise(self):
245       """
246           Cette méthode retourne un objet commentarisé
247           représentatif de self.object
248       """
249       # Format de fichier utilisé
250       format=self.appli.appliEficas.format_fichier
251       return self.object.get_objet_commentarise(format)
252
253   def get_objet_commentarise_BAK(self):
254       """
255           Cette méthode retourne un objet commentarisé
256           représentatif de self.object
257       """
258       import generator,string,Accas
259       # Format de fichier utilisé
260       format=self.appli.appliEficas.format_fichier
261       g=generator.plugins[format]()
262       texte_commande = g.gener(self.object,format='beautifie')
263       # Il faut enlever la premiere ligne vide de texte_commande que 
264       # rajoute le generator
265       rebut,texte_commande = string.split(texte_commande,'\n',1)
266       # on construit l'objet COMMANDE_COMM repésentatif de self mais non 
267       # enregistré dans le jdc
268       commande_comment = Accas.COMMANDE_COMM(texte=texte_commande,reg='non',
269                                              parent=self.object.parent)
270       commande_comment.niveau = self.object.niveau
271       commande_comment.jdc = commande_comment.parent = self.object.jdc
272
273       pos=self.object.parent.etapes.index(self.object)
274       parent=self.object.parent
275       self.object.parent.suppentite(self.object)
276       parent.addentite(commande_comment,pos)
277
278       return commande_comment
279
280
281 import Accas
282 treeitem = EtapeTreeItem
283 objet = Accas.ETAPE    
284