116 q = self.parentWidget()
117 mw = q.style().pixelMetric(QStyle.PixelMetric.PM_DockWidgetTitleMargin,
None, q)
118 fw = q.style().pixelMetric(QStyle.PixelMetric.PM_DockWidgetFrameWidth,
None, q)
119 closeSize = QSize(0, 0)
122 floatSize = QSize(0, 0)
125 hideSize = QSize(0, 0)
128 pinSize = QSize(0, 0)
131 buttonHeight = max(max(closeSize.height(), floatSize.height()),
132 hideSize.height(), pinSize.height()) + 2
133 buttonWidth = closeSize.width() + floatSize.width() + hideSize.width() + pinSize.width()
134 titleFontMetrics = q.fontMetrics()
135 fontHeight = titleFontMetrics.lineSpacing() + 2 * mw
136 height = max(buttonHeight, fontHeight)
137 width = buttonWidth + height + 4 * mw + 2 * fw
138 if hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetVerticalTitleBar):
139 width, height = height, width
140 return QSize(width, height)
143 p = QStylePainter(self)
144 q = self.parentWidget()
145 if hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetVerticalTitleBar):
146 fw = 1
or q.isFloating()
and q.style().pixelMetric(
147 QStyle.PM_DockWidgetFrameWidth,
None, q)
or 0
148 mw = q.style().pixelMetric(QStyle.PM_DockWidgetTitleMargin,
None, q)
149 titleOpt = QStyleOptionDockWidget()
151 titleOpt.verticalTitleBar =
True
152 titleOpt.rect = QRect(
156 self.geometry().width() - (fw * 2),
157 self.geometry().height() - (fw * 2) -
159 titleOpt.title = q.windowTitle()
160 titleOpt.closable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetClosable)
161 titleOpt.floatable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetFloatable)
162 p.drawControl(QStyle.CE_DockWidgetTitle, titleOpt)
164 fw = q.isFloating()
and q.style().pixelMetric(
165 QStyle.PM_DockWidgetFrameWidth,
None, q)
or 0
166 mw = q.style().pixelMetric(QStyle.PixelMetric.PM_DockWidgetTitleMargin,
None, q)
167 titleOpt = QStyleOptionDockWidget()
169 titleOpt.rect = QRect(
173 self.geometry().width() - (fw * 2) -
175 self.geometry().height() - (fw * 2)))
176 titleOpt.title = q.windowTitle()
177 titleOpt.closable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetClosable)
178 titleOpt.floatable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetFloatable)
179 p.drawControl(QStyle.ControlElement.CE_DockWidgetTitle, titleOpt)
182 q = self.parentWidget()
183 if hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetVerticalTitleBar):
184 fh = q.isFloating()
and q.style().pixelMetric(
185 QStyle.PixelMetric.PM_DockWidgetFrameWidth,
None, q)
or 0
186 opt = QStyleOptionDockWidget()
188 opt.verticalTitleBar =
True
192 self.geometry().width() - (fh * 2),
194 opt.title = q.windowTitle()
195 opt.closable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetClosable)
196 opt.floatable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetFloatable)
197 floatRect = q.style().subElementRect(
198 QStyle.SubElement.SubElement.SE_DockWidgetFloatButton, opt, q)
199 if not floatRect.isNull():
201 closeRect = q.style().subElementRect(
202 QStyle.SubElement.SubElement.SE_DockWidgetCloseButton, opt, q)
203 if not closeRect.isNull():
206 if not floatRect.isNull():
208 elif not closeRect.isNull():
211 if not closeRect.isNull():
213 elif not floatRect.isNull():
215 collapseRect = QRect(QPoint(top, fh), size)
217 pinRect = QRect(QPoint(top, fh + collapseRect.height() + 1), size)
220 fw = q.isFloating()
and q.style().pixelMetric(
221 QStyle.PixelMetric.PixelMetric.PM_DockWidgetFrameWidth,
None, q)
or 0
222 opt = QStyleOptionDockWidget()
227 self.geometry().width() - (fw * 2),
228 self.geometry().height() - (fw * 2)))
229 opt.title = q.windowTitle()
230 opt.closable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetFeature.DockWidgetClosable)
231 opt.floatable =
hasFeature(q, QDockWidget.DockWidgetFeature.DockWidgetFeature.DockWidgetFloatable)
232 floatRect = q.style().subElementRect(
233 QStyle.SubElement.SE_DockWidgetFloatButton, opt, q)
234 if not floatRect.isNull():
236 closeRect = q.style().subElementRect(
237 QStyle.SubElement.SE_DockWidgetCloseButton, opt, q)
238 if not closeRect.isNull():
241 if not floatRect.isNull():
243 elif not closeRect.isNull():
246 if not closeRect.isNull():
248 elif not floatRect.isNull():
250 collapseRect = QRect(QPoint(fw, top), size)
252 pinRect = QRect(QPoint(fw + collapseRect.width() + 1, top), size)