Skip to content

Commit

Permalink
Migrate Outline explorer, plots, preferences and profiler to use the …
Browse files Browse the repository at this point in the history
…new teardown mechanism
  • Loading branch information
andfoy committed Aug 30, 2021
1 parent 84103e4 commit ce6a1dc
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 9 deletions.
16 changes: 15 additions & 1 deletion spyder/plugins/maininterpreter/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@

# Local imports
from spyder.api.plugins import Plugins, SpyderPluginV2
from spyder.api.plugin_registration.decorators import on_plugin_available
from spyder.api.plugin_registration.decorators import (
on_plugin_available, on_plugin_teardown)
from spyder.api.translations import get_translation
from spyder.plugins.maininterpreter.confpage import MainInterpreterConfigPage
from spyder.plugins.maininterpreter.container import MainInterpreterContainer
Expand Down Expand Up @@ -90,6 +91,19 @@ def on_statusbar_available(self):
if statusbar:
statusbar.add_status_widget(self.interpreter_status)

@on_plugin_teardown(plugin=Plugins.Preferences)
def on_preferences_teardown(self):
# Deregister conf page
preferences = self.get_plugin(Plugins.Preferences)
preferences.deregister_plugin_preferences(self)

@on_plugin_teardown(plugin=Plugins.StatusBar)
def on_statusbar_teardown(self):
# Add status widget
statusbar = self.get_plugin(Plugins.StatusBar)
if statusbar:
statusbar.remove_status_widget(self.interpreter_status.ID)

# ---- Public API
def get_interpreter(self):
"""Get current interpreter."""
Expand Down
12 changes: 11 additions & 1 deletion spyder/plugins/outlineexplorer/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@
from qtpy.QtCore import Slot

# Local imports
from spyder.api.plugin_registration.decorators import on_plugin_available
from spyder.api.plugin_registration.decorators import (
on_plugin_available, on_plugin_teardown)
from spyder.api.translations import get_translation
from spyder.api.plugins import SpyderDockablePlugin, Plugins
from spyder.plugins.outlineexplorer.main_widget import OutlineExplorerWidget
Expand Down Expand Up @@ -63,6 +64,15 @@ def on_editor_available(self):
editor.sig_open_files_finished.connect(
self.update_all_editors)

@on_plugin_teardown(plugin=Plugins.Completions)
def on_completions_teardown(self):
completions = self.get_plugin(Plugins.Completions)

completions.sig_language_completions_available.disconnect(
self.start_symbol_services)
completions.sig_stop_completions.disconnect(
self.stop_symbol_services)

#------ Public API ---------------------------------------------------------
def restore_scrollbar_position(self):
"""Restoring scrollbar position after main window is visible"""
Expand Down
9 changes: 6 additions & 3 deletions spyder/plugins/plots/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@

# Local imports
from spyder.api.plugins import Plugins, SpyderDockablePlugin
from spyder.api.plugin_registration.decorators import on_plugin_available
from spyder.api.plugin_registration.decorators import (
on_plugin_available, on_plugin_teardown)
from spyder.api.translations import get_translation
from spyder.plugins.plots.widgets.main_widget import PlotsWidget

Expand Down Expand Up @@ -62,14 +63,16 @@ def on_ipython_console_available(self):
ipyconsole.sig_shellwidget_deleted.connect(
self.remove_shellwidget)

def unregister(self):
@on_plugin_teardown(plugin=Plugins.IPythonConsole)
def on_ipython_console_teardown(self):
# Plugins
ipyconsole = self.get_plugin(Plugins.IPythonConsole)

