32 @param parent reference to the parent widget |
32 @param parent reference to the parent widget |
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 self.__layout = QVBoxLayout(self) |
38 self.__layout = QVBoxLayout(self) |
38 self.__layout.setContentsMargins(1, 1, 1, 1) |
39 self.__layout.setContentsMargins(margin, margin, margin, margin) |
39 self.__layout.setSpacing(1) |
40 self.__layout.setSpacing(2) |
40 |
41 |
41 self.__provider = None |
42 self.__provider = None |
42 |
43 |
43 self.__editor = editor |
44 self.__editor = editor |
44 self.__editor.languageChanged.connect(self.__updateButtonStates) |
45 self.__editor.languageChanged.connect(self.__updateButtonStates) |
46 self.__editor.editorRenamed.connect(self.__updateButtonStates) |
47 self.__editor.editorRenamed.connect(self.__updateButtonStates) |
47 |
48 |
48 self.__createButtons() |
49 self.__createButtons() |
49 |
50 |
50 self.__layout.addStretch() |
51 self.__layout.addStretch() |
51 self.setMaximumWidth(self.__buttons["bold"].sizeHint().width() + 2) |
52 self.setMaximumWidth( |
|
53 self.__buttons["bold"].sizeHint().width() + 2 * margin) |
52 |
54 |
53 self.__updateButtonStates() |
55 self.__updateButtonStates() |
54 |
56 |
55 def __createButtons(self): |
57 def __createButtons(self): |
56 """ |
58 """ |
57 Private slot to create the various tool buttons. |
59 Private slot to create the various tool buttons. |
58 """ |
60 """ |
59 self.__buttons = {} |
61 self.__buttons = {} |
|
62 self.__separators = [] |
60 |
63 |
|
64 self.__addButton("bold", "formatTextBold.png") |
|
65 self.__addButton("italic", "formatTextItalic.png") |
|
66 self.__addButton("strikethrough", "formatTextStrikethrough.png") |
|
67 self.__addSeparator() |
|
68 self.__addButton("header1", "formatTextHeader1.png") |
|
69 self.__addButton("header2", "formatTextHeader2.png") |
|
70 self.__addButton("header3", "formatTextHeader3.png") |
|
71 button = self.__addButton("header", "formatTextHeader.png") |
|
72 button.setPopupMode(QToolButton.InstantPopup) |
|
73 |
|
74 def __addButton(self, format, iconName): |
|
75 """ |
|
76 Private method to add a format button. |
|
77 |
|
78 @param format unique name of the format |
|
79 @type str |
|
80 @param iconName name of the icon for the button |
|
81 @type str |
|
82 @return generated button |
|
83 @rtype QToolButton |
|
84 """ |
61 button = QToolButton(self) |
85 button = QToolButton(self) |
62 button.setIcon(UI.PixmapCache.getIcon("formatTextBold.png")) |
86 button.setIcon(UI.PixmapCache.getIcon(iconName)) |
63 button.clicked.connect(lambda: self.__formatClicked("bold")) |
87 button.clicked.connect(lambda: self.__formatClicked(format)) |
64 self.__layout.addWidget(button) |
88 self.__layout.addWidget(button) |
65 self.__buttons["bold"] = button |
89 self.__buttons[format] = button |
66 |
90 |
67 button = QToolButton(self) |
91 return button |
68 button.setIcon(UI.PixmapCache.getIcon("formatTextItalic.png")) |
92 |
69 button.clicked.connect(lambda: self.__formatClicked("italic")) |
93 def __addSeparator(self): |
70 self.__layout.addWidget(button) |
94 """ |
71 self.__buttons["italic"] = button |
95 Private method to add a separator line. |
|
96 """ |
|
97 line = QFrame(self) |
|
98 line.setLineWidth(2) |
|
99 if isinstance(self.__layout, QVBoxLayout): |
|
100 line.setFrameShape(QFrame.HLine) |
|
101 else: |
|
102 line.setFrameShape(QFrame.VLine) |
|
103 line.setFrameShadow(QFrame.Sunken) |
72 |
104 |
73 button = QToolButton(self) |
105 self.__layout.addWidget(line) |
74 button.setIcon(UI.PixmapCache.getIcon("formatTextStrikethrough.png")) |
106 self.__separators.append(line) |
75 button.clicked.connect(lambda: self.__formatClicked("strikethrough")) |
|
76 self.__layout.addWidget(button) |
|
77 self.__buttons["strikethrough"] = button |
|
78 |
107 |
79 @pyqtSlot() |
108 @pyqtSlot() |
80 def __updateButtonStates(self): |
109 def __updateButtonStates(self): |
81 """ |
110 """ |
82 Private slot to change tzhe button states. |
111 Private slot to change the button states. |
83 """ |
112 """ |
84 self.__provider = MarkupProviders.getMarkupProvider(self.__editor) |
113 provider = MarkupProviders.getMarkupProvider(self.__editor) |
85 |
114 if self.__provider is None or \ |
86 self.__buttons["bold"].setEnabled(self.__provider.hasBold()) |
115 provider.kind() != self.__provider.kind(): |
87 self.__buttons["italic"].setEnabled(self.__provider.hasItalic()) |
116 self.__provider = provider |
88 self.__buttons["strikethrough"].setEnabled( |
117 |
89 self.__provider.hasStrikethrough()) |
118 self.__buttons["bold"].setEnabled(self.__provider.hasBold()) |
|
119 self.__buttons["italic"].setEnabled(self.__provider.hasItalic()) |
|
120 self.__buttons["strikethrough"].setEnabled( |
|
121 self.__provider.hasStrikethrough()) |
|
122 headerLevels = self.__provider.headerLevels() |
|
123 self.__buttons["header1"].setEnabled(headerLevels >= 1) |
|
124 self.__buttons["header2"].setEnabled(headerLevels >= 2) |
|
125 self.__buttons["header3"].setEnabled(headerLevels >= 3) |
|
126 self.__buttons["header"].setEnabled(headerLevels > 3) |
|
127 # TODO: create header button menu |
90 |
128 |
91 def __formatClicked(self, format): |
129 def __formatClicked(self, format): |
92 """ |
130 """ |
93 Private slot to handle a format button being clicked. |
131 Private slot to handle a format button being clicked. |
94 |
132 |