Salome HOME
Merge V8_3_BR branch.
[modules/smesh.git] / src / Tools / padder / spadderpy / gui / plugindialog.py
index 180dfe3cc2a27f661b55e5e92802184546e0a68e..4fec4e8d375a091325aa6d7f703ee01b3c5216b8 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2015  EDF R&D
+# Copyright (C) 2011-2016  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
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 # Author : Guillaume Boulant (EDF)
 #
 
 # Author : Guillaume Boulant (EDF)
 #
 
-from PyQt4.QtGui import QDialog, QIcon
-from PyQt4.QtCore import QObject, SIGNAL, SLOT, Qt
+from qtsalome import QDialog, QIcon, Qt
 
 from plugindialog_ui import Ui_PluginDialog
 
 from plugindialog_ui import Ui_PluginDialog
-from inputdialog import InputDialog
+from inputdialog import InputDialog, INPUTDATA_KEY_FILES, INPUTDATA_KEY_PARAM
+from inputdialog import PARAM_KEY_NBITER, PARAM_KEY_RMAXRMIN
 from inputdata import InputData
 # __GBO__: uncomment this line and comment the previous one to use the
 # demo input dialog instead of the real one.
 from inputdata import InputData
 # __GBO__: uncomment this line and comment the previous one to use the
 # demo input dialog instead of the real one.
@@ -87,16 +87,16 @@ class PluginDialog(QDialog):
         self.__ui.btnClear.setIcon(icon)
 
         # Then, we can connect the slot to there associated button event
         self.__ui.btnClear.setIcon(icon)
 
         # Then, we can connect the slot to there associated button event
-        self.connect(self.__ui.btnInput,       SIGNAL('clicked()'), self.onInput )
-        self.connect(self.__ui.btnCompute,     SIGNAL('clicked()'), self.onCompute )
-        self.connect(self.__ui.btnRefresh,     SIGNAL('clicked()'), self.onRefresh )
-        self.connect(self.__ui.btnPublish,     SIGNAL('clicked()'), self.onPublish )
-        self.connect(self.__ui.btnClear,       SIGNAL('clicked()'), self.onClear )
+       self.__ui.btnInput.clicked.connect( self.onInput )
+        self.__ui.btnCompute.clicked.connect( self.onCompute )
+        self.__ui.btnRefresh.clicked.connect( self.onRefresh )
+        self.__ui.btnPublish.clicked.connect( self.onPublish )
+        self.__ui.btnClear.clicked.connect( self.onClear )
 
         self.clear()
 
         self.setupJobManager()
 
         self.clear()
 
         self.setupJobManager()
-        
+
 
     def setupJobManager(self):
         '''
 
     def setupJobManager(self):
         '''
@@ -106,8 +106,8 @@ class PluginDialog(QDialog):
         the initialize step, by specifing the name of the resource to
         be used.
         '''
         the initialize step, by specifing the name of the resource to
         be used.
         '''
-        # We first 
-        
+        # We first
+
         configReader = ConfigReader()
         config = configReader.getLocalConfig()
         configId = config.resname
         configReader = ConfigReader()
         config = configReader.getLocalConfig()
         configId = config.resname
@@ -138,10 +138,10 @@ class PluginDialog(QDialog):
             # items in the object browser:
             self.__inputDialog.setWindowFlags(
                 self.__inputDialog.windowFlags() | Qt.WindowStaysOnTopHint)
             # items in the object browser:
             self.__inputDialog.setWindowFlags(
                 self.__inputDialog.windowFlags() | Qt.WindowStaysOnTopHint)
-            # The signal inputValidated emited from inputDialog is
+            # The signal inputValidated emitted from inputDialog is
             # connected to the slot function onProcessInput:
             # connected to the slot function onProcessInput:
-            self.connect(self.__inputDialog, SIGNAL('inputValidated()'), self.onProcessInput)
-            
+           self.__inputDialog.inputValidated.connect( self.onProcessInput )
+
         else:
             self.__ui.frameInput.setVisible(True)
             self.__ui.btnInput.setVisible(False)
         else:
             self.__ui.frameInput.setVisible(True)
             self.__ui.btnInput.setVisible(False)
@@ -151,13 +151,13 @@ class PluginDialog(QDialog):
 
     def getInputFrame(self):
         return self.__ui.frameInput
 
     def getInputFrame(self):
         return self.__ui.frameInput
