--- a/QScintilla/EditorButtonsWidget.py Fri Jan 06 18:28:14 2017 +0100 +++ b/QScintilla/EditorButtonsWidget.py Fri Jan 06 20:00:52 2017 +0100 @@ -11,7 +11,7 @@ from __future__ import unicode_literals from PyQt5.QtCore import pyqtSlot -from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolButton, QFrame +from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolButton, QFrame, QMenu import UI.PixmapCache @@ -60,6 +60,7 @@ """ self.__buttons = {} self.__separators = [] + self.__headerMenu = QMenu() self.__addButton("bold", "formatTextBold.png") self.__addButton("italic", "formatTextItalic.png") @@ -70,6 +71,11 @@ self.__addButton("header3", "formatTextHeader3.png") button = self.__addButton("header", "formatTextHeader.png") button.setPopupMode(QToolButton.InstantPopup) + button.setMenu(self.__headerMenu) + self.__addSeparator() + self.__addButton("code", "formatTextInlineCode.png") + + self.__headerMenu.triggered.connect(self.__headerMenuTriggered) def __addButton(self, format, iconName): """ @@ -119,12 +125,22 @@ self.__buttons["italic"].setEnabled(self.__provider.hasItalic()) self.__buttons["strikethrough"].setEnabled( self.__provider.hasStrikethrough()) + headerLevels = self.__provider.headerLevels() self.__buttons["header1"].setEnabled(headerLevels >= 1) self.__buttons["header2"].setEnabled(headerLevels >= 2) self.__buttons["header3"].setEnabled(headerLevels >= 3) self.__buttons["header"].setEnabled(headerLevels > 3) - # TODO: create header button menu + self.__headerMenu.clear() + for level in range(1, headerLevels + 1): + act = self.__headerMenu.addAction( + self.tr("Level {0}").format(level)) + act.setData("header{0}".format(level)) + + self.__buttons["code"].setEnabled(self.__provider.hasCode()) + + # TODO: make this configurable + self.setVisible(self.__provider.kind() != "none") def __formatClicked(self, format): """ @@ -144,5 +160,16 @@ level = int(format[-1]) self.__provider.header(self.__editor, level) except ValueError: - # TODO: implement this pass + elif format == "code": + self.__provider.code(self.__editor) + + def __headerMenuTriggered(self, act): + """ + Private method handling the selection of a header menu entry. + + @param act action of the headers menu that was triggered + @type QAction + """ + format = act.data() + self.__formatClicked(format)