cadquery-freecad-module/CadQuery/Libs/pyqode/core/api/mode.py
2015-10-26 16:25:38 -04:00

118 lines
3.4 KiB
Python

"""
This module contains the editor extension API.
"""
import weakref
class Mode(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 mode is added to an editor by using the ModesManager/PanelsManager:
- :meth:`pyqode.core.api.CodeEdit.modes.append` or
- :meth:`pyqode.core.api.CodeEdit.panels.append`
Subclasses may/should override the following methods:
- :meth:`pyqode.core.api.Mode.on_install`
- :meth:`pyqode.core.api.Mode.on_uninstall`
- :meth:`pyqode.core.api.Mode.on_state_changed`
..warning: The mode will be identified by its class name, this means that
**there cannot be two modes of the same type on the same editor instance!**
"""
@property
def editor(self):
"""
Returns a reference to the parent editor widget.
**READ ONLY**
:rtype: pyqode.core.api.code_edit.CodeEdit
"""
if self._editor is not None:
return self._editor
else:
return None
@property
def enabled(self):
"""
Tells if the mode is enabled,
:meth:`pyqode.core.api.Mode.on_state_changed` will be called as soon
as the mode 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):
#: Mode name/identifier. :class:`pyqode.core.api.CodeEdit` uses
# that as the attribute key when you install a mode.
self.name = self.__class__.__name__
#: Mode description
self.description = self.__doc__
self._enabled = False
self._editor = None
self._on_close = False
def on_install(self, editor):
"""
Installs the extension on the editor.
:param editor: editor widget instance
:type editor: pyqode.core.api.code_edit.CodeEdit
.. note:: This method is called by editor when you install a Mode.
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
def on_uninstall(self):
"""
Uninstalls the mode from the editor.
"""
self._on_close = True
self.enabled = False
self._editor = None
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
def clone_settings(self, original):
"""
Clone the settings from another mode (same class).
This method is called when splitting an editor widget.
:param original: other mode (must be the same class).
.. note:: The base method does not do anything, you must implement
this method for every new mode/panel (if you plan on using the
split feature). You should also make sure any properties will be
propagated to the clones.
"""
pass