def setup_toggled_action(action, toggled, section, option): """ Setup a checkable action and wrap the toggle function to receive configuration. """ toggled = wrap_toggled(toggled, section, option) action.toggled.connect(toggled) action.setCheckable(True) if section is not None and option is not None: CONF.observe_configuration(action, section, option) add_configuration_update(action)
def __init__(self): if self.CONF_SECTION is None: warnings.warn( 'A SpyderConfigurationObserver must define a `CONF_SECTION` ' f'class attribute! Hint: {self} or its parent should define ' 'the section.') self._configuration_listeners = {} self._multi_option_listeners = set({}) self._gather_observers() self._merge_none_observers() # Register class to listen for changes in all registered options for section in self._configuration_listeners: section = self.CONF_SECTION if section is None else section observed_options = self._configuration_listeners[section] for option in observed_options: logger.debug(f'{self} is observing {option} ' f'in section {section}') CONF.observe_configuration(self, section, option)
def register_plugin(self): """Register plugin in Spyder's main window""" ipyconsole = self.main.ipyconsole treewidget = self.explorer.treewidget lspmgr = self.main.completions self.add_dockwidget() self.explorer.sig_open_file_requested.connect(self.main.open_file) treewidget.sig_delete_project.connect(self.delete_project) treewidget.sig_open_file_requested.connect(self.main.editor.load) treewidget.sig_removed.connect(self.main.editor.removed) treewidget.sig_tree_removed.connect(self.main.editor.removed_tree) treewidget.sig_renamed.connect(self.main.editor.renamed) treewidget.sig_tree_renamed.connect(self.main.editor.renamed_tree) treewidget.sig_module_created.connect(self.main.editor.new) treewidget.sig_file_created.connect( lambda t: self.main.editor.new(text=t)) treewidget.sig_open_interpreter_requested.connect( ipyconsole.create_client_from_path) treewidget.sig_redirect_stdio_requested.connect( self.main.redirect_internalshell_stdio) treewidget.sig_run_requested.connect( lambda fname: ipyconsole.run_script(fname, osp.dirname( fname), '', False, False, False, True, False)) # TODO: This is not necessary anymore due to us starting workspace # services in the editor. However, we could restore it in the future. #lspmgr.sig_language_completions_available.connect( # lambda settings, language: # self.start_workspace_services()) lspmgr.sig_stop_completions.connect(self.stop_workspace_services) # New project connections. Order matters! self.sig_project_loaded.connect( lambda path: self.main.workingdirectory.chdir(directory=path, sender_plugin=self)) self.sig_project_loaded.connect(lambda v: self.main.set_window_title()) self.sig_project_loaded.connect( functools.partial(lspmgr.project_path_update, update_kind=WorkspaceUpdateKind.ADDITION, instance=self)) self.sig_project_loaded.connect( lambda v: self.main.editor.setup_open_files()) self.sig_project_loaded.connect(self.update_explorer) self.sig_project_loaded.connect( lambda v: self.main.outlineexplorer.update_all_editors()) self.sig_project_closed[object].connect( lambda path: self.main.workingdirectory.chdir( directory=self.get_last_working_dir(), sender_plugin=self)) self.sig_project_closed.connect(lambda v: self.main.set_window_title()) self.sig_project_closed.connect( functools.partial(lspmgr.project_path_update, update_kind=WorkspaceUpdateKind.DELETION, instance=self)) self.sig_project_closed.connect( lambda v: self.main.editor.setup_open_files()) self.sig_project_closed.connect( lambda v: self.main.outlineexplorer.update_all_editors()) self.recent_project_menu.aboutToShow.connect(self.setup_menu_actions) self.main.restore_scrollbar_position.connect( self.restore_scrollbar_position) self.sig_pythonpath_changed.connect(self.main.pythonpath_changed) self.main.editor.set_projects(self) self.sig_project_loaded.connect( lambda v: self.main.editor.set_current_project_path(v)) self.sig_project_closed.connect( lambda v: self.main.editor.set_current_project_path()) # Connect to file explorer to keep single click to open files in sync # TODO: Remove this once projects is migrated CONF.observe_configuration(self, 'explorer', 'single_click_to_open') self.register_project_type(self, EmptyProject)