Salome HOME
Updating date copyright information
[modules/adao.git] / src / daSalome / daGUI / daEficasWrapper / adaoEficasWrapper.py
index 353a78e1b56edd7e4e66315da8bbfae27526ad6e..c73948cd7fca2a2d34c4baf50aa50e89ad32fc58 100644 (file)
@@ -1,5 +1,5 @@
-# -*- coding: utf-8 -*-
-#  Copyright (C) 2010 EDF R&D
+#-*-coding:iso-8859-1-*-
+#  Copyright (C) 2010-2013 EDF R&D
 #
 #  This library is free software; you can redistribute it and/or
 #  modify it under the terms of the GNU Lesser General Public
 
 import sys
 import os
-from PyQt4 import QtGui,QtCore
 
-# Import from EFICAS_SRC
-import eficasSalome
-# Import from Eficas
-from InterfaceQT4 import qtEficas
+import eficasSalome               # Import from EFICAS_SRC
+from InterfaceQT4 import qtEficas # Import from Eficas
+from PyQt4.QtGui  import *        # Import from PyQT
+from PyQt4.QtCore import *        # Import from PyQT
+# from PyQt4.QtAssistant import *   # Import from PyQT
 
-from adaoWrapperUtils import *
+from daUtils.adaoEficasEvent import *
+from daUtils.adaoLogger import *
 
 #
 # ============================================
@@ -38,178 +39,132 @@ class AdaoEficasWrapper(eficasSalome.MyEficas):
 
     def __init__(self, parent):
         # Configuration de l'installation
-        # Permet à EFICAS de faire ses import correctement
+        # Permet à EFICAS de faire ses import correctement
         my_path = os.path.dirname(os.path.abspath(__file__))
         ADAO_INSTALL_DIR = my_path + "/../daEficas"
-        sys.path[:0]=[ADAO_INSTALL_DIR]
+        sys.path.insert(0,ADAO_INSTALL_DIR)
 
-        self.__myCallbackId = {}
-        self.__close_editor = None
-        self.__file_open_name = ""
         self.__parent = parent
 
     def init_gui(self):
-      eficasSalome.MyEficas.__init__(self, self.__parent, code="ADAO", module="ADAO")
-
 
-      # On réouvre tous les fichiers comm
-      # On fait une copie pour ne pas tomber dans une boucle infinie
-      # Deprecated
-      # Normalement on ne ferme plus le GUI donc on ne passe plus par là
-      save_CallbackId =  self.__myCallbackId.copy()
-      for editor, myCallbackId in save_CallbackId.iteritems():
-        self.notifyObserver(EficasEvent.EVENT_TYPES.REOPEN, callbackId=myCallbackId)
+      eficasSalome.MyEficas.__init__(self, self.__parent, code="ADAO", module="ADAO")
+      self.connect(self.viewmanager.myQtab, SIGNAL('currentChanged(int)'), self.tabChanged)
+      self.menubar.hide()
+      self.toolBar.hide()
 
-    def addJdcInSalome(  self, jdcPath ):
+    def addJdcInSalome(self, jdcPath):
+      debug("addJdcInSalome is called " + str(jdcPath))
       # On gere nous meme l'etude
       pass
 
-    def fileNew(self):
-        """
-        @overload
-        """
-        qtEficas.Appli.fileNew(self)
-        self.notifyObserver(EficasEvent.EVENT_TYPES.NEW)
+#######
+#
+# Gestion des évènements provenant des widgets QT d'Eficas
+#
+#######
 
-    def openEmptyCase(self, callbackId):
-        qtEficas.Appli.fileNew(self)
-        self.removeCallbackId(callbackId)
-        self.setCallbackId(callbackId)
+    def tabChanged(self, index):
+      debug("tabChanged " + str(index))
+      # This signal is also emit when a new case is created/added
+      # On regarde que le dictionnaire contient l'index
+      if index in self.viewmanager.dict_editors.keys():
+        self.notifyObserver(EficasEvent.EVENT_TYPES.TABCHANGED, callbackId=self.viewmanager.dict_editors[index])
 
-    def fileSave(self):
-        """
-        @overload
-        """
-        qtEficas.Appli.fileSave(self)
-        index = self.viewmanager.myQtab.currentIndex()
-        if index > -1 :
-          self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
+#######
+#
+# Méthodes gérant les boutons dans SALOME
+#
+#######
 
