Salome HOME
2d8e030a15d298ffc8b1295db4155c94e17e7024
[tools/eficas.git] / InterfaceQT4 / compomacro.py
1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2007-2013   EDF R&D
3 #
4 # This library is free software; you can redistribute it and/or
5 # modify it under the terms of the GNU Lesser General Public
6 # License as published by the Free Software Foundation; either
7 # version 2.1 of the License.
8 #
9 # This library is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 # Lesser General Public License for more details.
13 #
14 # You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 #
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 #
20
21 # Modules Python
22 import os,sys,string
23 import types
24 import traceback
25
26 # Modules Eficas
27 from Editeur import Objecttreeitem
28 from Extensions.i18n import tr
29 import compooper
30 import browser
31 import typeNode
32 from PyQt4.QtGui import QAction
33 from PyQt4.QtCore import Qt, SIGNAL, QVariant
34
35
36 class MACRONode(browser.JDCNode,typeNode.PopUpMenuNode):         
37     def getPanel(self):
38       from   monMacroPanel import MonMacroPanel
39       return MonMacroPanel (self,parent=self.editor )
40     
41     def getPanel2(self):
42       from   monWidgetCommande import MonWidgetCommande
43       return MonWidgetCommande (self,self.editor ,self.item.object)
44
45
46     def createPopUpMenu(self):
47       typeNode.PopUpMenuNode.createPopUpMenu(self)
48       if ("AFFE_CARA_ELEM" in self.item.get_genealogie()) and self.editor.salome:
49            self.ViewElt = QAction(tr('View3D'),self.tree)
50            self.tree.connect(self.ViewElt,SIGNAL("triggered()"),self.view3D)
51            self.ViewElt.setStatusTip(tr("affiche dans Geom les elements de structure"))
52            self.menu.addAction(self.ViewElt)
53            if self.item.isvalid() :
54               self.ViewElt.setEnabled(1)
55            else:
56               self.ViewElt.setEnabled(0)
57
58     def view3D(self) :
59         from Editeur import TroisDPal
60         troisD=TroisDPal.TroisDPilote(self.item,self.editor.appliEficas)
61         troisD.envoievisu()
62
63         
64
65     
66 class MACROTreeItem(compooper.EtapeTreeItem):
67 #  """ Cette classe hérite d'une grande partie des comportements
68 #      de la classe compooper.EtapeTreeItem
69 #  """
70     itemNode=MACRONode
71
72 # ------------------------------------
73 #  Classes necessaires a INCLUDE
74 # ------------------------------------
75
76 class INCLUDETreeItemBase(MACROTreeItem):
77
78     def __init__(self,appli, labeltext, object, setfunction):    
79        MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
80
81     def iscopiable(self):
82        return 0
83
84
85 class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):    
86     def getPanel(self):
87       from   monIncludePanel import MonIncludePanel
88       return MonIncludePanel (self,parent=self.editor )
89
90     def getPanel2(self):
91       from   monWidgetCommande import MonWidgetCommande
92       return MonWidgetCommande (self,self.editor ,self.item.object)
93
94     def createPopUpMenu(self):
95       typeNode.PopUpMenuNode.createPopUpMenu(self)
96       
97     def makeEdit(self):    #,appli,node
98         if self.item.object.text_converted == 0:
99                 # Le texte du fichier inclus n'a pas pu etre converti par le module convert
100                 msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
101                 msg=msg+self.item.object.text_error
102                 return
103     
104         if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
105                #L'include n'est pas initialise
106                self.item.object.build_include(None,"")
107     
108         # On cree un nouvel onglet dans le bureau
109         self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom )
110      
111
112 class INCLUDETreeItem(INCLUDETreeItemBase):
113     itemNode=INCLUDENode
114     
115
116 # ------------------------------------
117 #  Classes necessaires à POURSUITE
118 # ------------------------------------
119     
120 class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):    
121     def getPanel(self):
122       from   monPoursuitePanel import MonPoursuitePanel
123       return MonPoursuitePanel (self,parent=self.editor )
124
125     def getPanel2(self):
126       from   monWidgetCommande import MonWidgetCommande
127       return MonWidgetCommande (self,self.editor ,self.item.object)
128
129     def createPopUpMenu(self):
130       typeNode.PopUpMenuNode.createPopUpMenu(self)
131
132     def makeEdit(self):    #,appli,node
133         if self.item.object.text_converted == 0:
134                 msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
135                 msg=msg+self.item.object.text_error
136                 return
137     
138         if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
139             text="""DEBUT()
140                     FIN()"""
141             self.object.build_poursuite(None,text)
142     
143         # On cree un nouvel onglet dans le bureau
144         self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom)
145     
146 class POURSUITETreeItem(INCLUDETreeItemBase):
147   itemNode=POURSUITENode
148
149
150 # ----------------------------------------
151 #  Classes necessaires a INCLUDE MATERIAU
152 # ----------------------------------------
153     
154
155 class MATERIAUNode(MACRONode):
156
157     def getPanel(self):
158       from   monMacroPanel import MonMacroPanel
159       return MonMacroPanel (self,parent=self.editor )
160
161     def createPopUpMenu(self):
162       typeNode.PopUpMenuNode.createPopUpMenu(self)
163
164     def makeView(self) :
165       if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
166          QMessageBox.information( self,tr("Include vide"),tr("L'include doit etre correctement initialise pour etre visualise"))
167          return
168       f = open(self.item.object.fichier_ini, "rb")
169       texte = f.read()
170       f.close()
171       from desVisu import DVisu
172       monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
173       monVisuDialg.TB.setText(texte)
174       monVisuDialg.show()
175
176
177 class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
178     itemNode=MATERIAUNode
179
180 # ------------------------------------
181 # TreeItem
182 # ------------------------------------
183     
184
185 def treeitem(appli, labeltext, object, setfunction=None):
186    """ Factory qui retourne l'item adapte au type de macro : 
187        INCLUDE, POURSUITE, MACRO
188    """
189    if object.nom == "INCLUDE_MATERIAU":
190       return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
191    elif object.nom == "INCLUDE" or object.nom== "DICTDATA":
192       return INCLUDETreeItem(appli, labeltext, object, setfunction)
193    elif object.nom == "POURSUITE":
194       return POURSUITETreeItem(appli, labeltext, object, setfunction)
195    else:
196       return MACROTreeItem(appli, labeltext, object, setfunction)
197
198 import Accas
199 objet=Accas.MACRO_ETAPE
200     
201