Salome HOME
Copyright update 2020
[modules/smesh.git] / src / Tools / padder / spadderpy / gui / inputdialog.py
index 6920b43d5c8b77fc7faf1a74881c9416dcb010b8..e0211406ff4692c23b673f8fc547c4d0394fd13f 100644 (file)
@@ -1,10 +1,10 @@
 # -*- coding: iso-8859-1 -*-
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2013  EDF R&D
+# Copyright (C) 2011-2020  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
 #
 # 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.
+# version 2.1 of the License, or (at your option) any later version.
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 #
 # This library is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -30,19 +30,28 @@ from salome.smesh.smeshstudytools import SMeshStudyTools
 
 from omniORB import CORBA
 
 
 from omniORB import CORBA
 
-from PyQt4.QtCore import QObject, SIGNAL, SLOT
-from PyQt4.QtGui import QIcon, QStandardItemModel, QStandardItem, QMessageBox
+from qtsalome import QIcon, QStandardItemModel, QStandardItem, QMessageBox, pyqtSignal
 
 
-from inputframe_ui import Ui_InputFrame
-from inputdata import InputData
+from salome.smesh.spadder.gui.inputframe_ui import Ui_InputFrame
+from salome.smesh.spadder.gui.inputdata import InputData
 
 DEBUG_MODE=True
 GROUPNAME_MAXLENGTH=8
 
 
 DEBUG_MODE=True
 GROUPNAME_MAXLENGTH=8
 
+INPUTDATA_KEY_FILES="meshfiles"
+INPUTDATA_KEY_PARAM="parameters"
+
+PARAM_KEY_NBITER   = "NbIteration"
+PARAM_KEY_RMAXRMIN = "RmaxRmin"
+PARAM_NBITER_DEFAULT_VALUE = 10
+PARAM_RMAXRMIN_DEFAULT_VALUE = 3
+
 class InputDialog(GenericDialog):
 
     TBL_HEADER_LABEL=["Input Mesh", "Output group name"]
 
 class InputDialog(GenericDialog):
 
     TBL_HEADER_LABEL=["Input Mesh", "Output group name"]
 
+    inputValidated = pyqtSignal()
+
     def __init__(self, parent=None, name="InputDialog", modal=0):
         """
         This initializes a dialog windows to define the input data of
     def __init__(self, parent=None, name="InputDialog", modal=0):
         """
         This initializes a dialog windows to define the input data of
@@ -54,7 +63,7 @@ class InputDialog(GenericDialog):
         GenericDialog.__init__(self, parent, name, modal)
         # Set up the user interface from Designer.
         self.__ui = Ui_InputFrame()
         GenericDialog.__init__(self, parent, name, modal)
         # Set up the user interface from Designer.
         self.__ui = Ui_InputFrame()
-        # BE CAREFULL HERE, the ui form is NOT drawn in the global
+        # BE CAREFUL HERE, the ui form is NOT drawn in the global
         # dialog (already containing some generic widgets) but in the
         # center panel created in the GenericDialog as a void
         # container for the form. The InputFrame form is supposed
         # dialog (already containing some generic widgets) but in the
         # center panel created in the GenericDialog as a void
         # container for the form. The InputFrame form is supposed
@@ -96,13 +105,13 @@ class InputDialog(GenericDialog):
         icon.addFile(os.path.join(iconfolder,"steelbar.png"))
         self.__ui.cmbMeshType.setItemIcon(meshTypeIndex, icon)
         self.MESHTYPE_ICONS[meshTypeIndex] = icon
         icon.addFile(os.path.join(iconfolder,"steelbar.png"))
         self.__ui.cmbMeshType.setItemIcon(meshTypeIndex, icon)
         self.MESHTYPE_ICONS[meshTypeIndex] = icon
-        
+
         # The click on btnSmeshObject (signal clicked() emitted by the
         # button btnSmeshObject) is connected to the slot
         # onSelectSmeshObject, etc ...
         # The click on btnSmeshObject (signal clicked() emitted by the
         # button btnSmeshObject) is connected to the slot
         # onSelectSmeshObject, etc ...
