diff --git a/arho_feature_template/core/plan_manager.py b/arho_feature_template/core/plan_manager.py index 4a90e2d..3517800 100644 --- a/arho_feature_template/core/plan_manager.py +++ b/arho_feature_template/core/plan_manager.py @@ -51,6 +51,7 @@ from arho_feature_template.utils.misc_utils import ( LANGUAGE, check_layer_changes, + disconnect_signal, get_active_plan_id, handle_unsaved_changes, iface, @@ -405,33 +406,34 @@ def save_plan_jsons(self, plan_json, outline_json): ) def unload(self): + # Set pan map tool as active (to deactivate our custom tools to avoid errors) + iface.actionPan().trigger() + # Lambda service - self.lambda_service.jsons_received.disconnect(self.save_plan_jsons) + disconnect_signal(self.lambda_service.jsons_received) self.lambda_service.deleteLater() # Feature digitize tool if self.feature_digitize_map_tool: - self.feature_digitize_map_tool.digitizingCompleted.disconnect() - self.feature_digitize_map_tool.digitizingFinished.disconnect() + disconnect_signal(self.feature_digitize_map_tool.digitizingCompleted) + disconnect_signal(self.feature_digitize_map_tool.digitizingFinished) self.feature_digitize_map_tool.deleteLater() # Plan digitize tool - self.plan_digitize_map_tool.digitizingCompleted.disconnect(self._plan_geom_digitized) + disconnect_signal(self.plan_digitize_map_tool.digitizingCompleted) self.plan_digitize_map_tool.deleteLater() # Inspect plan feature tool - self.inspect_plan_feature_tool.edit_feature_requested.disconnect(self.edit_plan_feature) + self.inspect_plan_feature_tool.unload() self.inspect_plan_feature_tool.deleteLater() # New feature dock - self.new_feature_dock.tool_activated.disconnect(self.add_new_plan_feature) + disconnect_signal(self.new_feature_dock.tool_activated) iface.removeDockWidget(self.new_feature_dock) self.new_feature_dock.deleteLater() # Regulation group dock - self.regulation_groups_dock.new_regulation_group_requested.disconnect() - self.regulation_groups_dock.edit_regulation_group_requested.disconnect() - self.regulation_groups_dock.delete_regulation_group_requested.disconnect() + self.regulation_groups_dock.unload() iface.removeDockWidget(self.regulation_groups_dock) self.regulation_groups_dock.deleteLater() diff --git a/arho_feature_template/gui/docks/regulation_groups_dock.py b/arho_feature_template/gui/docks/regulation_groups_dock.py index 5922e8c..e4b5869 100644 --- a/arho_feature_template/gui/docks/regulation_groups_dock.py +++ b/arho_feature_template/gui/docks/regulation_groups_dock.py @@ -51,11 +51,14 @@ def __init__(self): self.selected_group = None - def connect_buttons(self): + def _disconnect_buttons(self): disconnect_signal(self.new_btn.clicked) disconnect_signal(self.edit_btn.clicked) disconnect_signal(self.delete_btn.clicked) + def connect_buttons(self): + self._disconnect_buttons() + self.new_btn.clicked.connect(self.new_regulation_group_requested.emit) self.edit_btn.clicked.connect(self.on_edit_btn_clicked) self.delete_btn.clicked.connect(self.on_delete_btn_clicked) @@ -123,3 +126,10 @@ def filter_regulation_groups(self): # Clear selection if the selected template was filtered if self.selected_group and self.selected_group is regulation_group and item.isHidden(): self.regulation_group_list.clearSelection() + + def unload(self): + self._disconnect_buttons() + + disconnect_signal(self.new_regulation_group_requested) + disconnect_signal(self.edit_regulation_group_requested) + disconnect_signal(self.delete_regulation_group_requested) diff --git a/arho_feature_template/gui/tools/inspect_plan_features_tool.py b/arho_feature_template/gui/tools/inspect_plan_features_tool.py index c33da0c..f835edf 100644 --- a/arho_feature_template/gui/tools/inspect_plan_features_tool.py +++ b/arho_feature_template/gui/tools/inspect_plan_features_tool.py @@ -10,6 +10,8 @@ from qgis.PyQt.QtWidgets import QMenu from qgis.utils import OverrideCursor +from arho_feature_template.utils.misc_utils import disconnect_signal + if TYPE_CHECKING: from arho_feature_template.project.layers.plan_layers import PlanFeatureLayer @@ -27,6 +29,7 @@ def __init__(self, canvas: QgsMapCanvas, layer_classes: list[PlanFeatureLayer]): self.highlighted: tuple[QgsFeature, str] | None = None self.highlight_rubber_band: QgsRubberBand | None = None + self.check_menu_selections_timer: QTimer | None = None def activate(self): super().activate() @@ -110,6 +113,11 @@ def _create_timer(self, menu: QMenu): self.check_menu_selections_timer.start(100) # 0.1 seconds interval def _destroy_timer(self): - self.check_menu_selections_timer.timeout.disconnect() - self.check_menu_selections_timer.deleteLater() - self.check_menu_selections_timer = None + if self.check_menu_selections_timer: + self.check_menu_selections_timer.timeout.disconnect() + self.check_menu_selections_timer.deleteLater() + self.check_menu_selections_timer = None + + def unload(self): + self.close_menu() + disconnect_signal(self.edit_feature_requested)