QSize QDockWidgetLayout::maximumSize() const { if (item_list[Content] != 0) { const QSize content = item_list[Content]->maximumSize(); return sizeFromContent(content, parentWidget()->isWindow()); } else { return parentWidget()->maximumSize(); } }
QSize QDockWidgetLayout::minimumSize() const { QDockWidget *w = qobject_cast<QDockWidget*>(parentWidget()); QSize content(0, 0); if (item_list[Content] != 0) content = item_list[Content]->minimumSize(); return sizeFromContent(content, w->isFloating()); }
void QDockWidgetLayout::setGeometry(const QRect &geometry) { QDockWidget *q = qobject_cast<QDockWidget*>(parentWidget()); bool nativeDeco = nativeWindowDeco(); int fw = q->isFloating() && !nativeDeco ? q->style()->pixelMetric(QStyle::PM_DockWidgetFrameWidth, 0, 0) : 0; if (nativeDeco) { if (QLayoutItem *item = item_list[Content]) item->setGeometry(geometry); } else { int titleHeight = this->titleHeight(); if (verticalTitleBar) { _titleArea = QRect(QPoint(fw, fw), QSize(titleHeight, geometry.height() - (fw * 2))); } else { _titleArea = QRect(QPoint(fw, fw), QSize(geometry.width() - (fw * 2), titleHeight)); } if (QLayoutItem *item = item_list[TitleBar]) { item->setGeometry(_titleArea); } else { QStyleOptionDockWidgetV2 opt; q->initStyleOption(&opt); if (QLayoutItem *item = item_list[CloseButton]) { if (!item->isEmpty()) { QRect r = q->style() ->subElementRect(QStyle::SE_DockWidgetCloseButton, &opt, q); if (!r.isNull()) item->setGeometry(r); } } if (QLayoutItem *item = item_list[FloatButton]) { if (!item->isEmpty()) { QRect r = q->style() ->subElementRect(QStyle::SE_DockWidgetFloatButton, &opt, q); if (!r.isNull()) item->setGeometry(r); } } } if (QLayoutItem *item = item_list[Content]) { QRect r = geometry; if (verticalTitleBar) { r.setLeft(_titleArea.right() + 1); r.adjust(0, fw, -fw, -fw); } else { r.setTop(_titleArea.bottom() + 1); r.adjust(fw, 0, -fw, -fw); } item->setGeometry(r); } } QLayoutItem *item = item_list[Content]; if (item != 0 && q->isFloating()) { QSize s = sizeFromContent(item->maximumSize(), true); q->setMaximumSize(s); } else { q->setMaximumSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX); } }