-    def fileSaveAs(self):
-        """
-        @overload
-        """
-        qtEficas.Appli.fileSaveAs(self)
-        self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
+# Rq: Utilisation de la méthode str() pour passer d'un Qstring à un string
+
+    def adaofileNew(self, adao_case):
+
+      qtEficas.Appli.fileNew(self)
+      index = self.viewmanager.myQtab.currentIndex()
+      adao_case.name          = str(self.viewmanager.myQtab.tabText(index))
+      adao_case.setEditor(self.viewmanager.dict_editors[index])
+      self.notifyObserver(EficasEvent.EVENT_TYPES.NEW, callbackId=adao_case)
 
-    def getCaseName(self):
-      if self.__close_editor is None:
+    def adaoFileSave(self, adao_case):
+
+      ok = qtEficas.Appli.fileSave(self)
+      if ok:
         index = self.viewmanager.myQtab.currentIndex()
-        CaseName = self.viewmanager.myQtab.tabText(index)
-        return CaseName
-      else:
-        CaseName = str(self.__close_editor.fichier.split('/')[-1])
-        return CaseName
-
-    def getFileCaseName(self):
-      if self.__close_editor is None:
+        adao_case.name          = str(self.viewmanager.myQtab.tabText(index))
+        adao_case.filename      = str(self.viewmanager.dict_editors[index].fichier)
+        adao_case.setEditor(self.viewmanager.dict_editors[index])
+        self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE, callbackId=adao_case)
+
+    def adaoFileSaveAs(self, adao_case):
+
+      ok = qtEficas.Appli.fileSaveAs(self)
+      if ok:
         index = self.viewmanager.myQtab.currentIndex()
-        editor = self.viewmanager.dict_editors[index]
-        return editor.fichier
-      else:
-        return self.__close_editor.fichier
-
-    def Openfile(self, filename):
-      self.viewmanager.handleOpen(fichier=filename)
-
-    def handleOpenRecent(self):
-      """
-      @overload
-      """
-      idx = self.sender()
-      fichier = self.ficRecents[idx]
-      self.__file_open_name = fichier
-      self.notifyObserver(EficasEvent.EVENT_TYPES.OPEN)
-      self.__file_open_name = ""
-
-    def fileOpen(self):
-        """
-        @overload
-        """
-        fichier = QtGui.QFileDialog.getOpenFileName(self,
-                                                    self.trUtf8('Ouvrir Fichier'),
-                                                    self.CONFIGURATION.savedir,
-                                                    self.trUtf8('JDC Files (*.comm);;''All Files (*)'))
-        if fichier.isNull(): return
-        self.__file_open_name = fichier
-        self.notifyObserver(EficasEvent.EVENT_TYPES.OPEN)
-        self.__file_open_name = ""
-
-    def getOpenFileName(self):
-      return str(self.__file_open_name)
-
-    def selectCase(self, callbackId):
-      rtn = False
-      for editor, myCallbackId in self.__myCallbackId.iteritems():
-        if myCallbackId[0] == callbackId[0]:
-          if myCallbackId[1].GetID() == callbackId[1].GetID():
-            try:
-              for indexEditor in self.viewmanager.dict_editors.keys():
-                if editor is self.viewmanager.dict_editors[indexEditor]:
-                  self.viewmanager.myQtab.setCurrentIndex(indexEditor)
-                  rtn = True
-            except:
-              pass
-      return rtn
+        adao_case.name          = str(self.viewmanager.myQtab.tabText(index))
+        adao_case.filename      = str(self.viewmanager.dict_editors[index].fichier)
+        adao_case.setEditor(self.viewmanager.dict_editors[index])
+        self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE, callbackId=adao_case)
+
+    def adaoFileOpen(self, adao_case):
+
+      tab_number = self.viewmanager.myQtab.count()
+      ok = self.viewmanager.handleOpen()
+      if ok:
+        # On regarde si c'est un nouveau editeur
+        if self.viewmanager.myQtab.count() > tab_number:
+          index = self.viewmanager.myQtab.currentIndex()
+          adao_case.name          = str(self.viewmanager.myQtab.tabText(index))
+          adao_case.filename      = str(self.viewmanager.dict_editors[index].fichier)
+          adao_case.setEditor(self.viewmanager.dict_editors[index])
+          self.notifyObserver(EficasEvent.EVENT_TYPES.OPEN, callbackId=adao_case)
+
+    def adaoFileClose(self, adao_case):
 
