Skip to content

Commit b227459

Browse files
committed
Add have_results and have_geometry_results functions; update action handler to check for results
1 parent 52ef4fc commit b227459

4 files changed

Lines changed: 35 additions & 8 deletions

File tree

datalab/adapters_metadata/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from .common import (
1111
ResultData,
1212
create_resultdata_dict,
13+
have_geometry_results,
14+
have_results,
1315
resultadapter_to_html,
1416
show_resultdata,
1517
)
@@ -22,6 +24,8 @@
2224
"ResultData",
2325
"TableAdapter",
2426
"create_resultdata_dict",
27+
"have_results",
28+
"have_geometry_results",
2529
"resultadapter_to_html",
2630
"show_resultdata",
2731
]

datalab/adapters_metadata/common.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,10 +104,9 @@ def have_results(objs: list[SignalObj | ImageObj]) -> bool:
104104
Returns:
105105
True if any object has results, False otherwise
106106
"""
107-
return bool(
108-
any(GeometryAdapter.iterate_from_obj(obj) for obj in objs)
109-
or any(TableAdapter.iterate_from_obj(obj) for obj in objs)
110-
)
107+
return any(
108+
item for obj in objs for item in GeometryAdapter.iterate_from_obj(obj)
109+
) or any(item for obj in objs for item in TableAdapter.iterate_from_obj(obj))
111110

112111

113112
def have_geometry_results(objs: list[SignalObj | ImageObj]) -> bool:
@@ -119,7 +118,7 @@ def have_geometry_results(objs: list[SignalObj | ImageObj]) -> bool:
119118
Returns:
120119
True if any object has geometry results, False otherwise
121120
"""
122-
return bool(any(GeometryAdapter.iterate_from_obj(obj) for obj in objs))
121+
return any(item for obj in objs for item in GeometryAdapter.iterate_from_obj(obj))
123122

124123

125124
def create_resultdata_dict(

datalab/gui/actionhandler.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
from qtpy import QtGui as QG
4848
from qtpy import QtWidgets as QW
4949

50-
from datalab.adapters_metadata import GeometryAdapter, TableAdapter
50+
from datalab.adapters_metadata import GeometryAdapter, TableAdapter, have_results
5151
from datalab.config import Conf, _
5252
from datalab.gui import newobject
5353
from datalab.widgets import fitdialog
@@ -176,6 +176,15 @@ def with_annotations(
176176
"""At least one signal or image has annotations"""
177177
return any(obj.has_annotations() for obj in selected_objects)
178178

179+
@staticmethod
180+
# pylint: disable=unused-argument
181+
def with_results(
182+
selected_groups: list[ObjectGroup],
183+
selected_objects: list[SignalObj | ImageObj],
184+
) -> bool:
185+
"""At least one signal or image has results"""
186+
return have_results(selected_objects)
187+
179188

180189
class ActionCategory(enum.Enum):
181190
"""Action categories"""
@@ -353,6 +362,10 @@ def _delete_single_result(
353362
# Update properties panel to reflect the removal
354363
if obj is self.panel.objview.get_current_object():
355364
self.panel.objprop.update_properties_from(obj)
365+
# Update action states to reflect the removal
366+
selected_groups = self.panel.objview.get_sel_groups()
367+
selected_objects = self.panel.objview.get_sel_objects(include_groups=True)
368+
self.selected_objects_changed(selected_groups, selected_objects)
356369
# Refresh the plot to update the display
357370
# Use the same refresh pattern as delete_results() method
358371
self.panel.refresh_plot("selected", True, False)

datalab/gui/panel/base.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2797,16 +2797,23 @@ def get_objects_with_dialog(
27972797
return None
27982798

27992799
def __new_objprop_button(
2800-
self, title: str, icon: str, tooltip: str, callback: Callable
2800+
self,
2801+
title: str,
2802+
icon: str,
2803+
tooltip: str,
2804+
callback: Callable,
2805+
select_condition: Callable = None,
28012806
) -> QW.QPushButton:
28022807
"""Create new object property button"""
28032808
btn = QW.QPushButton(get_icon(icon), title, self)
28042809
btn.setToolTip(tooltip)
28052810
self.objprop.add_button(btn)
28062811
btn.clicked.connect(callback)
2812+
if select_condition is None:
2813+
select_condition = actionhandler.SelectCond.at_least_one
28072814
self.acthandler.add_action(
28082815
btn,
2809-
select_condition=actionhandler.SelectCond.at_least_one,
2816+
select_condition=select_condition,
28102817
)
28112818
return btn
28122819

@@ -2817,6 +2824,7 @@ def add_objprop_buttons(self) -> None:
28172824
"show_results.svg",
28182825
_("Show results obtained from previous analysis"),
28192826
self.show_results,
2827+
select_condition=actionhandler.SelectCond.with_results,
28202828
)
28212829

28222830
# Add checkbox to toggle result label visibility
@@ -3151,6 +3159,9 @@ def delete_results(self) -> None:
31513159
GeometryAdapter.remove_all_from(obj)
31523160
if obj is self.objview.get_current_object():
31533161
self.objprop.update_properties_from(obj)
3162+
# Update action states to reflect the removal
3163+
selected_groups = self.objview.get_sel_groups()
3164+
self.acthandler.selected_objects_changed(selected_groups, objs)
31543165
self.refresh_plot("selected", True, False)
31553166
else:
31563167
self.__show_no_result_warning()

0 commit comments

Comments
 (0)