-        self.connect(self.__ui.btnSmeshObject, SIGNAL('clicked()'), self.onSelectSmeshObject )
-        self.connect(self.__ui.btnAddInput,    SIGNAL('clicked()'), self.onAddInput )
-        self.connect(self.__ui.btnDeleteInput, SIGNAL('clicked()'), self.onDeleteInput )
+        self.__ui.btnSmeshObject.clicked.connect( self.onSelectSmeshObject )
+        self.__ui.btnAddInput.clicked.connect( self.onAddInput )
+        self.__ui.btnDeleteInput.clicked.connect(  self.onDeleteInput )
 
         # Set up the model of the Qt table list
         self.__inputModel = QStandardItemModel(0,2)
 
         # Set up the model of the Qt table list
         self.__inputModel = QStandardItemModel(0,2)
@@ -112,7 +121,11 @@ class InputDialog(GenericDialog):
         self.__ui.tblListInput.horizontalHeader().setStretchLastSection(True)
         # Note that the type is not display explicitly in the Qt table
         # because it is specified using an icon on the text of the
         self.__ui.tblListInput.horizontalHeader().setStretchLastSection(True)
         # Note that the type is not display explicitly in the Qt table
         # because it is specified using an icon on the text of the
-        # name item. 
+        # name item.
+
+        # Setup default values for numerical parameters
+        self.__ui.txtParamNbIter.setValue(PARAM_NBITER_DEFAULT_VALUE)
+        self.__ui.txtParamRmaxRmin.setValue(PARAM_RMAXRMIN_DEFAULT_VALUE)
 
         # Note that PADDER does not support group name longer than 8
         # characters. We apply then this limit in the gui field.
 
         # Note that PADDER does not support group name longer than 8
         # characters. We apply then this limit in the gui field.
@@ -134,7 +147,7 @@ class InputDialog(GenericDialog):
             self.__ui.txtSmeshObject.setEnabled(False)
             self.__ui.btnAddInput.setEnabled(False)
         self.__selectedMesh = None
             self.__ui.txtSmeshObject.setEnabled(False)
             self.__ui.btnAddInput.setEnabled(False)
         self.__selectedMesh = None
-        self.__dictInputData = {}
+        self.__dictInputFiles = {}
         self.__nbConcreteMesh = 0
         self.__nbSteelbarMesh = 0
 
         self.__nbConcreteMesh = 0
         self.__nbSteelbarMesh = 0
 
@@ -148,7 +161,7 @@ class InputDialog(GenericDialog):
         # been validated so that it can process the event
         GenericDialog.accept(self)
         if self.wasOk():
         # been validated so that it can process the event
         GenericDialog.accept(self)
         if self.wasOk():
-            self.emit(SIGNAL('inputValidated()'))
+            self.inputValidated.emit()
 
     def onSelectSmeshObject(self):
         '''
 
     def onSelectSmeshObject(self):
         '''
@@ -165,7 +178,7 @@ class InputDialog(GenericDialog):
             self.__selectedMesh = None
             return
 
             self.__selectedMesh = None
             return
 
-        self.smeshStudyTool.updateStudy(studyedit.getActiveStudyId())
+        self.smeshStudyTool.updateStudy()
         self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
         if CORBA.is_nil(self.__selectedMesh):
             self.__ui.txtSmeshObject.setText("The selected object is not a mesh")
         self.__selectedMesh = self.smeshStudyTool.getMeshObjectFromSObject(mySObject)
         if CORBA.is_nil(self.__selectedMesh):
             self.__ui.txtSmeshObject.setText("The selected object is not a mesh")
@@ -188,10 +201,10 @@ class InputDialog(GenericDialog):
         creates a new entry in the list of input data, or updates this
         entry if it already exists.
         """
         creates a new entry in the list of input data, or updates this
         entry if it already exists.
         """
-        meshName   = str(self.__ui.txtSmeshObject.text().trimmed())
+        meshName   = str(self.__ui.txtSmeshObject.text()).strip()
         meshObject = self.__selectedMesh
         meshType   = self.__ui.cmbMeshType.currentIndex()
         meshObject = self.__selectedMesh
         meshType   = self.__ui.cmbMeshType.currentIndex()
-        groupName  = str(self.__ui.txtGroupName.text().trimmed())
+        groupName  = str(self.__ui.txtGroupName.text()).strip()
 
         self.__addInputInGui(meshName, meshObject, meshType, groupName)
         self.__addInputInMap(meshName, meshObject, meshType, groupName)
 
         self.__addInputInGui(meshName, meshObject, meshType, groupName)
         self.__addInputInMap(meshName, meshObject, meshType, groupName)
