Skip to content
Merged
Show file tree
Hide file tree
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
66 changes: 35 additions & 31 deletions src/navigate/controller/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -1185,8 +1185,10 @@ def display_images(

# destroy all additional microscopes
for microscope_name in list(self.additional_microscopes.keys()):
self.destroy_virtual_microscope(microscope_name)
self.additional_microscopes = {}
destroy_window = False
if microscope_name not in self.additional_microscopes_configs:
destroy_window = True
self.destroy_virtual_microscope(microscope_name, destroy_window)

# show additional camera view popup
for microscope_name in self.additional_microscopes_configs:
Expand All @@ -1196,32 +1198,31 @@ def display_images(
self.additional_microscopes_configs[microscope_name],
)

self.additional_microscopes[microscope_name] = {
"show_img_pipe": show_img_pipe,
"data_buffer": data_buffer,
}
popup_window = CameraViewPopupWindow(self.view, microscope_name)
camera_view_controller = CameraViewController(
popup_window.camera_view, self
)
camera_view_controller.data_buffer = self.additional_microscopes[
microscope_name
]["data_buffer"]
camera_view_controller.microscope_name = microscope_name
popup_window.popup.bind("<Configure>", camera_view_controller.resize)
self.additional_microscopes[microscope_name]["popup_window"] = popup_window
self.additional_microscopes[microscope_name][
"camera_view_controller"
] = camera_view_controller
popup_window.popup.protocol(
"WM_DELETE_WINDOW",
combine_funcs(
popup_window.popup.dismiss,
lambda: self.additional_microscopes[microscope_name].pop(
"camera_view_controller"
if microscope_name not in self.additional_microscopes:
self.additional_microscopes[microscope_name] = {}

popup_window = CameraViewPopupWindow(self.view, microscope_name)
camera_view_controller = CameraViewController(
popup_window.camera_view, self
)
camera_view_controller.microscope_name = microscope_name
popup_window.popup.bind("<Configure>", camera_view_controller.resize)
self.additional_microscopes[microscope_name]["popup_window"] = popup_window
self.additional_microscopes[microscope_name][
"camera_view_controller"
] = camera_view_controller
popup_window.popup.protocol(
"WM_DELETE_WINDOW",
combine_funcs(
popup_window.popup.dismiss,
lambda: self.additional_microscopes[microscope_name].pop(
"camera_view_controller"
),
),
),
)
)

self.additional_microscopes[microscope_name]["show_img_pipe"] = show_img_pipe
self.additional_microscopes[microscope_name]["data_buffer"] = data_buffer

# start thread
capture_img_thread = threading.Thread(
Expand All @@ -1237,13 +1238,15 @@ def display_images(
)
capture_img_thread.start()

def destroy_virtual_microscope(self, microscope_name):
def destroy_virtual_microscope(self, microscope_name, destroy_window=True):
"""Destroy virtual microscopes.

Parameters
----------
microscope_name : str
The microscope name
destroy_window : bool
The flag to dismiss window.
"""
if microscope_name not in self.additional_microscopes:
return
Expand All @@ -1253,9 +1256,10 @@ def destroy_virtual_microscope(self, microscope_name):
self.model.release_pipe(f"{microscope_name}_show_img_pipe")
del self.additional_microscopes[microscope_name]["show_img_pipe"]
# destroy the popup window
self.additional_microscopes[microscope_name]["popup_window"].popup.dismiss()
self.additional_microscopes[microscope_name]["camera_view_controller"] = None
del self.additional_microscopes[microscope_name]
if destroy_window:
self.additional_microscopes[microscope_name]["popup_window"].popup.dismiss()
self.additional_microscopes[microscope_name]["camera_view_controller"] = None
del self.additional_microscopes[microscope_name]

def move_stage(self, pos_dict):
"""Trigger the model to move the stage.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def clear_device_info(microscope_name):
for k in self.microscope_info[microscope_name].keys():
if (
self.microscope_info[microscope_name][k]
== self.microscope_info[microscope][k]
== self.microscope_info[microscope].get(k, "")
):
self.variables[f"{microscope_name} {k}"].set("")

Expand Down
Loading