Sun, 01 Jan 2017 18:09:48 +0100
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)