Salome HOME
- On gére bien le GUI EFICAS
authorAndré <andre.ribes@edf.fr>
Wed, 28 Apr 2010 13:07:06 +0000 (15:07 +0200)
committerAndré <andre.ribes@edf.fr>
Wed, 28 Apr 2010 13:07:06 +0000 (15:07 +0200)
src/daEficas/generator_datassim.py
src/daSalome/daGUI/daEficasWrapper/datassimEficasWrapper.py
src/daSalome/daGUI/daEficasWrapper/eficasWrapper.py.in
src/daSalome/daGUI/daGuiImpl/Makefile.am
src/daSalome/daGUI/daGuiImpl/datassimCase.py [new file with mode: 0644]
src/daSalome/daGUI/daGuiImpl/datassimGuiManager.py
src/daSalome/daGUI/daGuiImpl/datassimStudyEditor.py

index 7aeb03519f6598564efcbf7f4490d3d6862d2053..15209397fcdecbefb96cbb62446dc93e5d6e206a 100644 (file)
@@ -23,6 +23,7 @@ class DatassimGenerator(PythonGenerator):
     self.dictMCVal={}
     self.text_comm = ""
     self.text_da = ""
     self.dictMCVal={}
     self.text_comm = ""
     self.text_da = ""
+    self.text_da_status = False
 
   def gener(self,obj,format='brut',config=None):
     print "DatassimGenerator gener"
 
   def gener(self,obj,format='brut',config=None):
     print "DatassimGenerator gener"
@@ -30,16 +31,23 @@ class DatassimGenerator(PythonGenerator):
 
     print "Dictionnaire"
     print self.dictMCVal
 
     print "Dictionnaire"
     print self.dictMCVal
-
-    self.generate_da()
+    
+    try :
+      self.text_da_status = False
+      self.generate_da()
+      self.text_da_status = True
+    except:
+      print "Case seems not be correct"
+      pass
     return self.text_comm
 
   def writeDefault(self, fn):
     return self.text_comm
 
   def writeDefault(self, fn):
-    print "writeDefault"
-    filename = fn[:fn.rfind(".")] + '.py'
-    f = open( str(filename), 'wb')
-    f.write( self.text_da )
-    f.close()
+    if self.text_da_status:
+      print "write datassim python command file"
+      filename = fn[:fn.rfind(".")] + '.py'
+      f = open( str(filename), 'wb')
+      f.write( self.text_da )
+      f.close()
 
   def generMCSIMP(self,obj) :
     """
 
   def generMCSIMP(self,obj) :
     """
index 5963037b1dd6a1a99747fdc7f10cd908fbeeab9a..01a6f6468d9814cba83ce2d0992eaad58041f72b 100644 (file)
@@ -19,6 +19,7 @@
 #
 
 from eficasWrapper import *
 #
 
 from eficasWrapper import *
+from PyQt4 import QtGui,QtCore
 import sys
 
 # Configuration de l'installation
 import sys
 
 # Configuration de l'installation
@@ -32,15 +33,33 @@ sys.path[:0]=[DATASSIM_INSTALL_DIR]
 # ================================================
 #
 class DatassimEficasWrapper(EficasWrapper):
 # ================================================
 #
 class DatassimEficasWrapper(EficasWrapper):
+
+    __myCallbackId = {}
+    __close_editor = None
+
     def __init__(self, parent, code="DATASSIM"):
         EficasWrapper.__init__(self, parent, code)
 
     def __init__(self, parent, code="DATASSIM"):
         EficasWrapper.__init__(self, parent, code)
 
+    # Association de l'objet editor avec le callbackId
+    def setCallbackId(self, callbackId):
+      index = self.viewmanager.myQtab.currentIndex()
+      self.__myCallbackId[self.viewmanager.dict_editors[index]] = 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]
+
     def fileSave(self):
         """
         @overload
         """
         qtEficas.Appli.fileSave(self)
     def fileSave(self):
         """
         @overload
         """
         qtEficas.Appli.fileSave(self)
-        self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
+        index = self.viewmanager.myQtab.currentIndex()
+        if index > -1 :
+          self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
 
     def fileSaveAs(self):
         """
 
     def fileSaveAs(self):
         """
@@ -49,10 +68,45 @@ class DatassimEficasWrapper(EficasWrapper):
         qtEficas.Appli.fileSaveAs(self)
         self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
 
         qtEficas.Appli.fileSaveAs(self)
         self.notifyObserver(EficasEvent.EVENT_TYPES.SAVE)
 
