Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use AWB's AiidaNodeViewWidget to handle node views #1161

Merged
merged 1 commit into from
Feb 15, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 9 additions & 48 deletions src/aiidalab_qe/app/result/components/status/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,15 @@

import ipywidgets as ipw

from aiida import orm
from aiidalab_qe.app.result.components import ResultsComponent
from aiidalab_qe.common.widgets import LoadingWidget
from aiidalab_widgets_base import ProcessNodesTreeWidget
from aiidalab_widgets_base.viewers import viewer as node_viewer
from aiidalab_widgets_base.viewers import AiidaNodeViewWidget

from .model import WorkChainStatusModel
from .tree import SimplifiedProcessTree, SimplifiedProcessTreeModel


class WorkChainStatusPanel(ResultsComponent[WorkChainStatusModel]):
def __init__(self, model: WorkChainStatusModel, **kwargs):
super().__init__(model=model, **kwargs)
self.node_views = {} # node-view cache
self.node_view_loading_message = LoadingWidget("Loading node view")

def _render(self):
model = SimplifiedProcessTreeModel()
self.simplified_process_tree = SimplifiedProcessTree(model=model)
Expand All @@ -35,10 +28,6 @@ def _render(self):
)

self.process_tree = ProcessNodesTreeWidget()
self.process_tree.observe(
self._on_node_selection_change,
"selected_nodes",
)
ipw.dlink(
(self._model, "process_uuid"),
(self.process_tree, "value"),
Expand All @@ -53,8 +42,12 @@ def _render(self):
)
self.reset_button.on_click(self._reset_process_tree)

self.node_view_container = ipw.VBox(layout=ipw.Layout(height="100%"))
self.node_view_container.add_class("node-view-container")
self.node_view = AiidaNodeViewWidget()
ipw.dlink(
(self.process_tree, "selected_nodes"),
(self.node_view, "node"),
transform=lambda nodes: nodes[0] if nodes else None,
)

self.to_advanced_view_button = ipw.Button(
description="View in advanced panel",
Expand All @@ -74,7 +67,7 @@ def _render(self):
simplified_tree_node_view_container = ipw.VBox(
children=[
self.to_advanced_view_button,
self.node_view_container,
self.node_view,
],
)

Expand All @@ -90,7 +83,7 @@ def _render(self):
children=[
self.reset_button,
self.process_tree,
self.node_view_container,
self.node_view,
],
)
advanced_view.add_class("advanced-view")
Expand Down Expand Up @@ -129,45 +122,13 @@ def _on_calculation_link_click(self, change):
if selected_node_uuid := change["new"]:
self.process_tree.value = selected_node_uuid

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

def _switch_to_advanced_view(self, _):
self.accordion.selected_index = 1

def _update_process_tree(self):
if self.rendered:
self.process_tree.update()

def _update_node_view(self, nodes, refresh=False):
"""Update the node view based on the selected nodes.

parameters
----------
`nodes`: `list`
List of selected nodes.
`refresh`: `bool`, optional
If True, the viewer will be refreshed.
Occurs when user presses the "Update results" button.
"""

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 and not refresh:
self.node_view = self.node_views[node.uuid]
elif not isinstance(node, orm.WorkChainNode):
self.node_view_container.children = [self.node_view_loading_message]
self.node_view = node_viewer(node)
self.node_views[node.uuid] = self.node_view
else:
self.node_view = ipw.HTML("No viewer available for this node.")

self.node_view_container.children = [self.node_view]

def _reset_process_tree(self, _):
if not self.rendered:
return
Expand Down
Loading