diff --git a/csaxs_bec/bec_widgets/widgets/tomo_params/tomo_params.py b/csaxs_bec/bec_widgets/widgets/tomo_params/tomo_params.py index 322cf2e..69d2298 100644 --- a/csaxs_bec/bec_widgets/widgets/tomo_params/tomo_params.py +++ b/csaxs_bec/bec_widgets/widgets/tomo_params/tomo_params.py @@ -1168,6 +1168,12 @@ class TomoQueueDialog(QDialog): header.setSectionResizeMode(col, QHeaderView.ResizeMode.ResizeToContents) header.setSectionResizeMode(1, QHeaderView.ResizeMode.Stretch) header.setSectionResizeMode(7, QHeaderView.ResizeMode.Stretch) + # Qt's own row-number gutter is 1-based and sits to the left of our + # own 0-based "#" column (which matches CLI indices -- tomo_queue_show(), + # tomo_queue_delete(), tomo_queue_move()) -- two different-based + # indices side by side was confusing. Keep only the one that means + # something. + self._table.verticalHeader().setVisible(False) self._table.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows) self._table.setEditTriggers(QTableWidget.EditTrigger.NoEditTriggers) self._table.itemSelectionChanged.connect(self._update_sort_buttons) @@ -1212,6 +1218,7 @@ class TomoQueueDialog(QDialog): def _refresh(self) -> None: jobs = self._load_queue() + registered_hooks = self._gv_get("tomo_at_each_angle_hooks") or [] self._table.setRowCount(len(jobs)) for row, job in enumerate(jobs): status = job.get("status", "pending") @@ -1237,7 +1244,7 @@ class TomoQueueDialog(QDialog): _format_projections(params), _fmt_num(params.get("tomo_countingtime")), _fmt_num(params.get("tomo_shellstep")), - "", + _format_hook_detail(params, registered_hooks), ] tooltip = _job_tooltip(job) for col, text in enumerate(cells): @@ -1749,6 +1756,19 @@ def _format_command_summary(job: dict) -> str: return " > ".join(parts) + f" [{idem}]" +def _format_hook_detail(params: dict, registered_hooks: list) -> str: + """Details-column text for a tomo job's at_each_angle_hook, or "" if + none is set -- mirrors flomni.py's _describe_active_hook() flagging an + unregistered name, using the published tomo_at_each_angle_hooks list + since the GUI process has no registry of its own to check against.""" + hook_name = params.get("at_each_angle_hook") + if not hook_name: + return "" + if hook_name in registered_hooks: + return f"hook: {hook_name}" + return f"hook: {hook_name} (not registered)" + + def _job_tooltip(job: dict) -> str: """Full-detail multi-line description of a queue job, applied to every cell in its row so hovering anywhere on the row shows what the Label