Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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)