# Signals
ipyconsole.sig_shellwidget_changed.disconnect(self.set_shellwidget)
ipyconsole.sig_shellwidget_created.disconnect(
self.add_shellwidget)
ipyconsole.sig_shellwidget_deleted.connect(
ipyconsole.sig_shellwidget_deleted.disconnect(
self.remove_shellwidget)

# ---- Public API
Expand Down
38 changes: 35 additions & 3 deletions spyder/plugins/preferences/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,14 @@

# Local imports
from spyder.api.plugins import Plugins, SpyderPluginV2, SpyderPlugin
from spyder.api.plugin_registration.decorators import on_plugin_available
from spyder.api.plugin_registration.decorators import (
on_plugin_available, on_plugin_teardown)
from spyder.config.base import _
from spyder.config.main import CONF_VERSION
from spyder.config.user import NoDefault
from spyder.plugins.mainmenu.api import ApplicationMenus, ToolsMenuSections
from spyder.plugins.preferences.widgets.container import PreferencesContainer
from spyder.plugins.preferences.widgets.container import (
PreferencesActions, PreferencesContainer)
from spyder.plugins.toolbar.api import ApplicationToolbars, MainToolbarSections

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -303,6 +305,36 @@ def on_application_available(self):
container = self.get_container()
container.sig_reset_preferences_requested.connect(self.reset)


@on_plugin_teardown(plugin=Plugins.MainMenu)
def on_main_menu_teardown(self):
container = self.get_container()
main_menu = self.get_plugin(Plugins.MainMenu)

main_menu.remove_item_from_application_menu(
PreferencesActions.Show,
menu_id=ApplicationMenus.Tools,
)

main_menu.remove_item_from_application_menu(
PreferencesActions.Reset,
menu_id=ApplicationMenus.Tools,
)

@on_plugin_teardown(plugin=Plugins.Toolbar)
def on_toolbar_teardown(self):
container = self.get_container()
toolbar = self.get_plugin(Plugins.Toolbar)
toolbar.remove_item_from_application_toolbar(
PreferencesActions.Show,
toolbar_id=ApplicationToolbars.Main
)

@on_plugin_teardown(plugin=Plugins.Application)
def on_application_teardown(self):
container = self.get_container()
container.sig_reset_preferences_requested.disconnect(self.reset)

@Slot()
def reset(self):
answer = QMessageBox.warning(self.main, _("Warning"),
Expand All @@ -318,6 +350,6 @@ def reset(self):
def unregister(self):
pass

def on_close(self, cancelable=False) -> bool:
def can_close(self) -> bool:
container = self.get_container()
return not container.is_dialog_open()
22 changes: 21 additions & 1 deletion spyder/plugins/profiler/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@

# Local imports
from spyder.api.plugins import Plugins, SpyderDockablePlugin
from spyder.api.plugin_registration.decorators import on_plugin_available
from spyder.api.plugin_registration.decorators import (
on_plugin_available, on_plugin_teardown)
from spyder.api.translations import get_translation
from spyder.plugins.mainmenu.api import ApplicationMenus
from spyder.plugins.profiler.confpage import ProfilerConfigPage
Expand Down Expand Up @@ -105,6 +106,25 @@ def on_main_menu_available(self):
mainmenu.add_item_to_application_menu(
run_action, menu_id=ApplicationMenus.Run)

@on_plugin_teardown(plugin=Plugins.Editor)
def on_editor_teardown(self):
widget = self.get_widget()
editor = self.get_plugin(Plugins.Editor)
widget.sig_edit_goto_requested.disconnect(editor.load)

@on_plugin_teardown(plugin=Plugins.Preferences)
def on_preferences_teardown(self):
preferences = self.get_plugin(Plugins.Preferences)
preferences.deregister_plugin_preferences(self)

@on_plugin_teardown(plugin=Plugins.MainMenu)
def on_main_menu_teardown(self):
mainmenu = self.get_plugin(Plugins.MainMenu)
run_action = self.get_action(ProfilerActions.ProfileCurrentFile)

run_menu = mainmenu.get_application_menu(ApplicationMenus.Run)
mainmenu.remove_item_from_application_menu(run_action, menu=run_menu)

# --- Public API
# ------------------------------------------------------------------------
def run_profiler(self):
Expand Down

0 comments on commit ce6a1dc

Please sign in to comment.