-    def getCurrentFileName(self):
-       index = self.viewmanager.myQtab.currentIndex()
-       print index
-       rtn = ""
-       if index > 0 :
-         rtn  = self.viewmanager.myQtab.tabText(index)
-       return rtn
+    def getCaseName(self):
+      if self.__close_editor is None:
+        index = self.viewmanager.myQtab.currentIndex()
+        CaseName = self.viewmanager.myQtab.tabText(index)
+        return CaseName
+      else:
+        CaseName = self.__close_editor.fichier.split('/')[-1]
+        return CaseName
+
+    def fileOpen(self):
+        """
+        @overload
+        """
+        QtGui.QMessageBox.warning( self, "Alerte", "You cannot Open a Case into Eficas window when you are using Datassim SALOME module")
+
+    def fileClose(self):
+        """
+        @overload
+        """
+        index = self.viewmanager.myQtab.currentIndex()
+        self.__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)
+          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)
+        res = self.fileClose()
+        if res==2 : return res   # l utilsateur a annule
index 4b646df26d43ed61b9a0da1b1818d14e6c56fcfa..10ed4b2475ebcf621974a060574042d24ea5ef9f 100644 (file)
@@ -52,7 +52,9 @@ class EficasObserver:
 class EficasEvent:
     EVENT_TYPES=Enumerate([
         'CLOSE',
 class EficasEvent:
     EVENT_TYPES=Enumerate([
         'CLOSE',
-        'SAVE'
+        'SAVE',
+        'DESTROY',
+        'NEW'
     ])
 
     def __init__(self,eventType,callbackId=None):
     ])
 
     def __init__(self,eventType,callbackId=None):
@@ -170,8 +172,11 @@ class EficasWrapper(qtEficas.Appli):
         self.__observer = observer
 
     def notifyObserver(self, eventType):
         self.__observer = observer
 
     def notifyObserver(self, eventType):
+      if eventType != EficasEvent.EVENT_TYPES.NEW:
         eficasEvent = EficasEvent(eventType, self.getCallbackId())
         eficasEvent = EficasEvent(eventType, self.getCallbackId())
-        self.__observer.processEficasEvent(self, eficasEvent)
+      else:
+        eficasEvent = EficasEvent(eventType)
+      self.__observer.processEficasEvent(self, eficasEvent)
 
     def setCallbackId(self, callbackId):
         """
 
     def setCallbackId(self, callbackId):
         """
@@ -211,6 +216,15 @@ class EficasWrapper(qtEficas.Appli):
            del InterfaceQT4.readercata.reader
         event.accept()
 
            del InterfaceQT4.readercata.reader
         event.accept()
 
+    def fileNew(self):        
+        """
+        @overload
+        """
+        logger.debug("This is my fileNew")
+        qtEficas.Appli.fileNew(self)
+        # Notify the observers of the event - after to be able to handled with editor
+        # If needed
+        self.notifyObserver(EficasEvent.EVENT_TYPES.NEW)
 
     def fileSave(self):
         """
 
     def fileSave(self):
         """
index 2c142b4df8ede714256ddcce292e6881d77fb815..dfc47338f1d9e05086279bc9958d71954827a46b 100644 (file)
@@ -29,6 +29,7 @@ mypkgpython_PYTHON = \
                     datassimModuleHelper.py \
                     datassimStudyEditor.py \
                     studyedit.py \
                     datassimModuleHelper.py \
                     datassimStudyEditor.py \
                     studyedit.py \
+                    datassimCase.py \
                     enumerate.py
 
 
                     enumerate.py
 
 
diff --git a/src/daSalome/daGUI/daGuiImpl/datassimCase.py b/src/daSalome/daGUI/daGuiImpl/datassimCase.py
new file mode 100644 (file)
index 0000000..e37c9af
--- /dev/null
@@ -0,0 +1,32 @@
+# -*- coding: iso-8859-1 -*-
+#  Copyright (C) 2010 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
+#  License as published by the Free Software Foundation; either
+#  version 2.1 of the License.
+#
+#  This library is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  Lesser General Public License for more details.
+#
+#  You should have received a copy of the GNU Lesser General Public
+#  License along with this library; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+#  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+class DatassimCase:
+
+  __name = "new_case"
+
+  def __init__(self):
+    pass
+
+  def get_name(self):
+    return self.__name
+
+  def set_name(self, name):
+    self.__name = name
index 9d53d56a4dc5cc58a6663d5b56d48d010357cadf..231d7cbaee604cfc10c1a96ff0a90d48e24bc822 100644 (file)
@@ -31,12 +31,15 @@ import SalomePyQt
 sgPyQt = SalomePyQt.SalomePyQt()
 
 from daGuiImpl.enumerate import Enumerate
 sgPyQt = SalomePyQt.SalomePyQt()
 
 from daGuiImpl.enumerate import Enumerate