-        
+
     def __setGuiState(self,states=["CAN_SELECT"]):
         if "CAN_SELECT" in states:
             self.__ui.btnInput.setEnabled(True)
         else:
             self.__ui.btnInput.setEnabled(False)
     def __setGuiState(self,states=["CAN_SELECT"]):
         if "CAN_SELECT" in states:
             self.__ui.btnInput.setEnabled(True)
         else:
             self.__ui.btnInput.setEnabled(False)
-            
+
         if "CAN_COMPUTE" in states:
             self.__ui.btnCompute.setEnabled(True)
         else:
         if "CAN_COMPUTE" in states:
             self.__ui.btnCompute.setEnabled(True)
         else:
@@ -201,7 +201,7 @@ class PluginDialog(QDialog):
     def __log(self, message):
         """
         This function prints the specified message in the log area
     def __log(self, message):
         """
         This function prints the specified message in the log area
-        """ 
+        """
         self.__ui.txtLog.append(message)
 
     def __exportMesh(self, meshName, meshObject):
         self.__ui.txtLog.append(message)
 
     def __exportMesh(self, meshName, meshObject):
@@ -219,6 +219,7 @@ class PluginDialog(QDialog):
         This function clears the log area and the states of the buttons
         """
         self.__listInputData = []
         This function clears the log area and the states of the buttons
         """
         self.__listInputData = []
+        self.__dictInputParameters = {}
         self.__ui.txtLog.clear()
         self.__setGuiState(["CAN_SELECT"])
         self.__isRunning = False
         self.__ui.txtLog.clear()
         self.__setGuiState(["CAN_SELECT"])
         self.__isRunning = False
@@ -242,7 +243,10 @@ class PluginDialog(QDialog):
         windows to process the validation event (see the slot
         onProcessInput which is connected to this event).
         '''
         windows to process the validation event (see the slot
         onProcessInput which is connected to this event).
         '''
-        self.__inputDialog.setData(self.__listInputData)
+        dictInputData = {}
+        dictInputData[INPUTDATA_KEY_FILES] = self.__listInputData
+        dictInputData[INPUTDATA_KEY_PARAM] = self.__dictInputParameters
+        self.__inputDialog.setData(dictInputData)
         self.__inputDialog.open()
 
     def onProcessInput(self):
         self.__inputDialog.open()
 
     def onProcessInput(self):
@@ -253,45 +257,56 @@ class PluginDialog(QDialog):
         """
         # The processing simply consists in requesting the input data
         # from the dialog window.
         """
         # The processing simply consists in requesting the input data
         # from the dialog window.
-        self.__listInputData = self.__inputDialog.getData()
+        dictInputData = self.__inputDialog.getData()
+        self.__listInputData = dictInputData[INPUTDATA_KEY_FILES]
+        self.__dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+
         self.__ui.lblStatusBar.setText("Input data OK")
         self.__log("INF: Press \"Compute\" to start the job")
         self.__setGuiState(["CAN_SELECT", "CAN_COMPUTE"])
         self.__ui.lblStatusBar.setText("Input data OK")
         self.__log("INF: Press \"Compute\" to start the job")
         self.__setGuiState(["CAN_SELECT", "CAN_COMPUTE"])
-        
+
     def onCompute(self):
         '''
         This function is the slot connected to the Compute button. It
         initializes a mesh computation job and start it using the
     def onCompute(self):
         '''
         This function is the slot connected to the Compute button. It
         initializes a mesh computation job and start it using the
-        SALOME launcher.  
+        SALOME launcher.
         '''
         # We first have to create the list of parameters for the
         # initialize function. For that, we have to create the files
         # from the mesh objects:
         '''
         # We first have to create the list of parameters for the
         # initialize function. For that, we have to create the files
         # from the mesh objects:
-        meshJobParameterList=[]
+        meshJobFileList=[]
         concreteIndex=0
         for inputData in self.__listInputData:
             # For each input data, we have to create a
         concreteIndex=0
         for inputData in self.__listInputData:
             # For each input data, we have to create a
-            # MeshJobParameter and add it to the list.
+            # MeshJobFile and add it to the list.
             filename  = self.__exportMesh(inputData.meshName, inputData.meshObject)
             if inputData.meshType == InputData.MESHTYPES.CONCRETE:
                 filetype = MESHJOB.MED_CONCRETE
             else:
                 filetype = MESHJOB.MED_STEELBAR
 
             filename  = self.__exportMesh(inputData.meshName, inputData.meshObject)
             if inputData.meshType == InputData.MESHTYPES.CONCRETE:
                 filetype = MESHJOB.MED_CONCRETE
             else:
                 filetype = MESHJOB.MED_STEELBAR
 
