fix(gui_tools): minimal ring progress bar safeguard in order to not interupt any script using it

This commit is contained in:
2026-05-22 17:17:20 +02:00
parent 541c3829b1
commit f3c8704f4a
@@ -1,8 +1,12 @@
import builtins
import time
from bec_lib import bec_logger
# from csaxs_bec.bec_ipython_client.plugins.cSAXS import epics_get, epics_put, fshopen, fshclose
logger = bec_logger.logger
if builtins.__dict__.get("bec") is not None:
bec = builtins.__dict__.get("bec")
dev = builtins.__dict__.get("dev")
@@ -209,18 +213,21 @@ class flomniGuiTools:
return True
def flomnigui_show_progress(self):
self.flomnigui_show_gui()
if self._flomnigui_is_missing("progressbar"):
self.flomnigui_remove_all_docks()
# Add a new dock with a RingProgressBar widget
self.progressbar = self.gui.flomni.new("RingProgressBar")
try:
self.flomnigui_show_gui()
if self._flomnigui_is_missing("progressbar"):
self.flomnigui_remove_all_docks()
# Add a new dock with a RingProgressBar widget
self.progressbar = self.gui.flomni.new("RingProgressBar")
# Setting multiple rings with different values
self.progressbar.add_ring().set_update("manual")
self.progressbar.add_ring().set_update("manual")
self.progressbar.add_ring().set_update("scan")
# Setting multiple rings with different values
self.progressbar.add_ring().set_update("manual")
self.progressbar.add_ring().set_update("manual")
self.progressbar.add_ring().set_update("scan")
self._flomnigui_update_progress()
self._flomnigui_update_progress()
except Exception as e:
logger.warning(f"Error in flomnigui_show_progress: {e}")
def _flomnigui_update_progress(self):
"""Update the progress ring bar and center label from the current progress state.
@@ -231,9 +238,13 @@ class flomniGuiTools:
client.get_global_var("tomo_progress")
"""
main_progress_ring = self.progressbar.rings[0]
subtomo_progress_ring = self.progressbar.rings[1]
if self.progressbar is not None:
try:
if self.progressbar is None:
logger.warning("flOMNI progress GUI update skipped: progressbar is not available.")
return
main_progress_ring = self.progressbar.rings[0]
subtomo_progress_ring = self.progressbar.rings[1]
progress = self.progress["projection"] / self.progress["total_projections"] * 100
subtomo_progress = (
self.progress["subtomo_projection"]
@@ -247,6 +258,7 @@ class flomniGuiTools:
start_str = self.progress.get("tomo_start_time")
if start_str is not None:
import datetime as _dt
start_display = _dt.datetime.fromisoformat(start_str).strftime("%Y-%m-%d %H:%M:%S")
else:
start_display = "N/A"
@@ -255,6 +267,7 @@ class flomniGuiTools:
remaining_s = self.progress.get("estimated_remaining_time")
if remaining_s is not None and remaining_s >= 0:
import datetime as _dt
remaining_s = int(remaining_s)
h, rem = divmod(remaining_s, 3600)
m, s = divmod(rem, 60)
@@ -281,6 +294,8 @@ class flomniGuiTools:
f" Est. remaining: {eta_display}"
)
self.progressbar.set_center_label(text)
except Exception as exc:
logger.warning(f"flOMNI progress GUI update skipped: {exc}")
if __name__ == "__main__":