Source code for spyder.plugins.editor.api.editorextension

# -*- coding: utf-8 -*-
# -----------------------------------------------------------------------------
# Copyright (c) 2013-2016 Colin Duquesnoy and others (see pyqode/AUTHORS.rst)
# Copyright (c) 2016- Spyder Project Contributors (see AUTHORS.txt)
#
# Distributed under the terms of the MIT License
# (see NOTICE.txt in the Spyder root directory for details)
# -----------------------------------------------------------------------------

"""
This module contains the editor extension API.

Adapted from pyqode/core/api/mode.py of the
`PyQode project <https://github.com/pyQode/pyQode>`_.
Original file:
<https://github.com/pyQode/pyqode.core/blob/master/pyqode/core/api/mode.py>
"""


[docs] class EditorExtension(object): """ Base class for editor extensions. An extension is a "thing" that can be installed on an editor to add new behaviours or to modify its appearance. A panel (model child class) is added to an editor by using PanelsManager, :meth:`spyder.plugins.editor.widgets.codeeditor.CodeEditor.panels.append`. Subclasses may/should override the following methods: - :meth:`spyder.api.EditorExtension.on_install` - :meth:`spyder.api.EditorExtension.on_uninstall` - :meth:`spyder.api.EditorExtension.on_state_changed` ..warning: The editor extension will be identified by its class name, this means that **there cannot be two editor extensions of the same type on the same editor instance!** """ @property def editor(self): """ Returns a reference to the parent code editor widget. **READ ONLY** :rtype: spyder.plugins.editor.widgets.codeeditor.CodeEditor """ return self._editor @property def enabled(self): """ Tells if the editor extension is enabled. :meth:`spyder.api.EditorExtension.on_state_changed` will be called as soon as the editor extension state changed. :type: bool """ return self._enabled @enabled.setter def enabled(self, enabled): if enabled != self._enabled: self._enabled = enabled self.on_state_changed(enabled) def __init__(self): """ EditorExtension name/identifier. :class:`spyder.widgets.sourcecode.CodeEditor` uses that as the attribute key when you install a editor extension. """ self.name = self.__class__.__name__ # EditorExtension description self.description = self.__doc__ self._enabled = False self._editor = None self._on_close = False
[docs] def on_install(self, editor): """ Installs the extension on the editor. :param editor: editor widget instance :type editor: spyder.plugins.editor.widgets.codeeditor.CodeEditor .. note:: This method is called by editor when you install a EditorExtension. You should never call it yourself, even in a subclasss. .. warning:: Don't forget to call **super** when subclassing """ self._editor = editor self.enabled = True
[docs] def on_uninstall(self): """Uninstalls the editor extension from the editor.""" self._on_close = True self.enabled = False self._editor = None
[docs] def on_state_changed(self, state): """ Called when the enable state has changed. This method does not do anything, you may override it if you need to connect/disconnect to the editor's signals (connect when state is true and disconnect when it is false). :param state: True = enabled, False = disabled :type state: bool """ pass
[docs] def clone_settings(self, original): """ Clone the settings from another editor extension (same class). This method is called when splitting an editor widget. # TODO at the current estate this is not working :param original: other editor extension (must be the same class). .. note:: The base method does not do anything, you must implement this method for every new editor extension/panel (if you plan on using the split feature). You should also make sure any properties will be propagated to the clones. """ pass