Skip to content

Commit

Permalink
FEM: examplesgui, enhancements
Browse files Browse the repository at this point in the history
- double click to setup example
- wait cursor when loading example
- sorting second level
  • Loading branch information
Sudhanshu-Dubey14 authored and berndhahnebach committed Jul 30, 2020
1 parent 30a87fa commit b737ed6
Showing 1 changed file with 39 additions and 17 deletions.
56 changes: 39 additions & 17 deletions src/Mod/Fem/femexamples/examplesgui.py
Expand Up @@ -89,6 +89,12 @@ def init_ui(self):
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"]])
Expand All @@ -103,24 +109,7 @@ def init_ui(self):
QtGui.QTreeWidgetItem(constraint_item, [info["name"]])

self.view.addTopLevelItem(all_constraints)
all_solvers = QtGui.QTreeWidgetItem(self.view, ["Solvers"])
for solver in solvers:
solver_item = QtGui.QTreeWidgetItem(all_solvers, [solver])
for example, info in files_info.items():
file_solvers = info["solvers"]
if solver in file_solvers:
QtGui.QTreeWidgetItem(solver_item, [info["name"]])

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])
Expand All @@ -129,6 +118,7 @@ def init_ui(self):
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])
Expand All @@ -138,8 +128,28 @@ def init_ui(self):

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])
for example, info in files_info.items():
file_solvers = info["solvers"]
if solver in file_solvers:
QtGui.QTreeWidgetItem(solver_item, [info["name"]])

self.view.addTopLevelItem(all_solvers)

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)
Expand Down Expand Up @@ -169,6 +179,7 @@ def clicked(self, button):
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]
Expand All @@ -186,6 +197,7 @@ def accept(self):
FreeCADGui.doCommand("setup(solvertype=\"{}\")".format(str(solver)))
else:
FreeCADGui.doCommand("setup()")
QtGui.QApplication.restoreOverrideCursor()

def reject(self):
self.close()
Expand All @@ -196,6 +208,7 @@ def closeEvent(self, ev):
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]
Expand All @@ -214,6 +227,7 @@ def run(self):
.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
Expand All @@ -225,9 +239,17 @@ def enable_buttons(self):
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()

0 comments on commit b737ed6

Please sign in to comment.