diff -r 9db3fd0b1c72 -r b2c6179184f6 QScintilla/EditorButtonsWidget.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QScintilla/EditorButtonsWidget.py Sun Jan 01 18:09:48 2017 +0100 @@ -0,0 +1,103 @@ +# -*- 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)