+from daGuiImpl.datassimCase import DatassimCase
 from daEficasWrapper.datassimEficasWrapper import DatassimEficasWrapper
 from daEficasWrapper.eficasWrapper import EficasObserver
 from daEficasWrapper.eficasWrapper import EficasEvent
 import datassimGuiHelper
 import datassimStudyEditor
 
 from daEficasWrapper.datassimEficasWrapper import DatassimEficasWrapper
 from daEficasWrapper.eficasWrapper import EficasObserver
 from daEficasWrapper.eficasWrapper import EficasEvent
 import datassimGuiHelper
 import datassimStudyEditor
 
+__cases__ = {}
+
 #
 # ==============================================================================
 # Classes to manage the building of UI components
 #
 # ==============================================================================
 # Classes to manage the building of UI components
@@ -106,12 +109,6 @@ class DatassimGuiActionImpl(EficasObserver):
             print msg
 
     def newDatassimCase(self):
             print msg
 
     def newDatassimCase(self):
-      print "newDatassimCase"
-      salomeStudyId   = datassimGuiHelper.getActiveStudyId()
-      salomeStudyItem = datassimStudyEditor.addInStudy(salomeStudyId, "newDatassimCase")
-      datassimGuiHelper.refreshObjectBrowser()
-      callbackId = [salomeStudyId, salomeStudyItem]
-      self.__dlgEficasWrapper.setCallbackId(callbackId)
       self.__dlgEficasWrapper.displayNew()
 
     # ==========================================================================
       self.__dlgEficasWrapper.displayNew()
 
     # ==========================================================================
@@ -119,7 +116,9 @@ class DatassimGuiActionImpl(EficasObserver):
     #
     __processOptions={
         EficasEvent.EVENT_TYPES.CLOSE : "_processEficasCloseEvent",
     #
     __processOptions={
         EficasEvent.EVENT_TYPES.CLOSE : "_processEficasCloseEvent",
-        EficasEvent.EVENT_TYPES.SAVE  : "_processEficasSaveEvent"
+        EficasEvent.EVENT_TYPES.SAVE  : "_processEficasSaveEvent",
+        EficasEvent.EVENT_TYPES.NEW  : "_processEficasNewEvent",
+        EficasEvent.EVENT_TYPES.DESTROY  : "_processEficasDestroyEvent"
         }
     def processEficasEvent(self, eficasWrapper, eficasEvent):
         """
         }
     def processEficasEvent(self, eficasWrapper, eficasEvent):
         """
@@ -135,6 +134,17 @@ class DatassimGuiActionImpl(EficasObserver):
         print "Remove datassim case in study if empty..."
         pass
 
         print "Remove datassim case in study if empty..."
         pass
 
+    def _processEficasNewEvent(self, eficasWrapper, eficasEvent):
+      global __cases__
+      new_case = DatassimCase()
+      salomeStudyId   = datassimGuiHelper.getActiveStudyId()
+      salomeStudyItem = datassimStudyEditor.addInStudy(salomeStudyId, new_case)
+      case_key = (salomeStudyId, salomeStudyItem)
+      __cases__[case_key] = new_case
+      datassimGuiHelper.refreshObjectBrowser()
+      callbackId = [salomeStudyId, salomeStudyItem]
+      self.__dlgEficasWrapper.setCallbackId(callbackId)
+
     def _processEficasSaveEvent(self, eficasWrapper, eficasEvent):
         callbackId = eficasEvent.callbackId
         if callbackId is None:
     def _processEficasSaveEvent(self, eficasWrapper, eficasEvent):
         callbackId = eficasEvent.callbackId
         if callbackId is None:
@@ -143,11 +153,27 @@ class DatassimGuiActionImpl(EficasObserver):
         if ( targetSalomeStudyId is None ) or ( targetSalomeStudyItem is None ):
             raise DevelException("the parameters targetSalomeStudyId and targetSalomeStudyItem should not be None")
 
         if ( targetSalomeStudyId is None ) or ( targetSalomeStudyItem is None ):
             raise DevelException("the parameters targetSalomeStudyId and targetSalomeStudyItem should not be None")
 
-        file_name = eficasWrapper.getCurrentFileName()
-        datassimStudyEditor.updateItem(targetSalomeStudyId, targetSalomeStudyItem, file_name)
-        #studyCase = omaStudyEditor.getOmaCaseFromItem(targetSalomeStudyId, targetSalomeStudyItem)
-        #studyCase = eficasWrapper.getData(studyCase)
-        #logger.debug("jdc="+str(studyCase.userdata.getJdc()))
+        # Get Editor All infos we need !
+        file_name = eficasWrapper.getCaseName()
+        if file_name != "" :
+          case_key = (targetSalomeStudyId, targetSalomeStudyItem)
+          case =__cases__[case_key]
+          case.set_name(file_name)
+          datassimStudyEditor.updateItem(targetSalomeStudyId, targetSalomeStudyItem, case)
+          datassimGuiHelper.refreshObjectBrowser()
+
+    def _processEficasDestroyEvent(self, eficasWrapper, eficasEvent):
+        callbackId = eficasEvent.callbackId
+        if callbackId is None:
+            raise DevelException("the callback data should not be None. Can't guess what are the study and case")
+        [targetSalomeStudyId,targetSalomeStudyItem] = callbackId
+        if ( targetSalomeStudyId is None ) or ( targetSalomeStudyItem is None ):
+            raise DevelException("the parameters targetSalomeStudyId and targetSalomeStudyItem should not be None")
+
+        case_key = (targetSalomeStudyId, targetSalomeStudyItem)
+        __cases__.pop(case_key)
+        datassimStudyEditor.removeItem(targetSalomeStudyId, targetSalomeStudyItem)
+        datassimGuiHelper.refreshObjectBrowser()
 
     def _processEficasUnknownEvent(self, eficasWrapper, eficasEvent):
       print "Unknown Eficas Event"
 
     def _processEficasUnknownEvent(self, eficasWrapper, eficasEvent):
       print "Unknown Eficas Event"
index 42eac25c7b6728cce226d204a710a992cafea968..cd8af4b7f2abc25b825e5ed9a9919b95c9aec4b1 100644 (file)
@@ -23,6 +23,7 @@ __author__="aribes/gboulant"
 from enumerate import Enumerate
 import studyedit
 import datassimModuleHelper
 from enumerate import Enumerate
 import studyedit
 import datassimModuleHelper
+from daGuiImpl.datassimCase import DatassimCase
 
 #
 # ==============================================================================
 
 #
 # ==============================================================================
@@ -58,7 +59,7 @@ def addInStudy(salomeStudyId, datassimCase):
         engineName    = datassimModuleHelper.componentName(),
         componentName = datassimModuleHelper.componentUserName())
 
         engineName    = datassimModuleHelper.componentName(),
         componentName = datassimModuleHelper.componentUserName())
 
