class SolutionDomainView(QWidget, Ui_SolutionDomainForm): """ """ def __init__(self, parent, case, stbar, tree): """ Constructor """ QWidget.__init__(self, parent) Ui_SolutionDomainForm.__init__(self) self.setupUi(self) self.root = parent self.stbar = stbar self.case = case self.browser = tree self.case.undoStopGlobal() self.mdl = SolutionDomainModel(self.case) # 0) Mesh Input self.mesh_input = self.mdl.getMeshInput() if self.mesh_input: self.radioButtonImport.setChecked(False) self.radioButtonExists.setChecked(True) self.frameMeshImport.hide() self.lineEditMeshInput.setText(self.mesh_input) else: self.radioButtonImport.setChecked(True) self.radioButtonExists.setChecked(False) self.frameMeshInput.hide() self.radioButtonImport.clicked.connect(self.slotSetImportMesh) self.radioButtonExists.clicked.connect(self.slotSetInputMesh) self.toolButtonMeshInput.pressed.connect(self.selectInputMesh) self.lineEditMeshInput.textChanged[str].connect(self.modifyInputMesh) # 1) Meshes directory self.mesh_dirs = [None] d = self.mdl.getMeshDir() study_path = os.path.split(self.case['case_path'])[0] if d == None: d = os.path.join(study_path, 'MESH') elif not os.path.abspath(d): d = os.path.join(self.case['case_path'], d) if d != None: if os.path.isdir(d): self.lineEditMeshDir.setText( RelOrAbsPath(d, self.case['case_path'])) self.mesh_dirs[0] = d self.case['mesh_path'] = self.mesh_dirs[0] package = self.case['package'] # User and global mesh directories for config_file in [ package.get_user_configfile(), package.get_global_configfile() ]: cfg = configparser.ConfigParser() cfg.read(config_file) if cfg.has_option('run', 'meshpath'): cfg_mesh_dirs = cfg.get('run', 'meshpath').split(':') for d in cfg_mesh_dirs: self.mesh_dirs.append(d) del (package) # 2) Meshes selection layout # 2.1) Model for meshes table self.modelMeshes = StandardItemModelMeshes(self.mdl) self.tableViewMeshes.setModel(self.modelMeshes) self.tableViewMeshes.resizeColumnsToContents() self.tableViewMeshes.resizeRowsToContents() delegateName = MeshNameDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(0, delegateName) delegateFormat = MeshFormatDelegate(self.tableViewMeshes, self._tableViewLayout) self.tableViewMeshes.setItemDelegateForColumn(1, delegateFormat) delegateNumber = MeshNumberDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(2, delegateNumber) delegateGroupFaces = GroupDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(4, delegateGroupFaces) delegateGroupCells = GroupDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(5, delegateGroupCells) self.groupBoxMeshes.resizeEvent = self.MeshesResizeEvent # 2.2) Connections self.pushButtonAddMesh.clicked.connect(self.slotSearchMesh) self.pushButtonDeleteMesh.clicked.connect(self.slotDeleteMesh) # 3) Initialize meshes list # 3.1) Meshes default directory self.toolButtonMeshDir.pressed.connect(self.searchDir) self.toolButtonMeshDirClear.pressed.connect(self.clearDir) # 3.2) Meshes list msg = "" nameList = self.mdl.getMeshList() log.debug("__init__ -> nameList = %s " % nameList) if nameList: for i in range(len(nameList)): mesh = nameList[i] if mesh[1] != None: path = os.path.join(mesh[1], mesh[0]) else: path = mesh[0] if not os.path.isabs(path) and self.case['mesh_path'] != None: path = os.path.join(self.case['mesh_path'], path) if not (os.path.isfile(path) and os.path.isabs(path)): msg = msg + path + '\n' if msg != "": msg = msg + '\n' title = self.tr("WARNING") msg2 = self.tr( "The following mesh files are not present or\n" + "in the meshes directory search path:\n\n" + msg + "Verify existence and location of the mesh files,\n" + "and the 'Mesh Directory' section.") QMessageBox.warning(self, title, msg2) self._tableViewLayout() # Combomodels self.modelArg_cs_verif = ComboModel(self.comboBoxRunType, 4, 1) self.modelArg_cs_verif.addItem(self.tr("Import mesh only"), 'none') self.modelArg_cs_verif.addItem(self.tr("Mesh preprocessing only"), 'mesh preprocess') self.modelArg_cs_verif.addItem(self.tr("Mesh quality criteria only"), 'mesh quality') self.modelArg_cs_verif.addItem(self.tr("Standard Computation"), 'standard') self.modelArg_cs_verif.setItem(str_model=self.case['run_type']) if self.mesh_input != None: self.modelArg_cs_verif.disableItem(str_model='none') else: self.modelArg_cs_verif.enableItem(str_model='none') self.comboBoxRunType.activated[str].connect(self.slotArgRunType) # Checkboxes self.checkBoxMeshRestart.setChecked( not self.mdl.getPreprocessOnRestart()) self.checkBoxMeshRestart.clicked.connect(self.slotMeshRestart) self.checkBoxMeshSave.setChecked(self.mdl.getMeshSaveOnModify()) self.checkBoxMeshSave.clicked.connect(self.slotMeshSaveOnModify) # Undo/redo self.case.undoStartGlobal() # Update tree self.browser.configureTree(self.case)
class SolutionDomainView(QWidget, Ui_SolutionDomainForm): """ """ def __init__(self, parent, case, stbar, tree): """ Constructor """ QWidget.__init__(self, parent) Ui_SolutionDomainForm.__init__(self) self.setupUi(self) self.root = parent self.stbar = stbar self.case = case self.browser = tree self.case.undoStopGlobal() self.mdl = SolutionDomainModel(self.case) # 0) Mesh Input self.mesh_origin = self.mdl.getMeshOrigin() self.mesh_input = self.mdl.getMeshInput() if self.mesh_origin == "mesh_import": self.radioButtonImport.setChecked(True) self.radioButtonExists.setChecked(False) self.radioButtonCartesianMesh.setChecked(False) self.frameMeshInput.hide() self.frameMeshCartesian.hide() self.frameMeshImport.show() elif self.mesh_origin == "mesh_input": self.radioButtonImport.setChecked(False) self.radioButtonExists.setChecked(True) self.radioButtonCartesianMesh.setChecked(False) self.frameMeshImport.hide() self.frameMeshCartesian.hide() self.frameMeshInput.show() self.lineEditMeshInput.setText(self.mesh_input) elif self.mesh_origin == "mesh_cartesian": self.radioButtonImport.setChecked(False) self.radioButtonExists.setChecked(False) self.radioButtonCartesianMesh.setChecked(True) self.frameMeshInput.hide() self.frameMeshImport.hide() self.frameMeshCartesian.show() self.radioButtonImport.clicked.connect(self.slotSetImportMesh) self.radioButtonExists.clicked.connect(self.slotSetInputMesh) self.radioButtonCartesianMesh.clicked.connect( self.slotSetCartesianMesh) self.toolButtonMeshInput.pressed.connect(self.selectInputMesh) self.lineEditMeshInput.textChanged[str].connect(self.modifyInputMesh) self.cartParams = { "x_ncells": self.lineEditXNcells, "y_ncells": self.lineEditYNcells, "z_ncells": self.lineEditZNcells, "x_min": self.lineEditXmin, "x_max": self.lineEditXmax, "y_min": self.lineEditYmin, "y_max": self.lineEditYmax, "z_min": self.lineEditZmin, "z_max": self.lineEditZmax, "x_prog": self.lineEditXprog, "y_prog": self.lineEditYprog, "z_prog": self.lineEditZprog } # We use lambda to connect all 9 lineEdits to the same function. # val corresponds to the string, and "key=k" is necessary for the connect # method to evaluate 'k' during creation. Otherwise last value of 'k' is # used for all. for k in self.cartParams.keys(): self.cartParams[k].textChanged[str].connect( lambda val, key=k: self.slotSetCartesianParam(val, key)) # set validator if k.split("_")[1] == "ncells": _v = IntValidator(self.cartParams[k], min=1) self.cartParams[k].setValidator(_v) else: _v = DoubleValidator(self.cartParams[k]) self.cartParams[k].setValidator(_v) self.cartParams["x_law"] = ComboModel(self.comboBoxXlaw, 3, 1) self.cartParams["y_law"] = ComboModel(self.comboBoxYlaw, 3, 1) self.cartParams["z_law"] = ComboModel(self.comboBoxZlaw, 3, 1) for k in ("x_law", "y_law", "z_law"): self.cartParams[k].addItem(self.tr("constant"), "constant") self.cartParams[k].addItem(self.tr("geometric"), "geometric") self.cartParams[k].addItem(self.tr("parabolic"), "parabolic") self.comboBoxXlaw.activated[str].connect( lambda val: self.slotSetCartesianParam(val, "x_law")) self.comboBoxYlaw.activated[str].connect( lambda val: self.slotSetCartesianParam(val, "y_law")) self.comboBoxZlaw.activated[str].connect( lambda val: self.slotSetCartesianParam(val, "z_law")) # Set initial values for k in self.cartParams.keys(): d = k.split("_")[0] + "_direction" p = k.split("_")[1] val = self.mdl.getCartesianParam(d, p) self.slotSetCartesianParam(val, k) # 1) Meshes directory self.mesh_dirs = [None] d = self.mdl.getMeshDir() study_path = os.path.split(self.case['case_path'])[0] if d == None: d = os.path.join(study_path, 'MESH') elif not os.path.abspath(d): d = os.path.join(self.case['case_path'], d) if d != None: if os.path.isdir(d): self.lineEditMeshDir.setText( RelOrAbsPath(d, self.case['case_path'])) self.mesh_dirs[0] = d self.case['mesh_path'] = self.mesh_dirs[0] package = self.case['package'] # User and global mesh directories for config_file in [ package.get_user_configfile(), package.get_global_configfile() ]: cfg = configparser.ConfigParser() cfg.read(config_file) if cfg.has_option('run', 'meshpath'): cfg_mesh_dirs = cfg.get('run', 'meshpath').split(':') for d in cfg_mesh_dirs: self.mesh_dirs.append(d) del (package) # 2) Meshes selection layout # 2.1) Model for meshes table self.modelMeshes = StandardItemModelMeshes(self.mdl) self.tableViewMeshes.setModel(self.modelMeshes) self.tableViewMeshes.resizeColumnsToContents() self.tableViewMeshes.resizeRowsToContents() delegateName = MeshNameDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(0, delegateName) delegateFormat = MeshFormatDelegate(self.tableViewMeshes, self._tableViewLayout) self.tableViewMeshes.setItemDelegateForColumn(1, delegateFormat) delegateNumber = MeshNumberDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(2, delegateNumber) delegateGroupFaces = GroupDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(4, delegateGroupFaces) delegateGroupCells = GroupDelegate(self.tableViewMeshes) self.tableViewMeshes.setItemDelegateForColumn(5, delegateGroupCells) self.groupBoxMeshes.resizeEvent = self.MeshesResizeEvent # 2.2) Connections self.pushButtonAddMesh.clicked.connect(self.slotSearchMesh) self.pushButtonDeleteMesh.clicked.connect(self.slotDeleteMesh) # 3) Initialize meshes list # 3.1) Meshes default directory self.toolButtonMeshDir.pressed.connect(self.searchDir) self.toolButtonMeshDirClear.pressed.connect(self.clearDir) # 3.2) Meshes list msg = "" nameList = self.mdl.getMeshList() log.debug("__init__ -> nameList = %s " % nameList) if nameList: for i in range(len(nameList)): mesh = nameList[i] if mesh[1] != None: path = os.path.join(mesh[1], mesh[0]) else: path = mesh[0] if not os.path.isabs(path) and self.case['mesh_path'] != None: path = os.path.join(self.case['mesh_path'], path) if not (os.path.isfile(path) and os.path.isabs(path)): msg = msg + path + '\n' if msg != "": msg = msg + '\n' title = self.tr("WARNING") msg2 = self.tr( "The following mesh files are not present or\n" + "in the meshes directory search path:\n\n" + msg + "Verify existence and location of the mesh files,\n" + "and the 'Mesh Directory' section.") QMessageBox.warning(self, title, msg2) self._tableViewLayout() # Combomodels self.modelArg_cs_verif = ComboModel(self.comboBoxRunType, 4, 1) self.modelArg_cs_verif.addItem(self.tr("Import mesh only"), 'none') self.modelArg_cs_verif.addItem(self.tr("Mesh preprocessing only"), 'mesh preprocess') self.modelArg_cs_verif.addItem(self.tr("Mesh quality criteria only"), 'mesh quality') self.modelArg_cs_verif.addItem(self.tr("Standard Computation"), 'standard') self.modelArg_cs_verif.setItem(str_model=self.case['run_type']) if self.mesh_input != None: self.modelArg_cs_verif.disableItem(str_model='none') else: self.modelArg_cs_verif.enableItem(str_model='none') self.comboBoxRunType.activated[str].connect(self.slotArgRunType) # Checkboxes self.checkBoxMeshRestart.setChecked( not self.mdl.getPreprocessOnRestart()) self.checkBoxMeshRestart.clicked.connect(self.slotMeshRestart) self.checkBoxMeshSave.setChecked(self.mdl.getMeshSaveOnModify()) self.checkBoxMeshSave.clicked.connect(self.slotMeshSaveOnModify) # Undo/redo self.case.undoStartGlobal() # Update tree self.browser.configureTree(self.case)