-            parameter = MESHJOB.MeshJobParameter(
+            parameter = MESHJOB.MeshJobFile(
                 file_name  = filename,
                 file_type  = filetype,
                 group_name = inputData.groupName)
                 file_name  = filename,
                 file_type  = filetype,
                 group_name = inputData.groupName)
+            meshJobFileList.append(parameter)
+
+        # And to create a list of the additional parameters.
+        # WARN: the CORBA interface requires string values.
+        meshJobParameterList=[]
+        for inputParameterKey in self.__dictInputParameters.keys():
+            value = self.__dictInputParameters[inputParameterKey]
+            parameter = MESHJOB.MeshJobParameter(name=inputParameterKey,value=str(value))
             meshJobParameterList.append(parameter)
 
         jobManager = self.__getJobManager()
             meshJobParameterList.append(parameter)
 
         jobManager = self.__getJobManager()
-        self.__jobid = jobManager.initialize(meshJobParameterList, self.__configId)
+        self.__jobid = jobManager.initialize(meshJobFileList, meshJobParameterList, self.__configId)
         if self.__jobid < 0:
             self.__log("ERR: the job can't be initialized")
             self.__log("ERR: %s"%jobManager.getLastErrorMessage())
             return
         self.__log("INF: the job has been initialized with jobid = "+str(self.__jobid))
         if self.__jobid < 0:
             self.__log("ERR: the job can't be initialized")
             self.__log("ERR: %s"%jobManager.getLastErrorMessage())
             return
         self.__log("INF: the job has been initialized with jobid = "+str(self.__jobid))
-        
+
         startOk = jobManager.start(self.__jobid)
         if not startOk:
             self.__log("ERR: the job with jobid = "+str(self.__jobid)+" can't be started")
         startOk = jobManager.start(self.__jobid)
         if not startOk:
             self.__log("ERR: the job with jobid = "+str(self.__jobid)+" can't be started")
@@ -327,7 +342,7 @@ class PluginDialog(QDialog):
         This function is the slot connected on the Publish button. It
         requests the mesh job manager to download the results data
         from the computation resource host and load the med file in
         This function is the slot connected on the Publish button. It
         requests the mesh job manager to download the results data
         from the computation resource host and load the med file in
-        the SALOME study. 
+        the SALOME study.
         """
         jobManager = self.__getJobManager()
         state = jobManager.getState(self.__jobid)
         """
         jobManager = self.__getJobManager()
         state = jobManager.getState(self.__jobid)
@@ -361,7 +376,7 @@ class PluginDialog(QDialog):
         meshname = 'padder_'+str(self.__jobid)
         smesh.SetName(outputMesh.GetMesh(), meshname)
         if salome.sg.hasDesktop():
         meshname = 'padder_'+str(self.__jobid)
         smesh.SetName(outputMesh.GetMesh(), meshname)
         if salome.sg.hasDesktop():
-            salome.sg.updateObjBrowser(0)
+            salome.sg.updateObjBrowser(False)
 
         self.__ui.lblStatusBar.setText("Publication OK")
         self.__setGuiState(["CAN_SELECT"])
 
         self.__ui.lblStatusBar.setText("Publication OK")
         self.__setGuiState(["CAN_SELECT"])
@@ -373,13 +388,13 @@ class PluginDialog(QDialog):
         one is running.
         """
         self.clear()
         one is running.
         """
         self.clear()
-        
+
 
 
 __dialog=None
 def getDialog():
     """
 
 
 __dialog=None
 def getDialog():
     """
-    This function returns a singleton instance of the plugin dialog. 
+    This function returns a singleton instance of the plugin dialog.
     """
     global __dialog
     if __dialog is None:
     """
     global __dialog
     if __dialog is None:
@@ -393,10 +408,9 @@ def getDialog():
 #
 def TEST_PluginDialog():
     import sys
 #
 def TEST_PluginDialog():
     import sys
-    from PyQt4.QtGui import QApplication
-    from PyQt4.QtCore import QObject, SIGNAL, SLOT
+    from qtsalome import QApplication
     app = QApplication(sys.argv)
     app = QApplication(sys.argv)
-    QObject.connect(app, SIGNAL("lastWindowClosed()"), app, SLOT("quit()"))
+    app.lastWindowClosed.connect( app.quit )
 
     dlg=PluginDialog()
     dlg.exec_()
 
     dlg=PluginDialog()
     dlg.exec_()
@@ -404,5 +418,5 @@ def TEST_PluginDialog():
 if __name__ == "__main__":
     TEST_PluginDialog()
 
 if __name__ == "__main__":
     TEST_PluginDialog()
 
-        
+