Salome HOME
Merge remote branch 'origin/nouvelEficas' into nouvelEficas
[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("activated()"),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     #def doPaste(self,node_selected):
65     #    print 'je suis la'
66     #    objetACopier = self.item.get_copie_objet()
67     #    child=self.append_brother(objetACopier)
68     #    return child
69
70     
71 class MACROTreeItem(compooper.EtapeTreeItem):
72 #  """ Cette classe hérite d'une grande partie des comportements
73 #      de la classe compooper.EtapeTreeItem
74 #  """
75     itemNode=MACRONode
76
77 # ------------------------------------
78 #  Classes necessaires a INCLUDE
79 # ------------------------------------
80
81 class INCLUDETreeItemBase(MACROTreeItem):
82
83     def __init__(self,appli, labeltext, object, setfunction):    
84        MACROTreeItem.__init__(self,appli, labeltext, object, setfunction)
85
86     def iscopiable(self):
87        return 0
88
89
90 class INCLUDENode(browser.JDCNode,typeNode.PopUpMenuNode):    
91     def getPanel(self):
92       from   monIncludePanel import MonIncludePanel
93       return MonIncludePanel (self,parent=self.editor )
94
95     def createPopUpMenu(self):
96       typeNode.PopUpMenuNode.createPopUpMenu(self)
97       
98     def makeEdit(self):    #,appli,node
99         if self.item.object.text_converted == 0:
100                 # Le texte du fichier inclus n'a pas pu etre converti par le module convert
101                 msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
102                 msg=msg+self.item.object.text_error
103                 return
104     
105         if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
106                #L'include n'est pas initialise
107                self.item.object.build_include(None,"")
108     
109         # On cree un nouvel onglet dans le bureau
110         self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom )
111      
112
113 class INCLUDETreeItem(INCLUDETreeItemBase):
114     itemNode=INCLUDENode
115     
116
117 # ------------------------------------
118 #  Classes necessaires à POURSUITE
119 # ------------------------------------
120     
121 class POURSUITENode(browser.JDCNode, typeNode.PopUpMenuNode):    
122     def getPanel(self):
123       from   monPoursuitePanel import MonPoursuitePanel
124       return MonPoursuitePanel (self,parent=self.editor )
125
126     def createPopUpMenu(self):
127       typeNode.PopUpMenuNode.createPopUpMenu(self)
128
129     def makeEdit(self):    #,appli,node
130         if self.item.object.text_converted == 0:
131                 msg=tr("Le fichier de commande n'a pas pu etre converti pour etre editable par Eficas\n\n")
132                 msg=msg+self.item.object.text_error
133                 return
134     
135         if not hasattr(self.item.object,"jdc_aux") or self.item.object.jdc_aux is None:
136             text="""DEBUT()
137                     FIN()"""
138             self.object.build_poursuite(None,text)
139     
140         # On cree un nouvel onglet dans le bureau
141         self.editor.vm.displayJDC( self.item.object.jdc_aux , self.item.object.jdc_aux.nom)
142     
143 class POURSUITETreeItem(INCLUDETreeItemBase):
144   itemNode=POURSUITENode
145
146
147 # ----------------------------------------
148 #  Classes necessaires a INCLUDE MATERIAU
149 # ----------------------------------------
150     
151
152 class MATERIAUNode(MACRONode):
153
154     def getPanel(self):
155       from   monMacroPanel import MonMacroPanel
156       return MonMacroPanel (self,parent=self.editor )
157
158     def createPopUpMenu(self):
159       typeNode.PopUpMenuNode.createPopUpMenu(self)
160
161     def makeView(self) :
162       if hasattr(self.item.object,'fichier_ini') and self.item.object.fichier_ini==None:
163          QMessageBox.information( self,tr("Include vide"),tr("L'include doit etre correctement initialise pour etre visualise"))
164          return
165       f = open(self.item.object.fichier_ini, "rb")
166       texte = f.read()
167       f.close()
168       from desVisu import DVisu
169       monVisuDialg=DVisu(parent=self.editor.appliEficas,fl=0)
170       monVisuDialg.TB.setText(texte)
171       monVisuDialg.show()
172
173
174 class INCLUDE_MATERIAUTreeItem(INCLUDETreeItemBase):
175     itemNode=MATERIAUNode
176
177 # ------------------------------------
178 # TreeItem
179 # ------------------------------------
180     
181
182 def treeitem(appli, labeltext, object, setfunction=None):
183    """ Factory qui retourne l'item adapte au type de macro : 
184        INCLUDE, POURSUITE, MACRO
185    """
186    if object.nom == "INCLUDE_MATERIAU":
187       return INCLUDE_MATERIAUTreeItem(appli, labeltext, object, setfunction)
188    elif object.nom == "INCLUDE" or object.nom== "DICTDATA":
189       return INCLUDETreeItem(appli, labeltext, object, setfunction)
190    elif object.nom == "POURSUITE":
191       return POURSUITETreeItem(appli, labeltext, object, setfunction)
192    else:
193       return MACROTreeItem(appli, labeltext, object, setfunction)
194
195 import Accas
196 objet=Accas.MACRO_ETAPE
197     
198