33 @type QWidget |
33 @type QWidget |
34 """ |
34 """ |
35 super(EditorButtonsWidget, self).__init__(parent) |
35 super(EditorButtonsWidget, self).__init__(parent) |
36 |
36 |
37 margin = 2 |
37 margin = 2 |
|
38 spacing = 3 |
38 self.__layout = QVBoxLayout(self) |
39 self.__layout = QVBoxLayout(self) |
39 self.__layout.setContentsMargins(margin, margin, margin, margin) |
40 self.__layout.setContentsMargins(margin, margin, margin, margin) |
40 self.__layout.setSpacing(2) |
41 self.__layout.setSpacing(spacing) |
41 |
42 |
42 self.__provider = None |
43 self.__provider = None |
43 |
44 |
44 self.__editor = editor |
45 self.__editor = editor |
45 self.__editor.languageChanged.connect(self.__updateButtonStates) |
46 self.__editor.languageChanged.connect(self.__updateButtonStates) |
61 """ |
62 """ |
62 self.__buttons = {} |
63 self.__buttons = {} |
63 self.__separators = [] |
64 self.__separators = [] |
64 self.__headerMenu = QMenu() |
65 self.__headerMenu = QMenu() |
65 |
66 |
66 self.__addButton("bold", "formatTextBold.png") |
67 self.__addButton("bold", "formatTextBold.png", |
67 self.__addButton("italic", "formatTextItalic.png") |
68 self.tr("Bold")) |
68 self.__addButton("strikethrough", "formatTextStrikethrough.png") |
69 self.__addButton("italic", "formatTextItalic.png", |
69 self.__addSeparator() |
70 self.tr("Italic")) |
70 self.__addButton("header1", "formatTextHeader1.png") |
71 self.__addButton("strikethrough", "formatTextStrikethrough.png", |
71 self.__addButton("header2", "formatTextHeader2.png") |
72 self.tr("Strike Through")) |
72 self.__addButton("header3", "formatTextHeader3.png") |
73 self.__addSeparator() |
73 button = self.__addButton("header", "formatTextHeader.png") |
74 self.__addButton("header1", "formatTextHeader1.png", |
|
75 self.tr("Header 1")) |
|
76 self.__addButton("header2", "formatTextHeader2.png", |
|
77 self.tr("Header 2")) |
|
78 self.__addButton("header3", "formatTextHeader3.png", |
|
79 self.tr("Header 3")) |
|
80 button = self.__addButton("header", "formatTextHeader.png", |
|
81 self.tr("Header")) |
74 button.setPopupMode(QToolButton.InstantPopup) |
82 button.setPopupMode(QToolButton.InstantPopup) |
75 button.setMenu(self.__headerMenu) |
83 button.setMenu(self.__headerMenu) |
76 self.__addSeparator() |
84 self.__addSeparator() |
77 self.__addButton("code", "formatTextInlineCode.png") |
85 self.__addButton("code", "formatTextInlineCode.png", |
78 self.__addButton("codeBlock", "formatTextCodeBlock.png") |
86 self.tr("Inline Code")) |
79 self.__addSeparator() |
87 self.__addButton("codeBlock", "formatTextCodeBlock.png", |
80 self.__addButton("hyperlink", "formatTextHyperlink.png") |
88 self.tr("Code Block")) |
81 self.__addButton("line", "formatTextHorizontalLine.png") |
89 self.__addButton("quote", "formatTextQuote.png", |
|
90 self.tr("Quote")) |
|
91 self.__addSeparator() |
|
92 self.__addButton("hyperlink", "formatTextHyperlink.png", |
|
93 self.tr("Add Hyperlink")) |
|
94 self.__addButton("line", "formatTextHorizontalLine.png", |
|
95 self.tr("Add Horizontal Line")) |
|
96 self.__addButton("image", "formatTextImage.png", |
|
97 self.tr("Add Image")) |
|
98 self.__addSeparator() |
|
99 self.__addButton("bulletedList", "formatTextBulletedList.png", |
|
100 self.tr("Add Bulleted List")) |
|
101 self.__addButton("numberedList", "formatTextNumberedList.png", |
|
102 self.tr("Add Numbered List")) |
82 |
103 |
83 self.__headerMenu.triggered.connect(self.__headerMenuTriggered) |
104 self.__headerMenu.triggered.connect(self.__headerMenuTriggered) |
84 |
105 |
85 def __addButton(self, format, iconName): |
106 def __addButton(self, format, iconName, toolTip): |
86 """ |
107 """ |
87 Private method to add a format button. |
108 Private method to add a format button. |
88 |
109 |
89 @param format unique name of the format |
110 @param format unique name of the format |
90 @type str |
111 @type str |
91 @param iconName name of the icon for the button |
112 @param iconName name of the icon for the button |
|
113 @type str |
|
114 @param toolTip text for the tool tip |
92 @type str |
115 @type str |
93 @return generated button |
116 @return generated button |
94 @rtype QToolButton |
117 @rtype QToolButton |
95 """ |
118 """ |
96 button = QToolButton(self) |
119 button = QToolButton(self) |
97 button.setIcon(UI.PixmapCache.getIcon(iconName)) |
120 button.setIcon(UI.PixmapCache.getIcon(iconName)) |
|
121 button.setToolTip(toolTip) |
98 button.clicked.connect(lambda: self.__formatClicked(format)) |
122 button.clicked.connect(lambda: self.__formatClicked(format)) |
99 self.__layout.addWidget(button) |
123 self.__layout.addWidget(button) |
100 self.__buttons[format] = button |
124 self.__buttons[format] = button |
101 |
125 |
102 return button |
126 return button |
172 pass |
196 pass |
173 elif format == "code": |
197 elif format == "code": |
174 self.__provider.code(self.__editor) |
198 self.__provider.code(self.__editor) |
175 elif format == "codeBlock": |
199 elif format == "codeBlock": |
176 self.__provider.codeBlock(self.__editor) |
200 self.__provider.codeBlock(self.__editor) |
|
201 elif format == "quote": |
|
202 self.__provider.quote(self.__editor) |
177 elif format == "hyperlink": |
203 elif format == "hyperlink": |
178 self.__provider.hyperlink(self.__editor) |
204 self.__provider.hyperlink(self.__editor) |
179 elif format == "line": |
205 elif format == "line": |
180 self.__provider.line(self.__editor) |
206 self.__provider.line(self.__editor) |
|
207 elif format == "image": |
|
208 self.__provider.image(self.__editor) |
181 |
209 |
182 def __headerMenuTriggered(self, act): |
210 def __headerMenuTriggered(self, act): |
183 """ |
211 """ |
184 Private method handling the selection of a header menu entry. |
212 Private method handling the selection of a header menu entry. |
185 |
213 |
193 """ |
221 """ |
194 Private slot to handle a change of the editor's selection. |
222 Private slot to handle a change of the editor's selection. |
195 """ |
223 """ |
196 hasSelection = self.__editor.hasSelectedText() |
224 hasSelection = self.__editor.hasSelectedText() |
197 if self.__provider: |
225 if self.__provider: |
|
226 self.__buttons["quote"].setEnabled( |
|
227 self.__provider.hasQuote() and ( |
|
228 self.__provider.kind() == "html" or hasSelection)) |
198 self.__buttons["hyperlink"].setEnabled( |
229 self.__buttons["hyperlink"].setEnabled( |
199 self.__provider.hasHyperlink() and not hasSelection) |
230 self.__provider.hasHyperlink() and not hasSelection) |
200 self.__buttons["line"].setEnabled( |
231 self.__buttons["line"].setEnabled( |
201 self.__provider.hasLine() and not hasSelection) |
232 self.__provider.hasLine() and not hasSelection) |
|
233 self.__buttons["image"].setEnabled( |
|
234 self.__provider.hasImage() and not hasSelection) |