@@ -227,26 +240,26 @@ class InputDialog(GenericDialog):
         """
         # if the entry already exists, we remove it to replace by a
         # new one
         """
         # if the entry already exists, we remove it to replace by a
         # new one
-        if self.__dictInputData.has_key(meshName):
+        if meshName in self.__dictInputFiles:
             self.__delInputFromMap(meshName)
             self.__delInputFromMap(meshName)
-        
+
         inputData = InputData()
         inputData.meshName   = meshName
         inputData.meshObject = meshObject
         inputData.meshType   = meshType
         inputData.groupName  = groupName
         # The key of the map is the mesh name
         inputData = InputData()
         inputData.meshName   = meshName
         inputData.meshObject = meshObject
         inputData.meshType   = meshType
         inputData.groupName  = groupName
         # The key of the map is the mesh name
-        self.__dictInputData[meshName] = inputData
+        self.__dictInputFiles[meshName] = inputData
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh += 1
         else:
             self.__nbSteelbarMesh += 1
 
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh += 1
         else:
             self.__nbSteelbarMesh += 1
 
-        print inputData
-        print "meshType = ",inputData.meshType
-        print "nb concrete mesh ",self.__nbConcreteMesh
-        print "nb steelbar mesh ",self.__nbSteelbarMesh
-            
+        print(inputData)
+        print("meshType = ",inputData.meshType)
+        print("nb concrete mesh ",self.__nbConcreteMesh)
+        print("nb steelbar mesh ",self.__nbSteelbarMesh)
+
 
     def onDeleteInput(self):
         """
 
     def onDeleteInput(self):
         """
@@ -266,47 +279,65 @@ class InputDialog(GenericDialog):
     def __delInputFromMap(self, meshName):
         """
         This function removes the specified entry from the internal
     def __delInputFromMap(self, meshName):
         """
         This function removes the specified entry from the internal
-        map (for data management purpose) 
+        map (for data management purpose)
         """
         """
-        inputData = self.__dictInputData.pop(meshName)
+        inputData = self.__dictInputFiles.pop(meshName)
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh -= 1
         else:
             self.__nbSteelbarMesh -= 1
 
         if inputData.meshType == InputData.MESHTYPES.CONCRETE:
             self.__nbConcreteMesh -= 1
         else:
             self.__nbSteelbarMesh -= 1
 
-        print inputData
-        print "nb concrete mesh ",self.__nbConcreteMesh
-        print "nb steelbar mesh ",self.__nbSteelbarMesh
+        print(inputData)
+        print("nb concrete mesh ",self.__nbConcreteMesh)
+        print("nb steelbar mesh ",self.__nbSteelbarMesh)
 
 
 
 
-    def setData(self, listInputData=[]):
+    def setData(self, dictInputData={}):
         """
         This function fills the dialog widgets with values provided by
         the specified data list.
         """
         self.clear()
         """
         This function fills the dialog widgets with values provided by
         the specified data list.
         """
         self.clear()
-        for inputData in listInputData:
+        if INPUTDATA_KEY_FILES in dictInputData:
+            listInputData = dictInputData["meshfiles"]
+            for inputData in listInputData:
 
 
-            meshName   = inputData.meshName
-            meshObject = inputData.meshObject
-            meshType   = inputData.meshType
-            groupName  = inputData.groupName
-            
-            self.__addInputInGui(meshName, meshObject, meshType, groupName)
-            self.__addInputInMap(meshName, meshObject, meshType, groupName)
+                meshName = inputData.meshName
+                meshObject = inputData.meshObject
+                meshType = inputData.meshType
+                groupName = inputData.groupName
 
 
-            if not DEBUG_MODE:
-                self.onSelectSmeshObject()
+                self.__addInputInGui(meshName, meshObject, meshType, groupName)
+                self.__addInputInMap(meshName, meshObject, meshType, groupName)
+
+                if not DEBUG_MODE:
+                    self.onSelectSmeshObject()
+
+        if INPUTDATA_KEY_PARAM in dictInputData:
+            dictInputParameters = dictInputData[INPUTDATA_KEY_PARAM]
+            if PARAM_KEY_NBITER in dictInputParameters:
+                self.__ui.txtParamNbIter.setValue(dictInputParameters[PARAM_KEY_NBITER])
+            if PARAM_KEY_RMAXRMIN in dictInputParameters:
+                self.__ui.txtParamRminRmax.setValue(dictInputParameters[PARAM_KEY_RMAXRMIN])
 
     def getData(self):
         """
         This function returns a list of InputData that corresponds to
         the data in the dialog widgets of the current dialog.
         """
 
     def getData(self):
         """
         This function returns a list of InputData that corresponds to
         the data in the dialog widgets of the current dialog.
         """
