Skip to content

Commit

Permalink
Handle aiidalab#921
Browse files Browse the repository at this point in the history
  • Loading branch information
edan-bainglass committed Nov 11, 2024
1 parent 40248aa commit 1043a8c
Showing 1 changed file with 33 additions and 8 deletions.
41 changes: 33 additions & 8 deletions src/aiidalab_qe/app/result/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

from aiida.engine import ProcessState
from aiidalab_widgets_base import (
AiidaNodeViewWidget,
ProcessMonitor,
ProcessNodesTreeWidget,
WizardAppWidgetStep,
Expand Down Expand Up @@ -36,6 +35,8 @@ def __init__(self, model: ResultsModel, **kwargs):

self.rendered = False

self.node_views = {} # keep track of the node views

def render(self):
if self.rendered:
return
Expand All @@ -45,18 +46,14 @@ def render(self):
(self._model, "process_uuid"),
(self.process_tree, "value"),
)

self.node_view = AiidaNodeViewWidget(layout={"width": "auto", "height": "auto"})
ipw.dlink(
(self.process_tree, "selected_nodes"),
(self.node_view, "node"),
transform=lambda nodes: nodes[0] if nodes else None,
self.process_tree.observe(
self._on_node_selection_change,
"selected_nodes",
)

self.process_status = ipw.VBox(
children=[
self.process_tree,
self.node_view,
],
)

Expand Down Expand Up @@ -148,6 +145,9 @@ def _on_process_change(self, _):
self._update_kill_button_layout()
self._update_clean_scratch_button_layout()

def _on_node_selection_change(self, change):
self._update_node_view(change["new"])

def _on_kill_button_click(self, _):
self._model.kill_process()
self._update_kill_button_layout()
Expand All @@ -160,6 +160,31 @@ def _on_clean_scratch_button_click(self, _):
self._model.clean_remote_data()
self._update_clean_scratch_button_layout()

def _update_node_view(self, nodes):
"""Update the node view based on the selected nodes.
parameters
----------
`nodes`: `list`
List of selected nodes.
"""
from aiidalab_widgets_base.viewers import viewer

if not nodes:
return
# only show the first selected node
node = nodes[0]
# check if the viewer is already added
if node.uuid in self.node_views:
node_view = self.node_views[node.uuid]
else:
node_view = viewer(node)
self.node_views[node.uuid] = node_view
self.process_status.children = [
self.process_tree,
node_view,
]

def _update_kill_button_layout(self):
if not self.rendered:
return
Expand Down

0 comments on commit 1043a8c

Please sign in to comment.