QScintilla/EditorButtonsWidget.py

changeset 5394
b2c6179184f6
child 5398
1f4509cf8f35
--- /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)

eric ide

mercurial