QScintilla/EditorButtonsWidget.py

Sun, 01 Jan 2017 18:09:48 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 01 Jan 2017 18:09:48 +0100
changeset 5394
b2c6179184f6
child 5398
1f4509cf8f35
permissions
-rw-r--r--

Started implementing a format button bar and provider classes for various markup languages.

# -*- coding: utf-8 -*-

# Copyright (c) 2017 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing a widget containing various buttons for accessing
editor actions.
"""

from __future__ import unicode_literals

from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolButton

import UI.PixmapCache

from . import MarkupProviders


class EditorButtonsWidget(QWidget):
    """
    Class implementing a widget containing various buttons for accessing
    editor actions.
    """
    def __init__(self, editor, parent=None):
        """
        Constructor
        
        @param editor reference to the editor
        @type Editor
        @param parent reference to the parent widget
        @type QWidget
        """
        super(EditorButtonsWidget, self).__init__(parent)
        
        self.__layout = QVBoxLayout(self)
        self.__layout.setContentsMargins(1, 1, 1, 1)
        self.__layout.setSpacing(1)
        
        self.__provider = None
        
        self.__editor = editor
        self.__editor.languageChanged.connect(self.__updateButtonStates)
        self.__editor.editorSaved.connect(self.__updateButtonStates)
        self.__editor.editorRenamed.connect(self.__updateButtonStates)
        
        self.__createButtons()
        
        self.__layout.addStretch()
        self.setMaximumWidth(self.__buttons["bold"].sizeHint().width() + 2)
        
        self.__updateButtonStates()
    
    def __createButtons(self):
        """
        Private slot to create the various tool buttons.
        """
        self.__buttons = {}
        
        button = QToolButton(self)
        button.setIcon(UI.PixmapCache.getIcon("formatTextBold.png"))
        button.clicked.connect(lambda: self.__formatClicked("bold"))
        self.__layout.addWidget(button)
        self.__buttons["bold"] = button
        
        button = QToolButton(self)
        button.setIcon(UI.PixmapCache.getIcon("formatTextItalic.png"))
        button.clicked.connect(lambda: self.__formatClicked("italic"))
        self.__layout.addWidget(button)
        self.__buttons["italic"] = button
        
        button = QToolButton(self)
        button.setIcon(UI.PixmapCache.getIcon("formatTextStrikethrough.png"))
        button.clicked.connect(lambda: self.__formatClicked("strikethrough"))
        self.__layout.addWidget(button)
        self.__buttons["strikethrough"] = button
    
    @pyqtSlot()
    def __updateButtonStates(self):
        """
        Private slot to change tzhe button states.
        """
        self.__provider = MarkupProviders.getMarkupProvider(self.__editor)
        
        self.__buttons["bold"].setEnabled(self.__provider.hasBold())
        self.__buttons["italic"].setEnabled(self.__provider.hasItalic())
        self.__buttons["strikethrough"].setEnabled(
            self.__provider.hasStrikethrough())
    
    def __formatClicked(self, format):
        """
        Private slot to handle a format button being clicked.
        
        @param format format type of the button
        @type str
        """
        if format == "bold":
            self.__provider.bold(self.__editor)
        elif format == "italic":
            self.__provider.italic(self.__editor)
        elif format == "strikethrough":
            self.__provider.strikethrough(self.__editor)

eric ide

mercurial