diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/central_stops_flOMNI.pdf b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/central_stops_flOMNI.pdf new file mode 100644 index 0000000..e033747 Binary files /dev/null and b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/central_stops_flOMNI.pdf differ diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_calibrate_the_fzp_scanner.pdf b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_calibrate_the_fzp_scanner.pdf new file mode 100644 index 0000000..81ce9c8 Binary files /dev/null and b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_calibrate_the_fzp_scanner.pdf differ diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_limit_the_fzp_scanner_range.pdf b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_limit_the_fzp_scanner_range.pdf new file mode 100644 index 0000000..66e18ac Binary files /dev/null and b/csaxs_bec/bec_ipython_client/plugins/flomni/docs/local_contact_only-howto_limit_the_fzp_scanner_range.pdf differ diff --git a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py index be88123..1d93592 100644 --- a/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py +++ b/csaxs_bec/bec_ipython_client/plugins/flomni/gui_tools.py @@ -20,7 +20,6 @@ class flomniGuiTools: def __init__(self): self.text_box = None self.progressbar = None - self.pdf_viewer = None def set_client(self, client): self.client = client @@ -92,13 +91,12 @@ class flomniGuiTools: print("Cannot open camera_overview. Device does not exist.") def flomnigui_remove_all_docks(self): - dev.cam_flomni_overview.stop_live_mode() - dev.cam_flomni_gripper.stop_live_mode() - dev.cam_xeye.live_mode = False + #dev.cam_flomni_overview.stop_live_mode() + #dev.cam_flomni_gripper.stop_live_mode() + #dev.cam_xeye.live_mode = False self.gui.flomni.delete_all() self.progressbar = None self.text_box = None - self.pdf_viewer = None def flomnigui_idle(self): self.flomnigui_show_gui() @@ -116,26 +114,57 @@ class flomniGuiTools: ) idle_text_box.set_html_text(text) - def flomnigui_docs(self): - + def flomnigui_docs(self, filename: str | None = None): import csaxs_bec from pathlib import Path - # Ensure this is a Path object, not a string - csaxs_bec_basepath = Path(csaxs_bec.__file__) + print("The general flOMNI documentation is at \nhttps://sls-csaxs.readthedocs.io/en/latest/user/ptychography/flomni.html#user-ptychography-flomni") - pdf_file = "FZP_flomni_with_CS.pdf" + csaxs_bec_basepath = Path(csaxs_bec.__file__).parent + docs_folder = ( + csaxs_bec_basepath / + "bec_ipython_client" / "plugins" / "flomni" / "docs" + ) - # Build the absolute path correctly - pdf_file = ( - csaxs_bec_basepath.parent / 'bec_ipython_client' / 'plugins' / 'flomni' / 'docs' / pdf_file - ).resolve() + if not docs_folder.is_dir(): + raise NotADirectoryError(f"Docs folder not found: {docs_folder}") - if self.pdf_viewer is None: - self.flomnigui_show_gui() + pdfs = sorted(docs_folder.glob("*.pdf")) + if not pdfs: + raise FileNotFoundError(f"No PDF files found in {docs_folder}") + + # --- Resolve PDF ------------------------------------------------------ + if filename is not None: + pdf_file = docs_folder / filename + if not pdf_file.exists(): + raise FileNotFoundError(f"Requested file not found: {filename}") + else: + print("\nAvailable flOMNI documentation PDFs:\n") + for i, pdf in enumerate(pdfs, start=1): + print(f" {i:2d}) {pdf.name}") + print() + + while True: + try: + choice = int(input(f"Select a file (1–{len(pdfs)}): ")) + if 1 <= choice <= len(pdfs): + pdf_file = pdfs[choice - 1] + break + print(f"Enter a number between 1 and {len(pdfs)}.") + except ValueError: + print("Invalid input. Please enter a number.") + + # --- GUI handling (active existence check) ---------------------------- + self.flomnigui_show_gui() + + if self._flomnigui_check_attribute_not_exists("PdfViewerWidget"): self.flomnigui_remove_all_docks() self.pdf_viewer = self.gui.flomni.new(widget="PdfViewerWidget") - self.pdf_viewer.PdfViewerWidget.load_pdf(str(pdf_file)) + + # --- Load PDF --------------------------------------------------------- + self.pdf_viewer.PdfViewerWidget.load_pdf(str(pdf_file.resolve())) + print(f"\nLoaded: {pdf_file.name}\n") + def _flomnicam_check_device_exists(self, device): try: