QScintilla/EditorButtonsWidget.py

changeset 5402
ce21a78a5fcf
parent 5398
1f4509cf8f35
child 5404
6b19ad5470a3
equal deleted inserted replaced
5401:dbbbd94aec0b 5402:ce21a78a5fcf
9 """ 9 """
10 10
11 from __future__ import unicode_literals 11 from __future__ import unicode_literals
12 12
13 from PyQt5.QtCore import pyqtSlot 13 from PyQt5.QtCore import pyqtSlot
14 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolButton, QFrame 14 from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolButton, QFrame, QMenu
15 15
16 import UI.PixmapCache 16 import UI.PixmapCache
17 17
18 from . import MarkupProviders 18 from . import MarkupProviders
19 19
58 """ 58 """
59 Private slot to create the various tool buttons. 59 Private slot to create the various tool buttons.
60 """ 60 """
61 self.__buttons = {} 61 self.__buttons = {}
62 self.__separators = [] 62 self.__separators = []
63 self.__headerMenu = QMenu()
63 64
64 self.__addButton("bold", "formatTextBold.png") 65 self.__addButton("bold", "formatTextBold.png")
65 self.__addButton("italic", "formatTextItalic.png") 66 self.__addButton("italic", "formatTextItalic.png")
66 self.__addButton("strikethrough", "formatTextStrikethrough.png") 67 self.__addButton("strikethrough", "formatTextStrikethrough.png")
67 self.__addSeparator() 68 self.__addSeparator()
68 self.__addButton("header1", "formatTextHeader1.png") 69 self.__addButton("header1", "formatTextHeader1.png")
69 self.__addButton("header2", "formatTextHeader2.png") 70 self.__addButton("header2", "formatTextHeader2.png")
70 self.__addButton("header3", "formatTextHeader3.png") 71 self.__addButton("header3", "formatTextHeader3.png")
71 button = self.__addButton("header", "formatTextHeader.png") 72 button = self.__addButton("header", "formatTextHeader.png")
72 button.setPopupMode(QToolButton.InstantPopup) 73 button.setPopupMode(QToolButton.InstantPopup)
74 button.setMenu(self.__headerMenu)
75 self.__addSeparator()
76 self.__addButton("code", "formatTextInlineCode.png")
77
78 self.__headerMenu.triggered.connect(self.__headerMenuTriggered)
73 79
74 def __addButton(self, format, iconName): 80 def __addButton(self, format, iconName):
75 """ 81 """
76 Private method to add a format button. 82 Private method to add a format button.
77 83
117 123
118 self.__buttons["bold"].setEnabled(self.__provider.hasBold()) 124 self.__buttons["bold"].setEnabled(self.__provider.hasBold())
119 self.__buttons["italic"].setEnabled(self.__provider.hasItalic()) 125 self.__buttons["italic"].setEnabled(self.__provider.hasItalic())
120 self.__buttons["strikethrough"].setEnabled( 126 self.__buttons["strikethrough"].setEnabled(
121 self.__provider.hasStrikethrough()) 127 self.__provider.hasStrikethrough())
128
122 headerLevels = self.__provider.headerLevels() 129 headerLevels = self.__provider.headerLevels()
123 self.__buttons["header1"].setEnabled(headerLevels >= 1) 130 self.__buttons["header1"].setEnabled(headerLevels >= 1)
124 self.__buttons["header2"].setEnabled(headerLevels >= 2) 131 self.__buttons["header2"].setEnabled(headerLevels >= 2)
125 self.__buttons["header3"].setEnabled(headerLevels >= 3) 132 self.__buttons["header3"].setEnabled(headerLevels >= 3)
126 self.__buttons["header"].setEnabled(headerLevels > 3) 133 self.__buttons["header"].setEnabled(headerLevels > 3)
127 # TODO: create header button menu 134 self.__headerMenu.clear()
135 for level in range(1, headerLevels + 1):
136 act = self.__headerMenu.addAction(
137 self.tr("Level {0}").format(level))
138 act.setData("header{0}".format(level))
139
140 self.__buttons["code"].setEnabled(self.__provider.hasCode())
141
142 # TODO: make this configurable
143 self.setVisible(self.__provider.kind() != "none")
128 144
129 def __formatClicked(self, format): 145 def __formatClicked(self, format):
130 """ 146 """
131 Private slot to handle a format button being clicked. 147 Private slot to handle a format button being clicked.
132 148
142 elif format.startswith("header"): 158 elif format.startswith("header"):
143 try: 159 try:
144 level = int(format[-1]) 160 level = int(format[-1])
145 self.__provider.header(self.__editor, level) 161 self.__provider.header(self.__editor, level)
146 except ValueError: 162 except ValueError:
147 # TODO: implement this
148 pass 163 pass
164 elif format == "code":
165 self.__provider.code(self.__editor)
166
167 def __headerMenuTriggered(self, act):
168 """
169 Private method handling the selection of a header menu entry.
170
171 @param act action of the headers menu that was triggered
172 @type QAction
173 """
174 format = act.data()
175 self.__formatClicked(format)

eric ide

mercurial