-    def fileClose(self):
-        """
-        @overload
-        """
         index = self.viewmanager.myQtab.currentIndex()
-        self.__close_editor = self.viewmanager.dict_editors[index]
+        close_editor = self.viewmanager.dict_editors[index]
         res = self.viewmanager.handleClose(self)
         if res != 2: # l utilsateur a annule
-          if self.__close_editor.fichier is None:
-            # We have to destroy the case
-            self.notifyObserver(EficasEvent.EVENT_TYPES.DESTROY)
-            self.__myCallbackId.pop(self.__close_editor)
+          if close_editor.fichier is None:
+            # Cas fichier vide
+            self.notifyObserver(EficasEvent.EVENT_TYPES.CLOSE, callbackId=close_editor)
           else:
-            # Il faudrait en faire plus -> Voir Edit dans SALOME !
-            self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
-            self.__myCallbackId.pop(self.__close_editor)
-        self.__close_editor = None
-        return res
-
-    def fileCloseAll(self):
-      """
-      @overload
-      """
-      while len(self.viewmanager.dict_editors) > 0:
-        self.viewmanager.myQtab.setCurrentIndex(0)
-        if self.viewmanager.myQtab.currentIndex() == 0:
-          res = self.fileClose()
-          if res==2 : return res   # l utilsateur a annule
-        else:
-          return 0
-
-    # ==========================================================================
-    # Function for the notification interface between an EficasWrapper an an
-    # EficasObserver.
-
-    # Association de l'objet editor avec le callbackId
-    def setCallbackId(self, callbackId):
+            # Cas fichier existant
+            self.notifyObserver(EficasEvent.EVENT_TYPES.CLOSE, callbackId=close_editor)
+
+#######
+#
+# Méthodes auxiliares de gestion du GUI Eficas pour synchronisation
+# avec la partie GUI de SALOME
+#
+#######
+
+    def selectCase(self, editor):
+      rtn = False
+      for indexEditor in self.viewmanager.dict_editors.keys():
+        if editor is self.viewmanager.dict_editors[indexEditor]:
+          self.viewmanager.myQtab.setCurrentIndex(indexEditor)
+          rtn = True
+          break
+      return rtn
+
+    def getCurrentEditor(self):
       index = self.viewmanager.myQtab.currentIndex()
-      self.__myCallbackId[self.viewmanager.dict_editors[index]] = callbackId
-
-    def removeCallbackId(self, callbackId):
-      key_to_remove = None
-      print callbackId
-      for k, v in self.__myCallbackId.iteritems():
-        print k, v
-        if v[0] == callbackId[0] and v[1].GetID() == callbackId[1].GetID():
-          key_to_remove = k
-      if key_to_remove is not None:
-        del self.__myCallbackId[key_to_remove]
-      else:
-        print "Oups - cannot find callbackId"
-
-    def getCallbackId(self):
-      if self.__close_editor is None:
-        index = self.viewmanager.myQtab.currentIndex()
-        return self.__myCallbackId[self.viewmanager.dict_editors[index]]
-      else:
-        return self.__myCallbackId[self.__close_editor]
+      editor = None
+      if index >= 0:
+        editor = self.viewmanager.dict_editors[index]
+      return editor
+
+
+
+
+#######
+#
+# Méthodes secondaires permettant de gérer les observeurs du
+# GUI d'Eficas
+#
+#######
 
     def addObserver(self, observer):
         """
@@ -222,12 +177,5 @@ class AdaoEficasWrapper(eficasSalome.MyEficas):
         self.__observer = observer
 
     def notifyObserver(self, eventType, callbackId=None):
-      if eventType != EficasEvent.EVENT_TYPES.NEW and eventType != EficasEvent.EVENT_TYPES.OPEN:
-        if callbackId is None :
-          eficasEvent = EficasEvent(eventType, self.getCallbackId())
-        else:
-          eficasEvent = EficasEvent(eventType, callbackId)
-      else:
-        eficasEvent = EficasEvent(eventType)
+      eficasEvent = EficasEvent(eventType, callbackId)
       self.__observer.processEficasEvent(self, eficasEvent)
-