FEM: examplesgui, enhancements

- double click to setup example
- wait cursor when loading example
- sorting second level
This commit is contained in:
Sudhanshu Dubey
2020-07-30 08:10:15 +02:00
committed by Bernd Hahnebach
parent 30a87fa0e0
commit b737ed6a55

View File

@@ -89,6 +89,12 @@ class FemExamples(QtGui.QWidget):
for constraint in file_constraints:
constraints.add(constraint)
constraints = sorted(constraints)
meshes = sorted(meshes)
solvers = sorted(solvers)
equations = sorted(equations)
materials = sorted(materials)
all_examples = QtGui.QTreeWidgetItem(self.view, ["All"])
for example, info in files_info.items():
QtGui.QTreeWidgetItem(all_examples, [info["name"]])
@@ -103,6 +109,34 @@ class FemExamples(QtGui.QWidget):
QtGui.QTreeWidgetItem(constraint_item, [info["name"]])
self.view.addTopLevelItem(all_constraints)
all_equations = QtGui.QTreeWidgetItem(self.view, ["Equations"])
for equation in equations:
equation_item = QtGui.QTreeWidgetItem(all_equations, [equation])
for example, info in files_info.items():
if info["equation"] == equation:
QtGui.QTreeWidgetItem(equation_item, [info["name"]])
self.view.addTopLevelItem(all_equations)
all_materials = QtGui.QTreeWidgetItem(self.view, ["Materials"])
for material in materials:
material_item = QtGui.QTreeWidgetItem(all_materials, [material])
for example, info in files_info.items():
if info["material"] == material:
QtGui.QTreeWidgetItem(material_item, [info["name"]])
self.view.addTopLevelItem(all_materials)
all_meshes = QtGui.QTreeWidgetItem(self.view, ["Meshes"])
for mesh in meshes:
mesh_item = QtGui.QTreeWidgetItem(all_meshes, [mesh])
for example, info in files_info.items():
if info["meshelement"] == mesh:
QtGui.QTreeWidgetItem(mesh_item, [info["name"]])
self.view.addTopLevelItem(all_meshes)
all_solvers = QtGui.QTreeWidgetItem(self.view, ["Solvers"])
for solver in solvers:
solver_item = QtGui.QTreeWidgetItem(all_solvers, [solver])
@@ -113,33 +147,9 @@ class FemExamples(QtGui.QWidget):
self.view.addTopLevelItem(all_solvers)
all_meshes = QtGui.QTreeWidgetItem(self.view, ["Meshes"])
for mesh in meshes:
mesh_item = QtGui.QTreeWidgetItem(all_meshes, [mesh])
for example, info in files_info.items():
if info["meshelement"] == mesh:
QtGui.QTreeWidgetItem(mesh_item, [info["name"]])
self.view.addTopLevelItem(all_meshes)
all_equations = QtGui.QTreeWidgetItem(self.view, ["Equations"])
for equation in equations:
equation_item = QtGui.QTreeWidgetItem(all_equations, [equation])
for example, info in files_info.items():
if info["equation"] == equation:
QtGui.QTreeWidgetItem(equation_item, [info["name"]])
self.view.addTopLevelItem(all_equations)
all_materials = QtGui.QTreeWidgetItem(self.view, ["Materials"])
for material in materials:
material_item = QtGui.QTreeWidgetItem(all_materials, [material])
for example, info in files_info.items():
if info["material"] == material:
QtGui.QTreeWidgetItem(material_item, [info["name"]])
self.view.addTopLevelItem(all_materials)
self.view.setHeaderHidden(True)
self.view.itemClicked.connect(self.enable_buttons)
self.view.itemDoubleClicked.connect(self.double_clicked)
# Ok buttons:
self.button_box = QtGui.QDialogButtonBox(self)
@@ -169,6 +179,7 @@ class FemExamples(QtGui.QWidget):
self.reject()
def accept(self):
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
item = self.view.selectedItems()[0]
name = item.text(0)
example = self.files_name[name]
@@ -186,6 +197,7 @@ class FemExamples(QtGui.QWidget):
FreeCADGui.doCommand("setup(solvertype=\"{}\")".format(str(solver)))
else:
FreeCADGui.doCommand("setup()")
QtGui.QApplication.restoreOverrideCursor()
def reject(self):
self.close()
@@ -196,6 +208,7 @@ class FemExamples(QtGui.QWidget):
pw.deleteLater()
def run(self):
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
item = self.view.selectedItems()[0]
name = item.text(0)
example = self.files_name[name]
@@ -214,6 +227,7 @@ class FemExamples(QtGui.QWidget):
.format(str(example), str(solver)))
else:
FreeCADGui.doCommand("run_example(\"{}\")".format(str(example)))
QtGui.QApplication.restoreOverrideCursor()
def enable_buttons(self):
# only enable buttons if a example is selected
@@ -225,9 +239,17 @@ class FemExamples(QtGui.QWidget):
self.run_button.setEnabled(False)
self.setup_button.setEnabled(False)
def double_clicked(self):
# setup an example when it is double clicked
sel_item_text = self.view.selectedItems()[0].text(0)
if sel_item_text in self.files_name:
self.accept()
def show_examplegui():
QtGui.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
mw = FreeCADGui.getMainWindow()
example_widget = QtGui.QDockWidget("FEM Examples", mw)
example_widget.setWidget(FemExamples())
mw.addDockWidget(QtCore.Qt.RightDockWidgetArea, example_widget)
QtGui.QApplication.restoreOverrideCursor()