#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
**inputAccelerators.py**
**Platform:**
Windows, Linux, Mac Os X.
**Description:**
This module defines the Application input accelerators objects.
**Others:**
"""
#**********************************************************************************************************************
#*** External imports.
#**********************************************************************************************************************
import logging
import re
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QTextCursor
#**********************************************************************************************************************
#*** Internal imports.
#**********************************************************************************************************************
import foundations.core as core
import foundations.common
import foundations.exceptions
import foundations.strings as strings
from umbra.globals.constants import Constants
#**********************************************************************************************************************
#*** Module attributes.
#**********************************************************************************************************************
__author__ = "Thomas Mansencal"
__copyright__ = "Copyright (C) 2008 - 2012 - Thomas Mansencal"
__license__ = "GPL V3.0 - http://www.gnu.org/licenses/"
__maintainer__ = "Thomas Mansencal"
__email__ = "thomas.mansencal@gmail.com"
__status__ = "Production"
__all__ = ["LOGGER",
"getEditorCapability",
"indentationPreEventInputAccelerators",
"indentationPostEventInputAccelerators",
"performCompletion",
"completionPreEventInputAccelerators",
"completionPostEventInputAccelerators",
"symbolsExpandingPreEventInputAccelerators"]
LOGGER = logging.getLogger(Constants.logger)
#**********************************************************************************************************************
#*** Module classes and definitions.
#**********************************************************************************************************************
#*** Sphinx: Decorator commented for auto-documentation purpose. @core.executionTrace
#*** Sphinx: Decorator commented for auto-documentation purpose. @foundations.exceptions.exceptionsHandler(None, False, Exception)
[docs]def getEditorCapability(editor, capability):
"""
This definition returns given editor capability.
:param editor: Document editor. ( QWidget )
:param capability: Capability to retrieve. ( String )
:return: Capability. ( Object )
"""
if not hasattr(editor, "language"):
return
return editor.language.get(capability)
#*** Sphinx: Decorator commented for auto-documentation purpose. @core.executionTrace
#*** Sphinx: Decorator commented for auto-documentation purpose. @foundations.exceptions.exceptionsHandler(None, False, Exception)
[docs]def indentationPostEventInputAccelerators(editor, event):
"""
This definition implements indentation post event input accelerators.
:param editor: Document editor. ( QWidget )
:param event: Event being handled. ( QEvent )
:return: Method success. ( Boolean )
"""
if event.key() in (Qt.Key_Enter, Qt.Key_Return):
cursor = editor.textCursor()
block = cursor.block().previous()
if block.isValid():
indent = match = re.match(r"(\s*)", strings.encode(block.text())).group(1)
cursor.insertText(indent)
indentationSymbols = getEditorCapability(editor, "indentationSymbols")
if not indentationSymbols:
return True
if not block.text():
return True
if not strings.encode(block.text())[-1] in indentationSymbols:
return True
symbolsPairs = getEditorCapability(editor, "symbolsPairs")
if not symbolsPairs:
return True
cursor.insertText(editor.indentMarker)
position = cursor.position()
cursor.movePosition(QTextCursor.PreviousBlock, QTextCursor.MoveAnchor)
cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.MoveAnchor)
cursor.movePosition(QTextCursor.PreviousCharacter, QTextCursor.KeepAnchor)
previousCharacter = strings.encode(cursor.selectedText())
cursor.setPosition(position)
nextCharacter = editor.getNextCharacter()
if previousCharacter in symbolsPairs:
if nextCharacter in symbolsPairs.values():
cursor.insertBlock()
cursor.insertText(match)
cursor.movePosition(QTextCursor.PreviousBlock, QTextCursor.MoveAnchor)
cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.MoveAnchor)
editor.setTextCursor(cursor)
return True
#*** Sphinx: Decorator commented for auto-documentation purpose. @core.executionTrace
#*** Sphinx: Decorator commented for auto-documentation purpose. @foundations.exceptions.exceptionsHandler(None, False, Exception)
[docs]def completionPostEventInputAccelerators(editor, event):
"""
This definition implements completion post event input accelerators.
:param editor: Document editor. ( QWidget )
:param event: Event being handled. ( QEvent )
:return: Process event. ( Boolean )
"""
if editor.completer:
if editor.completer.popup().isVisible():
performCompletion(editor)
return True
#*** Sphinx: Decorator commented for auto-documentation purpose. @core.executionTrace
#*** Sphinx: Decorator commented for auto-documentation purpose. @foundations.exceptions.exceptionsHandler(None, False, Exception)