+        # Get the list of mesh files
         # Note that the values() function returns a copy of the list
         # of values.
         # Note that the values() function returns a copy of the list
         # of values.
-        return self.__dictInputData.values()
-        
+        dictInputData={}
+        dictInputData[INPUTDATA_KEY_FILES] = self.__dictInputFiles.values()
+
+        # Get the list of additionnal parameters
+        dictInputParameters = {}
+        dictInputParameters[PARAM_KEY_NBITER] = self.__ui.txtParamNbIter.value()
+        dictInputParameters[PARAM_KEY_RMAXRMIN] = self.__ui.txtParamRmaxRmin.value()
+        dictInputData[INPUTDATA_KEY_PARAM] = dictInputParameters
+        return dictInputData
+
     def checkData(self):
         """
         This function checks if the data are valid, from the dialog
     def checkData(self):
         """
         This function checks if the data are valid, from the dialog
@@ -314,7 +345,7 @@ class InputDialog(GenericDialog):
         """
         if self.__nbConcreteMesh == 0 and self.__nbSteelbarMesh == 0:
             self.checkDataMessage = "You must define at least one mesh (CONCRETE or STEELBAR)"
         """
         if self.__nbConcreteMesh == 0 and self.__nbSteelbarMesh == 0:
             self.checkDataMessage = "You must define at least one mesh (CONCRETE or STEELBAR)"
-            return False        
+            return False
         if self.__nbConcreteMesh > 1:
             self.checkDataMessage  = "You define multiple CONCRETE meshes."
             self.checkDataMessage += "You should verify first that your version of PADDER support this configuration."
         if self.__nbConcreteMesh > 1:
             self.checkDataMessage  = "You define multiple CONCRETE meshes."
             self.checkDataMessage += "You should verify first that your version of PADDER support this configuration."
@@ -331,26 +362,24 @@ class InputDialog(GenericDialog):
 #
 def TEST_InputDialog():
     import sys
 #
 def TEST_InputDialog():
     import sys
-    from PyQt4.QtCore import QObject, SIGNAL, SLOT
-    from PyQt4.QtGui import QApplication
+    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=InputDialog()
     dlg.displayAndWait()
     if dlg.wasOk():
 
     dlg=InputDialog()
     dlg.displayAndWait()
     if dlg.wasOk():
-        print "OK has been pressed"
+        print("OK has been pressed")
 
 def TEST_InputDialog_setData():
     import sys
 
 def TEST_InputDialog_setData():
     import sys
-    from PyQt4.QtCore import QObject, SIGNAL, SLOT
-    from PyQt4.QtGui import QApplication
+    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=InputDialog()
 
 
     dlg=InputDialog()
 
-    from inputdata import InputData
+    from .inputdata import InputData
     inputData = InputData()
     inputData.meshName   = "myMesh"
     inputData.meshObject = None
     inputData = InputData()
     inputData.meshName   = "myMesh"
     inputData.meshObject = None
@@ -358,14 +387,14 @@ def TEST_InputDialog_setData():
     inputData.groupName  = "myGroup"
     listInputData = []
     listInputData.append(inputData)
     inputData.groupName  = "myGroup"
     listInputData = []
     listInputData.append(inputData)
-    
+
     dlg.setData2(listInputData)
     dlg.setData2(listInputData)
-    
+
     dlg.displayAndWait()
     if dlg.wasOk():
     dlg.displayAndWait()
     if dlg.wasOk():
-        print "OK has been pressed"
+        print("OK has been pressed")
         outputListInputData = dlg.getData2()
         outputListInputData = dlg.getData2()
-        print outputListInputData
+        print(outputListInputData)
 
 
 if __name__ == "__main__":
 
 
 if __name__ == "__main__":