1 # -*- coding: utf-8 -*-
2 # Copyright (C) 2010 EDF R&D
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.
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.
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
18 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
24 import eficasSalome # Import from EFICAS_SRC
25 from InterfaceQT4 import qtEficas # Import from Eficas
26 from PyQt4.QtGui import * # Import from PyQT
27 from PyQt4.QtCore import * # Import from PyQT
28 from PyQt4.QtAssistant import * # Import from PyQT
30 from daUtils.adaoEficasEvent import *
31 from daGuiImpl.adaoLogger import *
34 # ============================================
35 # Specialization of the EficasWrapper for ADAO
36 # ============================================
38 class AdaoEficasWrapper(eficasSalome.MyEficas):
40 def __init__(self, parent):
41 # Configuration de l'installation
42 # Permet à EFICAS de faire ses import correctement
43 my_path = os.path.dirname(os.path.abspath(__file__))
44 ADAO_INSTALL_DIR = my_path + "/../daEficas"
45 sys.path[:0]=[ADAO_INSTALL_DIR]
47 self.__parent = parent
51 eficasSalome.MyEficas.__init__(self, self.__parent, code="ADAO", module="ADAO")
52 self.connect(self.viewmanager.myQtab, SIGNAL('currentChanged(int)'), self.tabChanged)
56 def addJdcInSalome(self, jdcPath):
57 debug("addJdcInSalome is called " + str(jdcPath))
58 # On gere nous meme l'etude
63 # Gestion des évènements provenant des widgets QT d'Eficas
67 def tabChanged(self, index):
68 debug("tabChanged " + str(index))
69 # This signal is also emit when a new case is created/added
70 # On regarde que le dictionnaire contient l'index
71 if index in self.viewmanager.dict_editors.keys():
72 self.notifyObserver(EficasEvent.EVENT_TYPES.TABCHANGED, callbackId=self.viewmanager.dict_editors[index])
76 # Méthodes gérant les boutons dans SALOME
80 # Rq: Utilisation de la méthode str() pour passer d'un Qstring à un string
82 def adaofileNew(self, adao_case):
84 qtEficas.Appli.fileNew(self)
85 index = self.viewmanager.myQtab.currentIndex()
86 adao_case.name = str(self.viewmanager.myQtab.tabText(index))
87 adao_case.eficas_editor = self.viewmanager.dict_editors[index]
88 self.notifyObserver(EficasEvent.EVENT_TYPES.NEW, callbackId=adao_case)
90 def adaoFileSave(self, adao_case):
92 ok = qtEficas.Appli.fileSave(self)
94 index = self.viewmanager.myQtab.currentIndex()
95 adao_case.name = str(self.viewmanager.myQtab.tabText(index))
96 adao_case.filename = str(self.viewmanager.dict_editors[index].fichier)
97 adao_case.eficas_editor = self.viewmanager.dict_editors[index]
98 self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE, callbackId=adao_case)
100 def adaoFileSaveAs(self, adao_case):
102 ok = qtEficas.Appli.fileSaveAs(self)
104 index = self.viewmanager.myQtab.currentIndex()
105 adao_case.name = str(self.viewmanager.myQtab.tabText(index))
106 adao_case.filename = str(self.viewmanager.dict_editors[index].fichier)
107 adao_case.eficas_editor = self.viewmanager.dict_editors[index]
108 self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE, callbackId=adao_case)
110 def adaoFileOpen(self, adao_case):
112 tab_number = self.viewmanager.myQtab.count()
113 ok = self.viewmanager.handleOpen()
115 # On regarde si c'est un nouveau editeur
116 if self.viewmanager.myQtab.count() > tab_number:
117 index = self.viewmanager.myQtab.currentIndex()
118 adao_case.name = str(self.viewmanager.myQtab.tabText(index))
119 adao_case.filename = str(self.viewmanager.dict_editors[index].fichier)
120 adao_case.eficas_editor = self.viewmanager.dict_editors[index]
121 self.notifyObserver(EficasEvent.EVENT_TYPES.OPEN, callbackId=adao_case)
123 def adaoFileClose(self, adao_case):
125 index = self.viewmanager.myQtab.currentIndex()
126 close_editor = self.viewmanager.dict_editors[index]
127 res = self.viewmanager.handleClose(self)
128 if res != 2: # l utilsateur a annule
129 if close_editor.fichier is None:
131 print "cas fichier vide"
132 self.notifyObserver(EficasEvent.EVENT_TYPES.CLOSE, callbackId=close_editor)
134 # Cas fichier existant
135 print "cas fichier existant"
136 self.notifyObserver(EficasEvent.EVENT_TYPES.CLOSE, callbackId=close_editor)
140 # Méthodes auxiliares de gestion du GUI Eficas pour synchronisation
141 # avec la partie GUI de SALOME
145 def selectCase(self, editor):
147 for indexEditor in self.viewmanager.dict_editors.keys():
148 if editor is self.viewmanager.dict_editors[indexEditor]:
149 self.viewmanager.myQtab.setCurrentIndex(indexEditor)
154 def getCurrentEditor(self):
155 index = self.viewmanager.myQtab.currentIndex()
158 editor = self.viewmanager.dict_editors[index]
166 # Méthodes secondaires permettant de gérer les observeurs du
171 def addObserver(self, observer):
173 In fact, only one observer may be defined for the moment.
176 observer.processEficasEvent
178 raise DevelException("the argument should implement the function processEficasEvent")
179 self.__observer = observer
181 def notifyObserver(self, eventType, callbackId=None):
182 eficasEvent = EficasEvent(eventType, callbackId)
183 self.__observer.processEficasEvent(self, eficasEvent)
192 def openEmptyCase(self, callbackId):
193 qtEficas.Appli.fileNew(self)
194 self.removeCallbackId(callbackId)
195 self.setCallbackId(callbackId)
197 def getCaseName(self):
198 if self.__close_editor is None:
199 index = self.viewmanager.myQtab.currentIndex()
200 CaseName = self.viewmanager.myQtab.tabText(index)
203 CaseName = str(self.__close_editor.fichier.split('/')[-1])
206 def getFileCaseName(self):
207 if self.__close_editor is None:
208 index = self.viewmanager.myQtab.currentIndex()
209 editor = self.viewmanager.dict_editors[index]
210 return editor.fichier
212 return self.__close_editor.fichier
214 def Openfile(self, filename):
215 self.viewmanager.handleOpen(fichier=filename)
217 def handleOpenRecent(self):
222 fichier = self.ficRecents[idx]
223 self.__file_open_name = fichier
224 self.notifyObserver(EficasEvent.EVENT_TYPES.OPEN)
225 self.__file_open_name = ""
228 def getOpenFileName(self):
229 return str(self.__file_open_name)
236 index = self.viewmanager.myQtab.currentIndex()
237 self.__close_editor = self.viewmanager.dict_editors[index]
238 res = self.viewmanager.handleClose(self)
239 if res != 2: # l utilsateur a annule
240 if self.__close_editor.fichier is None:
241 # We have to destroy the case
242 self.notifyObserver(EficasEvent.EVENT_TYPES.DESTROY)
243 self.__myCallbackId.pop(self.__close_editor)
245 # Il faudrait en faire plus -> Voir Edit dans SALOME !
246 self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
247 self.__myCallbackId.pop(self.__close_editor)
248 self.__close_editor = None
251 def fileCloseAll(self):
255 while len(self.viewmanager.dict_editors) > 0:
256 self.viewmanager.myQtab.setCurrentIndex(0)
257 if self.viewmanager.myQtab.currentIndex() == 0:
258 res = self.fileClose()
259 if res==2 : return res # l utilsateur a annule