-    itemName  = datassimCase
+    itemName  = datassimCase.get_name()
     itemValue = ""
     itemType  = DATASSIM_ITEM_TYPES.DATASSIM_CASE
 
     itemValue = ""
     itemType  = DATASSIM_ITEM_TYPES.DATASSIM_CASE
 
@@ -75,7 +76,7 @@ def updateItem(salomeStudyId, salomeStudyItem, datassimCase):
 
     studyEditor = studyedit.getStudyEditor(salomeStudyId)
     
 
     studyEditor = studyedit.getStudyEditor(salomeStudyId)
     
-    itemName  = datassimCase
+    itemName  = datassimCase.get_name()
     itemValue = ""
 
     studyEditor.setItem(salomeStudyItem,
     itemValue = ""
 
     studyEditor.setItem(salomeStudyItem,
@@ -86,8 +87,6 @@ def removeItem(salomeStudyId, item):
     """
     Remove the item from the specified study.
     """
     """
     Remove the item from the specified study.
     """
-    if not isValidDatassimCaseItem(salomeStudyId, item):
-        return False
     studyEditor = studyedit.getStudyEditor(salomeStudyId)
     return studyEditor.removeItem(item,True)
 
     studyEditor = studyedit.getStudyEditor(salomeStudyId)
     return studyEditor.removeItem(item,True)
 
@@ -105,18 +104,3 @@ def isValidDatassimCaseItem(salomeStudyId,item):
         return False
 
     return True
         return False
 
     return True
-
-
-def getDatassimCaseFromItem(salomeStudyId, item):
-    """
-    Get the datassim case from the selected item.
-    Note that the study must be specify to retrieve the attributes value from
-    the item reference. The attribute values are stored in the study object.
-    """
-    if not isValidDatassimCaseItem(salomeStudyId, item):
-        return None
-
-    itemName  = item.GetName()
-    itemValue = item.GetComment()
-    return itemName
-