From 4037eb7e84eda2b72a456cf7ff19182c2d4a1f7a Mon Sep 17 00:00:00 2001 From: Timothy Pearson Date: Wed, 17 Oct 2012 15:03:40 -0500 Subject: [PATCH] Add tab corner widget information to style data structures This breaks the style ABI --- src/kernel/qstyle.h | 25 ++++++++++++++++++------- src/styles/qcommonstyle.cpp | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/kernel/qstyle.h b/src/kernel/qstyle.h index 324b987..1d20b8c 100644 --- a/src/kernel/qstyle.h +++ b/src/kernel/qstyle.h @@ -133,6 +133,8 @@ class QStyleHintReturn; // not defined yet typedef QMap DialogButtonSizeMap; typedef QMap TabIdentifierIndexMap; +class QStyleControlElementGenericWidgetData; + class QStyleControlElementPopupMenuData { public: // @@ -146,13 +148,6 @@ class QStyleControlElementCheckListItemData { int height; }; -class QStyleControlElementTabBarData { - public: - int tabCount; - QTabBar::Shape shape; - TabIdentifierIndexMap identIndexMap; -}; - class QStyleControlElementListViewData { public: bool rootDecorated; @@ -204,6 +199,22 @@ class QStyleControlElementGenericWidgetData { QFont font; }; +class QStyleControlElementTabBarData { + public: + int tabCount; + int currentTabIndex; + QTabBar::Shape shape; + TabIdentifierIndexMap identIndexMap; + QStyleControlElementGenericWidgetData cornerWidgets[4]; + + enum CornerWidgetLocation { + CWL_TopLeft = 0, + CWL_TopRight = 1, + CWL_BottomLeft = 2, + CWL_BottomRight = 3 + }; +}; + class Q_EXPORT QStyleControlElementData { public: QStringList widgetObjectTypes; diff --git a/src/styles/qcommonstyle.cpp b/src/styles/qcommonstyle.cpp index 8293285..2614bbf 100644 --- a/src/styles/qcommonstyle.cpp +++ b/src/styles/qcommonstyle.cpp @@ -49,6 +49,7 @@ #include "qpixmap.h" #include "qpushbutton.h" #include "qtabbar.h" +#include "qtabwidget.h" #include "qlineedit.h" #include "qscrollbar.h" #include "qtoolbutton.h" @@ -333,6 +334,7 @@ QStyleControlElementData populateControlElementDataFromWidget(const QWidget* wid const QTabBar *tb = dynamic_cast(widget); if (tb) { ceData.tabBarData.tabCount = tb->count(); + ceData.tabBarData.currentTabIndex = tb->currentTab(); ceData.tabBarData.shape = tb->shape(); ceData.tabBarData.identIndexMap.clear(); const QTab* currentTab; @@ -342,6 +344,38 @@ QStyleControlElementData populateControlElementDataFromWidget(const QWidget* wid ceData.tabBarData.identIndexMap[currentTab->identifier()] = tb->indexOf(currentTab->identifier()); } } + const QTabWidget *tw = dynamic_cast(tb->parent()); + if (tw) { + QWidget *cw; + cw = tw->cornerWidget(Qt::TopLeft); + if(cw) { + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopLeft].widgetObjectTypes = getObjectTypeListForObject(cw); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopLeft].geometry = cw->geometry(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopLeft].rect = cw->rect(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopLeft].pos = cw->pos(); + } + cw = tw->cornerWidget(Qt::TopRight); + if(cw) { + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopRight].widgetObjectTypes = getObjectTypeListForObject(cw); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopRight].geometry = cw->geometry(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopRight].rect = cw->rect(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_TopRight].pos = cw->pos(); + } + cw = tw->cornerWidget(Qt::BottomLeft); + if(cw) { + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomLeft].widgetObjectTypes = getObjectTypeListForObject(cw); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomLeft].geometry = cw->geometry(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomLeft].rect = cw->rect(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomLeft].pos = cw->pos(); + } + cw = tw->cornerWidget(Qt::BottomRight); + if(cw) { + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomRight].widgetObjectTypes = getObjectTypeListForObject(cw); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomRight].geometry = cw->geometry(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomRight].rect = cw->rect(); + ceData.tabBarData.cornerWidgets[QStyleControlElementTabBarData::CWL_BottomRight].pos = cw->pos(); + } + } } } if (ceData.widgetObjectTypes.contains("QToolBox")) {