From 07ae18f96e87a2db40ae014f28893f1080efa7ae Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Fri, 2 Mar 2012 15:42:35 -0800 Subject: Implements QStackedLayout's hfw-related methods. QStackedLayout does not support height for width (simply because it does not reimplement heightForWidth() and hasHeightForWidth()). That is not possible to fix without breaking binary compatibility under Qt4, which use a modified version of QStackedLayout that reimplements the hfw-related functions as a workaround. Change-Id: I81c795f0c247a2e708292de35f0650384248c6cd Reviewed-by: Friedemann Kleint --- src/widgets/kernel/qstackedlayout.cpp | 32 +++++++++++++++++++++++ src/widgets/kernel/qstackedlayout.h | 2 ++ src/widgets/widgets/qstackedwidget.cpp | 46 ++-------------------------------- 3 files changed, 36 insertions(+), 44 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp index 9b40063e65..0d2e7716e5 100644 --- a/src/widgets/kernel/qstackedlayout.cpp +++ b/src/widgets/kernel/qstackedlayout.cpp @@ -476,6 +476,38 @@ void QStackedLayout::setGeometry(const QRect &rect) } } +/*! + \reimp +*/ +bool QStackedLayout::hasHeightForWidth() const +{ + const int n = count(); + + for (int i = 0; i < n; ++i) { + if (QLayoutItem *item = itemAt(i)) { + if (item->hasHeightForWidth()) + return true; + } + } + return false; +} + +/*! + \reimp +*/ +int QStackedLayout::heightForWidth(int width) const +{ + const int n = count(); + + int hfw = 0; + for (int i = 0; i < n; ++i) { + if (QLayoutItem *item = itemAt(i)) { + hfw = qMax(hfw, item->heightForWidth(width)); + } + } + return hfw; +} + /*! \enum QStackedLayout::StackingMode \since 4.4 diff --git a/src/widgets/kernel/qstackedlayout.h b/src/widgets/kernel/qstackedlayout.h index e54efa886e..fa77341c52 100644 --- a/src/widgets/kernel/qstackedlayout.h +++ b/src/widgets/kernel/qstackedlayout.h @@ -94,6 +94,8 @@ public: QLayoutItem *itemAt(int) const; QLayoutItem *takeAt(int); void setGeometry(const QRect &rect); + bool hasHeightForWidth() const; + int heightForWidth(int width) const; Q_SIGNALS: void widgetRemoved(int index); diff --git a/src/widgets/widgets/qstackedwidget.cpp b/src/widgets/widgets/qstackedwidget.cpp index 5a8a382a58..3c88090eb6 100644 --- a/src/widgets/widgets/qstackedwidget.cpp +++ b/src/widgets/widgets/qstackedwidget.cpp @@ -49,54 +49,12 @@ QT_BEGIN_NAMESPACE -/** - QStackedLayout does not support height for width (simply because it does not reimplement - heightForWidth() and hasHeightForWidth()). That is not possible to fix without breaking - binary compatibility. (QLayout is subject to multiple inheritance). - However, we can fix QStackedWidget by simply using a modified version of QStackedLayout - that reimplements the hfw-related functions: - */ -class QStackedLayoutHFW : public QStackedLayout -{ -public: - QStackedLayoutHFW(QWidget *parent = 0) : QStackedLayout(parent) {} - bool hasHeightForWidth() const; - int heightForWidth(int width) const; -}; - -bool QStackedLayoutHFW::hasHeightForWidth() const -{ - const int n = count(); - - for (int i = 0; i < n; ++i) { - if (QLayoutItem *item = itemAt(i)) { - if (item->hasHeightForWidth()) - return true; - } - } - return false; -} - -int QStackedLayoutHFW::heightForWidth(int width) const -{ - const int n = count(); - - int hfw = 0; - for (int i = 0; i < n; ++i) { - if (QLayoutItem *item = itemAt(i)) { - hfw = qMax(hfw, item->heightForWidth(width)); - } - } - return hfw; -} - - class QStackedWidgetPrivate : public QFramePrivate { Q_DECLARE_PUBLIC(QStackedWidget) public: QStackedWidgetPrivate():layout(0){} - QStackedLayoutHFW *layout; + QStackedLayout *layout; bool blockChildAdd; }; @@ -180,7 +138,7 @@ QStackedWidget::QStackedWidget(QWidget *parent) : QFrame(*new QStackedWidgetPrivate, parent) { Q_D(QStackedWidget); - d->layout = new QStackedLayoutHFW(this); + d->layout = new QStackedLayout(this); connect(d->layout, SIGNAL(widgetRemoved(int)), this, SIGNAL(widgetRemoved(int))); connect(d->layout, SIGNAL(currentChanged(int)), this, SIGNAL(currentChanged(int))); } -- cgit v1.2.3 From e1b2755083c8b30d2062108ea490f9c49729cf3b Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Tue, 6 Mar 2012 22:06:30 +0100 Subject: itemview/itemmodels: make some constructors explicit This is a semi-automatic search, so I'm reasonably sure that all the exported ones have been caught. Change-Id: I38d7978f1fcf7513e802ed0042aa7a57a95b0060 Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qcolumnview_p.h | 2 +- src/widgets/itemviews/qdatawidgetmapper.h | 2 +- src/widgets/itemviews/qitemeditorfactory.h | 2 +- src/widgets/itemviews/qstandarditemmodel.h | 2 +- src/widgets/itemviews/qtablewidget.h | 2 +- src/widgets/itemviews/qtreewidget.h | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h index 5bdb74c56c..c3c79d35a3 100644 --- a/src/widgets/itemviews/qcolumnview_p.h +++ b/src/widgets/itemviews/qcolumnview_p.h @@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE class QColumnViewPreviewColumn : public QAbstractItemView { public: - QColumnViewPreviewColumn(QWidget *parent) : QAbstractItemView(parent), previewWidget(0) { + explicit QColumnViewPreviewColumn(QWidget *parent) : QAbstractItemView(parent), previewWidget(0) { } void setPreviewWidget(QWidget *widget) { diff --git a/src/widgets/itemviews/qdatawidgetmapper.h b/src/widgets/itemviews/qdatawidgetmapper.h index e73d4b1044..3cb8f09510 100644 --- a/src/widgets/itemviews/qdatawidgetmapper.h +++ b/src/widgets/itemviews/qdatawidgetmapper.h @@ -66,7 +66,7 @@ class Q_WIDGETS_EXPORT QDataWidgetMapper: public QObject Q_PROPERTY(SubmitPolicy submitPolicy READ submitPolicy WRITE setSubmitPolicy) public: - QDataWidgetMapper(QObject *parent = 0); + explicit QDataWidgetMapper(QObject *parent = 0); ~QDataWidgetMapper(); void setModel(QAbstractItemModel *model); diff --git a/src/widgets/itemviews/qitemeditorfactory.h b/src/widgets/itemviews/qitemeditorfactory.h index aff8de3a4c..8bc1cc7df6 100644 --- a/src/widgets/itemviews/qitemeditorfactory.h +++ b/src/widgets/itemviews/qitemeditorfactory.h @@ -69,7 +69,7 @@ template class QItemEditorCreator : public QItemEditorCreatorBase { public: - inline QItemEditorCreator(const QByteArray &valuePropertyName); + inline explicit QItemEditorCreator(const QByteArray &valuePropertyName); inline QWidget *createWidget(QWidget *parent) const { return new T(parent); } inline QByteArray valuePropertyName() const { return propertyName; } diff --git a/src/widgets/itemviews/qstandarditemmodel.h b/src/widgets/itemviews/qstandarditemmodel.h index e374665f20..767665fd94 100644 --- a/src/widgets/itemviews/qstandarditemmodel.h +++ b/src/widgets/itemviews/qstandarditemmodel.h @@ -66,7 +66,7 @@ class Q_WIDGETS_EXPORT QStandardItem { public: QStandardItem(); - QStandardItem(const QString &text); + explicit QStandardItem(const QString &text); QStandardItem(const QIcon &icon, const QString &text); explicit QStandardItem(int rows, int columns = 1); virtual ~QStandardItem(); diff --git a/src/widgets/itemviews/qtablewidget.h b/src/widgets/itemviews/qtablewidget.h index 3d08e204d1..0c6ed85fc9 100644 --- a/src/widgets/itemviews/qtablewidget.h +++ b/src/widgets/itemviews/qtablewidget.h @@ -84,7 +84,7 @@ class Q_WIDGETS_EXPORT QTableWidgetItem friend class QTableModel; public: enum ItemType { Type = 0, UserType = 1000 }; - QTableWidgetItem(int type = Type); + explicit QTableWidgetItem(int type = Type); explicit QTableWidgetItem(const QString &text, int type = Type); explicit QTableWidgetItem(const QIcon &icon, const QString &text, int type = Type); QTableWidgetItem(const QTableWidgetItem &other); diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h index c9654d3e8e..c5f1032728 100644 --- a/src/widgets/itemviews/qtreewidget.h +++ b/src/widgets/itemviews/qtreewidget.h @@ -69,7 +69,7 @@ class Q_WIDGETS_EXPORT QTreeWidgetItem public: enum ItemType { Type = 0, UserType = 1000 }; explicit QTreeWidgetItem(int type = Type); - QTreeWidgetItem(const QStringList &strings, int type = Type); + explicit QTreeWidgetItem(const QStringList &strings, int type = Type); explicit QTreeWidgetItem(QTreeWidget *view, int type = Type); QTreeWidgetItem(QTreeWidget *view, const QStringList &strings, int type = Type); QTreeWidgetItem(QTreeWidget *view, QTreeWidgetItem *after, int type = Type); -- cgit v1.2.3 From dbab994b2cdc5469cf53e3f6c5d09bc2d7b39ce9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lund=20Martsum?= Date: Wed, 7 Mar 2012 16:02:47 +0100 Subject: QDialog - Change exec() and open() to virtual functions QDialog is meant for inheritance (it contains other virtual functions) ... The main reason for this is that we inside the dialog could have a (datadepened) precondition that should prevent the dialog from being shown at all - instead we might just want to show a messagebox. That is not easy solvable in Qt right now. It is possible to reimplement setVisible - but calling reject from setVisible does not work. There seems only to be clumsy solutions to that problem - unless these functions are made virtual Beside it also creates a nice symmetry to done. Change-Id: I51c29e1f7a4a5522f5c0f71bcf98c943580790b9 Reviewed-by: Friedemann Kleint Reviewed-by: Andreas Aardal Hanssen Reviewed-by: Robin Burchell --- src/widgets/dialogs/qdialog.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qdialog.h b/src/widgets/dialogs/qdialog.h index 7d3052a782..f20ff46d41 100644 --- a/src/widgets/dialogs/qdialog.h +++ b/src/widgets/dialogs/qdialog.h @@ -91,8 +91,8 @@ Q_SIGNALS: void rejected(); public Q_SLOTS: - void open(); - int exec(); + virtual void open(); + virtual int exec(); virtual void done(int); virtual void accept(); virtual void reject(); -- cgit v1.2.3 From cc5ea94c0172645741e9a5601d13ff500d2332ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lund=20Martsum?= Date: Wed, 8 Feb 2012 15:49:28 +0100 Subject: QTabBar - add minimumTabSizeHint as virtual function. Just implements what the note states (and removes the private function) Change-Id: Ida009e1836ded5816218372edb8c178523242a9e Reviewed-by: Girish Ramakrishnan Reviewed-by: Robin Burchell --- src/widgets/widgets/qtabbar.cpp | 20 ++++++++++++-------- src/widgets/widgets/qtabbar.h | 1 + src/widgets/widgets/qtabbar_p.h | 2 -- 3 files changed, 13 insertions(+), 10 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qtabbar.cpp b/src/widgets/widgets/qtabbar.cpp index ce25a22847..ecb0ef84e0 100644 --- a/src/widgets/widgets/qtabbar.cpp +++ b/src/widgets/widgets/qtabbar.cpp @@ -427,7 +427,7 @@ void QTabBarPrivate::layoutTabs() tabList[i].maxRect = QRect(x, 0, sz.width(), sz.height()); x += sz.width(); maxHeight = qMax(maxHeight, sz.height()); - sz = minimumTabSizeHint(i); + sz = q->minimumTabSizeHint(i); tabList[i].minRect = QRect(minx, 0, sz.width(), sz.height()); minx += sz.width(); tabChain[tabChainIndex].init(); @@ -452,7 +452,7 @@ void QTabBarPrivate::layoutTabs() tabList[i].maxRect = QRect(0, y, sz.width(), sz.height()); y += sz.height(); maxWidth = qMax(maxWidth, sz.width()); - sz = minimumTabSizeHint(i); + sz = q->minimumTabSizeHint(i); tabList[i].minRect = QRect(0, miny, sz.width(), sz.height()); miny += sz.height(); tabChain[tabChainIndex].init(); @@ -1290,14 +1290,18 @@ static QString computeElidedText(Qt::TextElideMode mode, const QString &text) return ret; } -QSize QTabBarPrivate::minimumTabSizeHint(int index) +/*! + Returns the minimum tab size hint for the tab at position \a index. + \since Qt 5.0 +*/ + +QSize QTabBar::minimumTabSizeHint(int index) const { - Q_Q(QTabBar); - // ### Qt 5: make this a protected virtual function in QTabBar - Tab &tab = tabList[index]; + Q_D(const QTabBar); + QTabBarPrivate::Tab &tab = const_cast(d->tabList[index]); QString oldText = tab.text; - tab.text = computeElidedText(elideMode, oldText); - QSize size = q->tabSizeHint(index); + tab.text = computeElidedText(d->elideMode, oldText); + QSize size = tabSizeHint(index); tab.text = oldText; return size; } diff --git a/src/widgets/widgets/qtabbar.h b/src/widgets/widgets/qtabbar.h index 3a4b9198d3..13ed3bc6d2 100644 --- a/src/widgets/widgets/qtabbar.h +++ b/src/widgets/widgets/qtabbar.h @@ -178,6 +178,7 @@ Q_SIGNALS: protected: virtual QSize tabSizeHint(int index) const; + virtual QSize minimumTabSizeHint(int index) const; virtual void tabInserted(int index); virtual void tabRemoved(int index); virtual void tabLayoutChange(); diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h index c907b48eeb..aa9db38677 100644 --- a/src/widgets/widgets/qtabbar_p.h +++ b/src/widgets/widgets/qtabbar_p.h @@ -165,8 +165,6 @@ public: inline bool validIndex(int index) const { return index >= 0 && index < tabList.count(); } void setCurrentNextEnabledIndex(int offset); - QSize minimumTabSizeHint(int index); - QToolButton* rightB; // right or bottom QToolButton* leftB; // left or top -- cgit v1.2.3 From 08c1cb5c5a7da849dbd8a1f5020da69e8ebc7c70 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 14 Mar 2012 14:15:50 +0100 Subject: Fix warning about unused parameter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Side effect of 3bb902495291c50a2f06e8e03a62a647db3e5cd4 Change-Id: Idd6127832c4af26d3e1dad7b4994001b05bc2be8 Reviewed-by: Jędrzej Nowacki --- src/widgets/kernel/qwidget.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 1493f61972..084d609730 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -8393,6 +8393,7 @@ void QWidget::mouseReleaseEvent(QMouseEvent *event) void QWidget::mouseDoubleClickEvent(QMouseEvent *event) { + Q_UNUSED(event); } #ifndef QT_NO_WHEELEVENT -- cgit v1.2.3 From e7adaed5298cb9fc7c41ec33b68a7d584d709674 Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Sat, 17 Mar 2012 03:18:12 -0700 Subject: QtWidgets: Cleanup Q3* items Clear all the Q3* items away, expect QStyle::SH_Q3ListViewExpand_SelectMouseType which is still used by QTreeView. So simply removed Q3 from its name. Change-Id: Ia79f0283137b6751ba68791ae55df1d8bd7ea74a Reviewed-by: Friedemann Kleint --- src/widgets/itemviews/qtreeview.cpp | 4 +- src/widgets/kernel/qaction.cpp | 2 +- src/widgets/kernel/qapplication.h | 1 - src/widgets/kernel/qapplication_qpa.cpp | 5 +- src/widgets/styles/qcommonstyle.cpp | 14 +- src/widgets/styles/qmacstyle_mac.mm | 56 +---- src/widgets/styles/qmotifstyle.cpp | 148 ----------- src/widgets/styles/qplastiquestyle.cpp | 6 +- src/widgets/styles/qstyle.cpp | 48 +--- src/widgets/styles/qstyle.h | 31 +-- src/widgets/styles/qstyleoption.cpp | 388 ----------------------------- src/widgets/styles/qstyleoption.h | 68 +---- src/widgets/styles/qwindowscestyle.cpp | 5 +- src/widgets/styles/qwindowsmobilestyle.cpp | 5 +- src/widgets/styles/qwindowsstyle.cpp | 3 +- src/widgets/styles/qwindowsxpstyle.cpp | 14 +- src/widgets/widgets/qmenu.h | 1 - src/widgets/widgets/qtabwidget.h | 1 - 18 files changed, 24 insertions(+), 776 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index 6166823754..04b3645c87 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -1849,7 +1849,7 @@ void QTreeView::mousePressEvent(QMouseEvent *event) { Q_D(QTreeView); bool handled = false; - if (style()->styleHint(QStyle::SH_Q3ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonPress) + if (style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonPress) handled = d->expandOrCollapseItemAtPos(event->pos()); if (!handled && d->itemDecorationAt(event->pos()) == -1) QAbstractItemView::mousePressEvent(event); @@ -1866,7 +1866,7 @@ void QTreeView::mouseReleaseEvent(QMouseEvent *event) } else { if (state() == QAbstractItemView::DragSelectingState) setState(QAbstractItemView::NoState); - if (style()->styleHint(QStyle::SH_Q3ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonRelease) + if (style()->styleHint(QStyle::SH_ListViewExpand_SelectMouseType, 0, this) == QEvent::MouseButtonRelease) d->expandOrCollapseItemAtPos(event->pos()); } } diff --git a/src/widgets/kernel/qaction.cpp b/src/widgets/kernel/qaction.cpp index f450d13a39..c4f7995087 100644 --- a/src/widgets/kernel/qaction.cpp +++ b/src/widgets/kernel/qaction.cpp @@ -879,7 +879,7 @@ QString QAction::statusTip() const the action. The text may contain rich text. There is no default "What's This?" text. - \sa QWhatsThis Q3StyleSheet + \sa QWhatsThis */ void QAction::setWhatsThis(const QString &whatsthis) { diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h index 55ed6998fa..08e29e449e 100644 --- a/src/widgets/kernel/qapplication.h +++ b/src/widgets/kernel/qapplication.h @@ -243,7 +243,6 @@ private: friend class QWidgetPrivate; friend class QWidgetWindow; friend class QETWidget; - friend class Q3AccelManager; friend class QTranslator; friend class QWidgetAnimator; #ifndef QT_NO_SHORTCUT diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 97fc794252..7c969b4928 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -305,7 +305,6 @@ void QApplicationPrivate::initializeWidgetPaletteHash() setPossiblePalette(platformTheme->palette(QPlatformTheme::ToolButtonPalette), "QToolButton"); setPossiblePalette(platformTheme->palette(QPlatformTheme::ButtonPalette), "QAbstractButton"); setPossiblePalette(platformTheme->palette(QPlatformTheme::HeaderPalette), "QHeaderView"); - setPossiblePalette(platformTheme->palette(QPlatformTheme::HeaderPalette), "Q3Header"); setPossiblePalette(platformTheme->palette(QPlatformTheme::ItemViewPalette), "QAbstractItemView"); setPossiblePalette(platformTheme->palette(QPlatformTheme::MessageBoxLabelPelette), "QMessageBoxLabel"); setPossiblePalette(platformTheme->palette(QPlatformTheme::TabBarPalette), "QTabBar"); @@ -354,10 +353,8 @@ void QApplicationPrivate::initializeWidgetFontHash() fontHash->insert(QByteArrayLiteral("QAbstractItemView"), *font); if (const QFont *font = theme->font(QPlatformTheme::ListViewFont)) fontHash->insert(QByteArrayLiteral("QListViewFont"), *font); - if (const QFont *font = theme->font(QPlatformTheme::HeaderViewFont)) { + if (const QFont *font = theme->font(QPlatformTheme::HeaderViewFont)) fontHash->insert(QByteArrayLiteral("QHeaderViewFont"), *font); - fontHash->insert(QByteArrayLiteral("Q3Header"), *font); - } if (const QFont *font = theme->font(QPlatformTheme::ListBoxFont)) fontHash->insert(QByteArrayLiteral("QListBox"), *font); if (const QFont *font = theme->font(QPlatformTheme::ComboMenuItemFont)) diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 174e94e63d..ca06cda2b0 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -460,9 +460,6 @@ void QCommonStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, Q } p->restore(); break; - case PE_Q3DockWindowSeparator: - proxy()->drawPrimitive(PE_IndicatorToolBarSeparator, opt, p, widget); - break; case PE_IndicatorToolBarSeparator: { QPoint p1, p2; @@ -4106,10 +4103,8 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex } int frameWidth = 0; - if (!(widget && widget->inherits("Q3GroupBox")) - && ((groupBox->features & QStyleOptionFrameV2::Flat) == 0)) { + if ((groupBox->features & QStyleOptionFrameV2::Flat) == 0) frameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, groupBox, widget); - } ret = frameRect.adjusted(frameWidth, frameWidth + topHeight - topMargin, -frameWidth, -frameWidth); break; @@ -4233,10 +4228,6 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid case PM_DialogButtonsButtonHeight: ret = int(QStyleHelper::dpiScaled(30.)); break; - case PM_CheckListControllerSize: - case PM_CheckListButtonSize: - ret = int(QStyleHelper::dpiScaled(16.)); - break; case PM_TitleBarHeight: { if (const QStyleOptionTitleBar *tb = qstyleoption_cast(opt)) { if ((tb->titleBarFlags & Qt::WindowType_Mask) == Qt::Tool) { @@ -4711,7 +4702,6 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, case CT_MenuBar: case CT_Menu: case CT_MenuBarItem: - case CT_Q3Header: case CT_Slider: case CT_ProgressBar: case CT_TabBarTab: @@ -4756,7 +4746,7 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget break; #endif // QT_NO_GROUPBOX - case SH_Q3ListViewExpand_SelectMouseType: + case SH_ListViewExpand_SelectMouseType: case SH_TabBar_SelectMouseType: ret = QEvent::MouseButtonPress; break; diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 7e07cc1532..55c603896b 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -2145,20 +2145,6 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW else ret = sz.height(); break; } - case PM_CheckListButtonSize: { - switch (d->aquaSizeConstrain(opt, widget)) { - case QAquaSizeUnknown: - case QAquaSizeLarge: - GetThemeMetric(kThemeMetricCheckBoxWidth, &ret); - break; - case QAquaSizeMini: - GetThemeMetric(kThemeMetricMiniCheckBoxWidth, &ret); - break; - case QAquaSizeSmall: - GetThemeMetric(kThemeMetricSmallCheckBoxWidth, &ret); - break; - } - break; } case PM_DialogButtonsButtonWidth: { QSize sz; ret = d->aquaSizeConstrain(opt, 0, QStyle::CT_PushButton, QSize(-1, -1), &sz); @@ -2583,7 +2569,7 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w case SH_ScrollBar_StopMouseOverSlider: ret = true; break; - case SH_Q3ListViewExpand_SelectMouseType: + case SH_ListViewExpand_SelectMouseType: ret = QEvent::MouseButtonRelease; break; case SH_TabBar_SelectMouseType: @@ -3094,8 +3080,6 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai p->restore(); break; } case PE_IndicatorViewItemCheck: - case PE_Q3CheckListExclusiveIndicator: - case PE_Q3CheckListIndicator: case PE_IndicatorRadioButton: case PE_IndicatorCheckBox: { bool drawColorless = (!(opt->state & State_Active)) @@ -3108,8 +3092,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai bdi.adornment = kThemeDrawIndicatorOnly; if (opt->state & State_HasFocus) bdi.adornment |= kThemeAdornmentFocus; - bool isRadioButton = (pe == PE_Q3CheckListExclusiveIndicator - || pe == PE_IndicatorRadioButton); + bool isRadioButton = (pe == PE_IndicatorRadioButton); switch (d->aquaSizeConstrain(opt, w)) { case QAquaSizeUnknown: case QAquaSizeLarge: @@ -3137,11 +3120,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai bdi.value = kThemeButtonOn; else bdi.value = kThemeButtonOff; - HIRect macRect; - if (pe == PE_Q3CheckListExclusiveIndicator || pe == PE_Q3CheckListIndicator) - macRect = qt_hirectForQRect(opt->rect); - else - macRect = qt_hirectForQRect(opt->rect); + HIRect macRect = qt_hirectForQRect(opt->rect); if (!drawColorless) HIThemeDrawButton(&macRect, &bdi, cg, kHIThemeOrientationNormal, 0); else @@ -4931,35 +4910,6 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex } } break; - case CC_Q3ListView: - if (const QStyleOptionQ3ListView *lv = qstyleoption_cast(opt)) { - if (lv->subControls & SC_Q3ListView) - QWindowsStyle::drawComplexControl(cc, lv, p, widget); - if (lv->subControls & (SC_Q3ListViewBranch | SC_Q3ListViewExpand)) { - int y = lv->rect.y(); - int h = lv->rect.height(); - int x = lv->rect.right() - 10; - for (int i = 1; i < lv->items.size() && y < h; ++i) { - QStyleOptionQ3ListViewItem item = lv->items.at(i); - if (y + item.height > 0 && (item.childCount > 0 - || (item.features & (QStyleOptionQ3ListViewItem::Expandable - | QStyleOptionQ3ListViewItem::Visible)) - == (QStyleOptionQ3ListViewItem::Expandable - | QStyleOptionQ3ListViewItem::Visible))) { - QStyleOption treeOpt(0); - treeOpt.rect.setRect(x, y + item.height / 2 - 4, 9, 9); - treeOpt.palette = lv->palette; - treeOpt.state = lv->state; - treeOpt.state |= State_Children; - if (item.state & State_Open) - treeOpt.state |= State_Open; - proxy()->drawPrimitive(PE_IndicatorBranch, &treeOpt, p, widget); - } - y += item.totalHeight; - } - } - } - break; case CC_SpinBox: if (const QStyleOptionSpinBox *sb = qstyleoption_cast(opt)) { QStyleOptionSpinBox newSB = *sb; diff --git a/src/widgets/styles/qmotifstyle.cpp b/src/widgets/styles/qmotifstyle.cpp index 331b70f153..f02771ab61 100644 --- a/src/widgets/styles/qmotifstyle.cpp +++ b/src/widgets/styles/qmotifstyle.cpp @@ -346,41 +346,6 @@ void QMotifStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QP const QWidget *w) const { switch(pe) { - case PE_Q3CheckListExclusiveIndicator: - if (const QStyleOptionQ3ListView *lv = qstyleoption_cast(opt)) { - if (lv->items.isEmpty()) - return; - - if (lv->state & State_Enabled) - p->setPen(QPen(opt->palette.text().color())); - else - p->setPen(QPen(lv->palette.color(QPalette::Disabled, QPalette::Text))); - QPolygon a; - - int cx = opt->rect.width()/2 - 1; - int cy = opt->rect.height()/2; - int e = opt->rect.width()/2 - 1; - for (int i = 0; i < 3; i++) { //penWidth 2 doesn't quite work - a.setPoints(4, cx-e, cy, cx, cy-e, cx+e, cy, cx, cy+e); - p->drawPolygon(a); - e--; - } - if (opt->state & State_On) { - if (lv->state & State_Enabled) - p->setPen(QPen(opt->palette.text().color())); - else - p->setPen(QPen(lv->palette.color(QPalette::Disabled, - QPalette::Text))); - QBrush saveBrush = p->brush(); - p->setBrush(opt->palette.text()); - e = e - 2; - a.setPoints(4, cx-e, cy, cx, cy-e, cx+e, cy, cx, cy+e); - p->drawPolygon(a); - p->setBrush(saveBrush); - } - } - break; - case PE_FrameTabWidget: case PE_FrameWindow: qDrawShadePanel(p, opt->rect, opt->palette, QStyle::State_None, proxy()->pixelMetric(PM_DefaultFrameWidth)); @@ -1672,105 +1637,6 @@ void QMotifStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComple break; } #endif - case CC_Q3ListView: - if (opt->subControls & (SC_Q3ListViewBranch | SC_Q3ListViewExpand)) { - int i; - if (opt->subControls & SC_Q3ListView) - QCommonStyle::drawComplexControl(cc, opt, p, widget); - if (const QStyleOptionQ3ListView *lv = qstyleoption_cast(opt)) { - QStyleOptionQ3ListViewItem item = lv->items.at(0); - int y = opt->rect.y(); - int c; - QPolygon dotlines; - if ((opt->activeSubControls & SC_All) && (opt->subControls & SC_Q3ListViewExpand)) { - c = 2; - dotlines.resize(2); - dotlines[0] = QPoint(opt->rect.right(), opt->rect.top()); - dotlines[1] = QPoint(opt->rect.right(), opt->rect.bottom()); - } else { - int linetop = 0, linebot = 0; - // each branch needs at most two lines, ie. four end points - dotlines.resize(item.childCount * 4); - c = 0; - - // skip the stuff above the exposed rectangle - for (i = 1; i < lv->items.size(); ++i) { - QStyleOptionQ3ListViewItem child = lv->items.at(i); - if (child.height + y > 0) - break; - y += child.totalHeight; - } - - int bx = opt->rect.width() / 2; - - // paint stuff in the magical area - while (i < lv->items.size() && y < lv->rect.height()) { - QStyleOptionQ3ListViewItem child = lv->items.at(i); - if (child.features & QStyleOptionQ3ListViewItem::Visible) { - int lh; - if (!(item.features & QStyleOptionQ3ListViewItem::MultiLine)) - lh = child.height; - else - lh = p->fontMetrics().height() + 2 * lv->itemMargin; - lh = qMax(lh, QApplication::globalStrut().height()); - if (lh % 2 > 0) - lh++; - linebot = y + lh/2; - if ((child.features & QStyleOptionQ3ListViewItem::Expandable || child.childCount > 0) && - child.height > 0) { - // needs a box - p->setPen(opt->palette.text().color()); - p->drawRect(bx-4, linebot-4, 9, 9); - QPolygon a; - if ((child.state & State_Open)) - a.setPoints(3, bx-2, linebot-2, - bx, linebot+2, - bx+2, linebot-2); //Qt::RightArrow - else - a.setPoints(3, bx-2, linebot-2, - bx+2, linebot, - bx-2, linebot+2); //Qt::DownArrow - p->setBrush(opt->palette.text()); - p->drawPolygon(a); - p->setBrush(Qt::NoBrush); - // dotlinery - dotlines[c++] = QPoint(bx, linetop); - dotlines[c++] = QPoint(bx, linebot - 5); - dotlines[c++] = QPoint(bx + 5, linebot); - dotlines[c++] = QPoint(opt->rect.width(), linebot); - linetop = linebot + 5; - } else { - // just dotlinery - dotlines[c++] = QPoint(bx+1, linebot); - dotlines[c++] = QPoint(opt->rect.width(), linebot); - } - y += child.totalHeight; - } - ++i; - } - - // Expand line height to edge of rectangle if there's any - // visible child below - while (i < lv->items.size() && lv->items.at(i).height <= 0) - ++i; - if (i < lv->items.size()) - linebot = opt->rect.height(); - - if (linetop < linebot) { - dotlines[c++] = QPoint(bx, linetop); - dotlines[c++] = QPoint(bx, linebot); - } - } - - int line; // index into dotlines - p->setPen(opt->palette.text().color()); - if (opt->subControls & SC_Q3ListViewBranch) for(line = 0; line < c; line += 2) { - p->drawLine(dotlines[line].x(), dotlines[line].y(), - dotlines[line+1].x(), dotlines[line+1].y()); - } - } - break; } - default: QCommonStyle::drawComplexControl(cc, opt, p, widget); break; @@ -2123,20 +1989,6 @@ QMotifStyle::subElementRect(SubElement sr, const QStyleOption *opt, const QWidge break; } - case SE_Q3DockWindowHandleRect: - if (const QStyleOptionQ3DockWindow *dw = qstyleoption_cast(opt)) { - if (!dw->docked || !dw->closeEnabled) - rect.setRect(0, 0, opt->rect.width(), opt->rect.height()); - else { - if (dw->state == State_Horizontal) - rect.setRect(2, 15, opt->rect.width()-2, opt->rect.height() - 15); - else - rect.setRect(0, 2, opt->rect.width() - 15, opt->rect.height() - 2); - } - rect = visualRect(dw->direction, dw->rect, rect); - } - break; - case SE_ProgressBarLabel: case SE_ProgressBarGroove: case SE_ProgressBarContents: diff --git a/src/widgets/styles/qplastiquestyle.cpp b/src/widgets/styles/qplastiquestyle.cpp index 79893f066d..0bf443fe00 100644 --- a/src/widgets/styles/qplastiquestyle.cpp +++ b/src/widgets/styles/qplastiquestyle.cpp @@ -5631,8 +5631,7 @@ void QPlastiqueStyle::polish(QWidget *widget) if (widget->inherits("QWorkspaceTitleBar") || widget->inherits("QDockSeparator") - || widget->inherits("QDockWidgetSeparator") - || widget->inherits("Q3DockWindowResizeHandle")) { + || widget->inherits("QDockWidgetSeparator")) { widget->setAttribute(Qt::WA_Hover); } @@ -5687,8 +5686,7 @@ void QPlastiqueStyle::unpolish(QWidget *widget) if (widget->inherits("QWorkspaceTitleBar") || widget->inherits("QDockSeparator") - || widget->inherits("QDockWidgetSeparator") - || widget->inherits("Q3DockWindowResizeHandle")) { + || widget->inherits("QDockWidgetSeparator")) { widget->setAttribute(Qt::WA_Hover, false); } diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index db387fecec..d78a2ee2fb 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -596,8 +596,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value PE_IndicatorCheckBox On/off indicator, for example, a QCheckBox. \value PE_IndicatorRadioButton Exclusive on/off indicator, for example, a QRadioButton. - \value PE_Q3DockWindowSeparator Item separator for Qt 3 compatible dock window - and toolbar contents. \value PE_IndicatorDockWidgetResizeHandle Resize handle for dock windows. \value PE_Frame Generic frame @@ -619,16 +617,10 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value PE_FrameWindow Frame around a MDI window or a docking window. - \value PE_Q3Separator Qt 3 compatible generic separator. - \value PE_IndicatorMenuCheckMark Check mark used in a menu. \value PE_IndicatorProgressChunk Section of a progress bar indicator; see also QProgressBar. - \value PE_Q3CheckListController Qt 3 compatible controller part of a list view item. - \value PE_Q3CheckListIndicator Qt 3 compatible checkbox part of a list view item. - \value PE_Q3CheckListExclusiveIndicator Qt 3 compatible radio button part of a list view item. - \value PE_IndicatorBranch Lines used to represent the branch of a tree in a tree view. \value PE_IndicatorToolBarHandle The handle of a toolbar. \value PE_IndicatorToolBarSeparator The separator in a toolbar. @@ -740,9 +732,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \row \li \l State_On \li Indicates the indicator is checked. \row \li \l PE_IndicatorRadioButton \li \l QStyleOptionButton \li \l State_On \li Indicates that a radio button is selected. - \row \li{1,3} \l PE_Q3CheckListExclusiveIndicator, \l PE_Q3CheckListIndicator - \li{1,3} \l QStyleOptionQ3ListView \li \l State_On - \li Indicates whether or not the controller is selected. \row \li \l State_NoChange \li Indicates a "tri-state" controller. \row \li \l State_Enabled \li Indicates the controller is enabled. \row \li{1,4} \l PE_IndicatorBranch \li{1,4} \l QStyleOption @@ -760,9 +749,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \row \li \l PE_IndicatorToolBarHandle \li \l QStyleOption \li \l State_Horizontal \li Indicates that the window handle is horizontal instead of vertical. - \row \li \l PE_Q3DockWindowSeparator \li \l QStyleOption - \li \l State_Horizontal \li Indicates that the separator is horizontal - instead of vertical. \row \li \l PE_IndicatorSpinPlus, \l PE_IndicatorSpinMinus, \l PE_IndicatorSpinUp, \l PE_IndicatorSpinDown, \li \l QStyleOptionSpinBox @@ -826,8 +812,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value CE_MenuHMargin The horizontal extra space on the left/right of a menu. \value CE_MenuVMargin The vertical extra space on the top/bottom of a menu. - \value CE_Q3DockWindowEmptyArea The empty area of a QDockWidget. - \value CE_ToolBoxTab The toolbox's tab and label within a QToolBox. \value CE_SizeGrip Window resize handle; see also QSizeGrip. @@ -988,22 +972,11 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value SE_SpinBoxLayoutItem Area that counts for the parent layout. - \value SE_Q3DockWindowHandleRect Area for the tear-off handle. - \value SE_ProgressBarGroove Area for the groove. \value SE_ProgressBarContents Area for the progress indicator. \value SE_ProgressBarLabel Area for the text label. \value SE_ProgressBarLayoutItem Area that counts for the parent layout. - \omitvalue SE_DialogButtonAccept - \omitvalue SE_DialogButtonReject - \omitvalue SE_DialogButtonApply - \omitvalue SE_DialogButtonHelp - \omitvalue SE_DialogButtonAll - \omitvalue SE_DialogButtonRetry - \omitvalue SE_DialogButtonAbort - \omitvalue SE_DialogButtonIgnore - \omitvalue SE_DialogButtonCustom \omitvalue SE_ViewItemCheckIndicator \value SE_FrameContents Area for a frame's contents. @@ -1087,7 +1060,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \row \li \l SE_RadioButtonContents \li \l QStyleOptionButton \row \li \l SE_RadioButtonFocusRect \li \l QStyleOptionButton \row \li \l SE_ComboBoxFocusRect \li \l QStyleOptionComboBox - \row \li \l SE_Q3DockWindowHandleRect \li \l QStyleOptionQ3DockWindow \row \li \l SE_ProgressBarGroove \li \l QStyleOptionProgressBar \row \li \l SE_ProgressBarContents \li \l QStyleOptionProgressBar \row \li \l SE_ProgressBarLabel \li \l QStyleOptionProgressBar @@ -1107,7 +1079,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value CC_Slider A slider, like QSlider. \value CC_ToolButton A tool button, like QToolButton. \value CC_TitleBar A Title bar, like those used in QMdiSubWindow. - \value CC_Q3ListView Used for drawing the Q3ListView class. \value CC_GroupBox A group box, like QGroupBox. \value CC_Dial A dial, like QDial. \value CC_MdiControls The minimize, close, and normal @@ -1157,7 +1128,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value SC_ToolButton Tool button (see also QToolButton). \value SC_ToolButtonMenu Sub-control for opening a popup menu in a - tool button; see also Q3PopupMenu. + tool button. \value SC_TitleBarSysMenu System menu button (i.e., restore, close, etc.). \value SC_TitleBarMinButton Minimize button. @@ -1169,9 +1140,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value SC_TitleBarUnshadeButton Unshade button. \value SC_TitleBarContextHelpButton Context Help button. - \value SC_Q3ListView The list view area. - \value SC_Q3ListViewExpand Expand item (i.e., show/hide child items). - \value SC_DialHandle The handle of the dial (i.e. what you use to control the dial). \value SC_DialGroove The groove for the dial. \value SC_DialTickmarks The tickmarks for the dial. @@ -1189,7 +1157,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, in the menu bar. \value SC_All Special value that matches all sub-controls. - \omitvalue SC_Q3ListViewBranch \omitvalue SC_CustomBase \sa ComplexControl @@ -1257,9 +1224,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \row \li \l{CC_TitleBar} \li \l QStyleOptionTitleBar \li \l State_Enabled \li Set if the title bar is enabled. - \row \li \l{CC_Q3ListView} \li \l QStyleOptionQ3ListView - \li \l State_Enabled \li Set if the list view is enabled. - \endtable \sa drawPrimitive(), drawControl() @@ -1418,11 +1382,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value PM_MenuTearoffHeight Height of a tear off area in a QMenu. \value PM_MenuDesktopFrameWidth The frame width for the menu on the desktop. - \value PM_CheckListButtonSize Area (width/height) of the - checkbox/radio button in a Q3CheckListItem. - \value PM_CheckListControllerSize Area (width/height) of the - controller in a Q3CheckListItem. - \omitvalue PM_DialogButtonsSeparator \omitvalue PM_DialogButtonsButtonWidth \omitvalue PM_DialogButtonsButtonHeight @@ -1520,11 +1479,9 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value CT_CheckBox A check box, like QCheckBox. \value CT_ComboBox A combo box, like QComboBox. \omitvalue CT_DialogButtons - \value CT_Q3DockWindow A Q3DockWindow. \value CT_HeaderSection A header section, like QHeader. \value CT_LineEdit A line edit, like QLineEdit. \value CT_Menu A menu, like QMenu. - \value CT_Q3Header A Qt 3 header section, like Q3Header. \value CT_MenuBar A menu bar, like QMenuBar. \value CT_MenuBarItem A menu bar item, like the buttons in a QMenuBar. \value CT_MenuItem A menu item, like QMenuItem. @@ -1575,7 +1532,6 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \row \li \l CT_ToolButton \li \l QStyleOptionToolButton \row \li \l CT_ComboBox \li \l QStyleOptionComboBox \row \li \l CT_Splitter \li \l QStyleOption - \row \li \l CT_Q3DockWindow \li \l QStyleOptionQ3DockWindow \row \li \l CT_ProgressBar \li \l QStyleOptionProgressBar \row \li \l CT_MenuItem \li \l QStyleOptionMenuItem \endtable @@ -1712,7 +1668,7 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, \value SH_TabBar_SelectMouseType Which type of mouse event should cause a tab to be selected. - \value SH_Q3ListViewExpand_SelectMouseType Which type of mouse event should + \value SH_ListViewExpand_SelectMouseType Which type of mouse event should cause a list view expansion to be selected. \value SH_TabBar_PreferNoArrows Whether a tab bar should suggest a size diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h index a8ec8c8c3e..985e7a88aa 100644 --- a/src/widgets/styles/qstyle.h +++ b/src/widgets/styles/qstyle.h @@ -136,12 +136,6 @@ public: enum PrimitiveElement { - PE_Q3CheckListController, - PE_Q3CheckListExclusiveIndicator, - PE_Q3CheckListIndicator, - PE_Q3DockWindowSeparator, - PE_Q3Separator, - PE_Frame, PE_FrameDefaultButton, PE_FrameDockWidget, @@ -243,7 +237,6 @@ public: CE_HeaderSection, CE_HeaderLabel, - CE_Q3DockWindowEmptyArea, CE_ToolBoxTab, CE_SizeGrip, CE_Splitter, @@ -297,23 +290,10 @@ public: SE_SliderFocusRect, - SE_Q3DockWindowHandleRect, - SE_ProgressBarGroove, SE_ProgressBarContents, SE_ProgressBarLabel, - // ### Qt 5: These values are unused; eliminate them - SE_DialogButtonAccept, - SE_DialogButtonReject, - SE_DialogButtonApply, - SE_DialogButtonHelp, - SE_DialogButtonAll, - SE_DialogButtonAbort, - SE_DialogButtonIgnore, - SE_DialogButtonRetry, - SE_DialogButtonCustom, - SE_ToolBoxTabContents, SE_HeaderLabel, @@ -383,7 +363,6 @@ public: CC_Slider, CC_ToolButton, CC_TitleBar, - CC_Q3ListView, CC_Dial, CC_GroupBox, CC_MdiControls, @@ -431,10 +410,6 @@ public: SC_TitleBarContextHelpButton = 0x00000080, SC_TitleBarLabel = 0x00000100, - SC_Q3ListView = 0x00000001, - SC_Q3ListViewBranch = 0x00000002, - SC_Q3ListViewExpand = 0x00000004, - SC_DialGroove = 0x00000001, SC_DialHandle = 0x00000002, SC_DialTickmarks = 0x00000004, @@ -514,8 +489,6 @@ public: PM_IndicatorHeight, PM_ExclusiveIndicatorWidth, PM_ExclusiveIndicatorHeight, - PM_CheckListButtonSize, - PM_CheckListControllerSize, PM_DialogButtonsSeparator, PM_DialogButtonsButtonWidth, @@ -596,7 +569,6 @@ public: CT_ToolButton, CT_ComboBox, CT_Splitter, - CT_Q3DockWindow, CT_ProgressBar, CT_MenuItem, CT_MenuBarItem, @@ -605,7 +577,6 @@ public: CT_TabBarTab, CT_Slider, CT_ScrollBar, - CT_Q3Header, CT_LineEdit, CT_SpinBox, CT_SizeGrip, @@ -669,7 +640,7 @@ public: SH_ToolBox_SelectedPageTitleBold, SH_TabBar_PreferNoArrows, SH_ScrollBar_LeftClickAbsolutePosition, - SH_Q3ListViewExpand_SelectMouseType, + SH_ListViewExpand_SelectMouseType, SH_UnderlineShortcut, SH_SpinBox_AnimateButton, SH_SpinBox_KeyPressAutoRepeatRate, diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index d72ba1bac5..0b0c6e2393 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -136,12 +136,6 @@ QT_BEGIN_NAMESPACE \value SO_ComplexCustomBase Reserved for custom QStyleOptions; all custom complex controls values must be above this value - Some style options are defined for various Qt3Support controls: - - \value SO_Q3DockWindow \l QStyleOptionQ3DockWindow - \value SO_Q3ListView \l QStyleOptionQ3ListView - \value SO_Q3ListViewItem \l QStyleOptionQ3ListViewItem - \sa type */ @@ -2232,382 +2226,6 @@ QStyleOptionSpinBox::QStyleOptionSpinBox(int version) */ #endif // QT_NO_SPINBOX -/*! - \class QStyleOptionQ3ListViewItem - \brief The QStyleOptionQ3ListViewItem class is used to describe an - item drawn in a Q3ListView. - - \inmodule QtWidgets - - This class is used for drawing the compatibility Q3ListView's - items. \b {It is not recommended for new classes}. - - QStyleOptionQ3ListViewItem contains all the information that - QStyle functions need to draw the Q3ListView items. - - For performance reasons, the access to the member variables is - direct (i.e., using the \c . or \c -> operator). This low-level feel - makes the structures straightforward to use and emphasizes that - these are simply parameters used by the style functions. - - For an example demonstrating how style options can be used, see - the \l {widgets/styles}{Styles} example. - - \sa QStyleOption, QStyleOptionQ3ListView, Q3ListViewItem -*/ - -/*! - \enum QStyleOptionQ3ListViewItem::Q3ListViewItemFeature - - This enum describes the features a list view item can have. - - \value None A standard item. - \value Expandable The item has children that can be shown. - \value MultiLine The item is more than one line tall. - \value Visible The item is visible. - \value ParentControl The item's parent is a type of item control (Q3CheckListItem::Controller). - - \sa features, Q3ListViewItem::isVisible(), Q3ListViewItem::multiLinesEnabled(), - Q3ListViewItem::isExpandable() -*/ - -/*! - Constructs a QStyleOptionQ3ListViewItem, initializing the members - variables to their default values. -*/ - -QStyleOptionQ3ListViewItem::QStyleOptionQ3ListViewItem() - : QStyleOption(Version, SO_Q3ListViewItem), features(None), height(0), totalHeight(0), - itemY(0), childCount(0) -{ -} - -/*! - \internal -*/ -QStyleOptionQ3ListViewItem::QStyleOptionQ3ListViewItem(int version) - : QStyleOption(version, SO_Q3ListViewItem), features(None), height(0), totalHeight(0), - itemY(0), childCount(0) -{ -} - -/*! - \fn QStyleOptionQ3ListViewItem::QStyleOptionQ3ListViewItem(const QStyleOptionQ3ListViewItem &other) - - Constructs a copy of the \a other style option. -*/ - -/*! - \enum QStyleOptionQ3ListViewItem::StyleOptionType - - This enum is used to hold information about the type of the style option, and - is defined for each QStyleOption subclass. - - \value Type The type of style option provided (\l{SO_Q3ListViewItem} for this class). - - The type is used internally by QStyleOption, its subclasses, and - qstyleoption_cast() to determine the type of style option. In - general you do not need to worry about this unless you want to - create your own QStyleOption subclass and your own styles. - - \sa StyleOptionVersion -*/ - -/*! - \enum QStyleOptionQ3ListViewItem::StyleOptionVersion - - This enum is used to hold information about the version of the style option, and - is defined for each QStyleOption subclass. - - \value Version 1 - - The version is used by QStyleOption subclasses to implement - extensions without breaking compatibility. If you use - qstyleoption_cast(), you normally do not need to check it. - - \sa StyleOptionType -*/ - -/*! - \variable QStyleOptionQ3ListViewItem::features - \brief the features for this item - - This variable is a bitwise OR of the features of the item. The deafult value is \l None. - - \sa Q3ListViewItemFeature -*/ - -/*! - \variable QStyleOptionQ3ListViewItem::height - \brief the height of the item - - This doesn't include the height of the item's children. The default height is 0. - - \sa Q3ListViewItem::height() -*/ - -/*! - \variable QStyleOptionQ3ListViewItem::totalHeight - \brief the total height of the item, including its children - - The default total height is 0. - - \sa Q3ListViewItem::totalHeight() -*/ - -/*! - \variable QStyleOptionQ3ListViewItem::itemY - \brief the Y-coordinate for the item - - The default value is 0. - - \sa Q3ListViewItem::itemPos() -*/ - -/*! - \variable QStyleOptionQ3ListViewItem::childCount - \brief the number of children the item has -*/ - -/*! - \class QStyleOptionQ3ListView - \brief The QStyleOptionQ3ListView class is used to describe the - parameters for drawing a Q3ListView. - - \inmodule QtWidgets - - This class is used for drawing the compatibility Q3ListView. \b - {It is not recommended for new classes}. - - QStyleOptionQ3ListView contains all the information that QStyle - functions need to draw Q3ListView. - - For performance reasons, the access to the member variables is - direct (i.e., using the \c . or \c -> operator). This low-level feel - makes the structures straightforward to use and emphasizes that - these are simply parameters used by the style functions. - - For an example demonstrating how style options can be used, see - the \l {widgets/styles}{Styles} example. - - \sa QStyleOptionComplex, Q3ListView, QStyleOptionQ3ListViewItem -*/ - -/*! - Creates a QStyleOptionQ3ListView, initializing the members - variables to their default values. -*/ - -QStyleOptionQ3ListView::QStyleOptionQ3ListView() - : QStyleOptionComplex(Version, SO_Q3ListView), viewportBGRole(QPalette::Base), - sortColumn(0), itemMargin(0), treeStepSize(0), rootIsDecorated(false) -{ -} - -/*! - \internal -*/ -QStyleOptionQ3ListView::QStyleOptionQ3ListView(int version) - : QStyleOptionComplex(version, SO_Q3ListView), viewportBGRole(QPalette::Base), - sortColumn(0), itemMargin(0), treeStepSize(0), rootIsDecorated(false) -{ -} - -/*! - \fn QStyleOptionQ3ListView::QStyleOptionQ3ListView(const QStyleOptionQ3ListView &other) - - Constructs a copy of the \a other style option. -*/ - -/*! - \enum QStyleOptionQ3ListView::StyleOptionType - - This enum is used to hold information about the type of the style option, and - is defined for each QStyleOption subclass. - - \value Type The type of style option provided (\l{SO_Q3ListView} for this class). - - The type is used internally by QStyleOption, its subclasses, and - qstyleoption_cast() to determine the type of style option. In - general you do not need to worry about this unless you want to - create your own QStyleOption subclass and your own styles. - - \sa StyleOptionVersion -*/ - -/*! - \enum QStyleOptionQ3ListView::StyleOptionVersion - - This enum is used to hold information about the version of the style option, and - is defined for each QStyleOption subclass. - - \value Version 1 - - The version is used by QStyleOption subclasses to implement - extensions without breaking compatibility. If you use - qstyleoption_cast(), you normally do not need to check it. - - \sa StyleOptionType -*/ - -/*! - \variable QStyleOptionQ3ListView::items - \brief a list of items in the Q3ListView - - This is a list of \l {QStyleOptionQ3ListViewItem}s. The first item - can be used for most of the calculation that are needed for - drawing a list view. Any additional items are the children of - this first item, which may be used for additional information. - - \sa QStyleOptionQ3ListViewItem -*/ - -/*! - \variable QStyleOptionQ3ListView::viewportPalette - \brief the palette of Q3ListView's viewport - - By default, the application's default palette is used. -*/ - -/*! - \variable QStyleOptionQ3ListView::viewportBGRole - \brief the background role of Q3ListView's viewport - - The default value is QPalette::Base. - - \sa QWidget::backgroundRole() -*/ - -/*! - \variable QStyleOptionQ3ListView::sortColumn - \brief the sort column of the list view - - The default value is 0. - - \sa Q3ListView::sortColumn() -*/ - -/*! - \variable QStyleOptionQ3ListView::itemMargin - \brief the margin for items in the list view - - The default value is 0. - - \sa Q3ListView::itemMargin() -*/ - -/*! - \variable QStyleOptionQ3ListView::treeStepSize - \brief the number of pixel to offset children items from their - parents - - The default value is 0. - - \sa Q3ListView::treeStepSize() -*/ - -/*! - \variable QStyleOptionQ3ListView::rootIsDecorated - \brief whether root items are decorated - - The default value is false. - - \sa Q3ListView::rootIsDecorated() -*/ - -/*! - \class QStyleOptionQ3DockWindow - \brief The QStyleOptionQ3DockWindow class is used to describe the - parameters for drawing various parts of a Q3DockWindow. - - \inmodule QtWidgets - - This class is used for drawing the old Q3DockWindow and its - parts. \b {It is not recommended for new classes}. - - QStyleOptionQ3DockWindow contains all the information that QStyle - functions need to draw Q3DockWindow and its parts. - - For performance reasons, the access to the member variables is - direct (i.e., using the \c . or \c -> operator). This low-level feel - makes the structures straightforward to use and emphasizes that - these are simply parameters used by the style functions. - - For an example demonstrating how style options can be used, see - the \l {widgets/styles}{Styles} example. - - \sa QStyleOption, Q3DockWindow -*/ - -/*! - Constructs a QStyleOptionQ3DockWindow, initializing the member - variables to their default values. -*/ - -QStyleOptionQ3DockWindow::QStyleOptionQ3DockWindow() - : QStyleOption(Version, SO_Q3DockWindow), docked(false), closeEnabled(false) -{ -} - -/*! - \internal -*/ -QStyleOptionQ3DockWindow::QStyleOptionQ3DockWindow(int version) - : QStyleOption(version, SO_Q3DockWindow), docked(false), closeEnabled(false) -{ -} - -/*! - \fn QStyleOptionQ3DockWindow::QStyleOptionQ3DockWindow(const QStyleOptionQ3DockWindow &other) - - Constructs a copy of the \a other style option. -*/ - -/*! - \enum QStyleOptionQ3DockWindow::StyleOptionType - - This enum is used to hold information about the type of the style option, and - is defined for each QStyleOption subclass. - - \value Type The type of style option provided (\l{SO_Q3DockWindow} for this class). - - The type is used internally by QStyleOption, its subclasses, and - qstyleoption_cast() to determine the type of style option. In - general you do not need to worry about this unless you want to - create your own QStyleOption subclass and your own styles. - - \sa StyleOptionVersion -*/ - -/*! - \enum QStyleOptionQ3DockWindow::StyleOptionVersion - - This enum is used to hold information about the version of the style option, and - is defined for each QStyleOption subclass. - - \value Version 1 - - The version is used by QStyleOption subclasses to implement - extensions without breaking compatibility. If you use - qstyleoption_cast(), you normally do not need to check it. - - \sa StyleOptionType -*/ - -/*! - \variable QStyleOptionQ3DockWindow::docked - \brief whether the dock window is currently docked - - The default value is false. -*/ - -/*! - \variable QStyleOptionQ3DockWindow::closeEnabled - \brief whether the dock window has a close button - - The default value is false. -*/ - /*! \class QStyleOptionDockWidget \brief The QStyleOptionDockWidget class is used to describe the @@ -4376,12 +3994,8 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) debug << "SO_ToolBox"; break; case QStyleOption::SO_Header: debug << "SO_Header"; break; - case QStyleOption::SO_Q3DockWindow: - debug << "SO_Q3DockWindow"; break; case QStyleOption::SO_DockWidget: debug << "SO_DockWidget"; break; - case QStyleOption::SO_Q3ListViewItem: - debug << "SO_Q3ListViewItem"; break; case QStyleOption::SO_ViewItem: debug << "SO_ViewItem"; break; case QStyleOption::SO_TabWidgetFrame: @@ -4400,8 +4014,6 @@ QDebug operator<<(QDebug debug, const QStyleOption::OptionType &optionType) debug << "SO_ToolButton"; break; case QStyleOption::SO_ComboBox: debug << "SO_ComboBox"; break; - case QStyleOption::SO_Q3ListView: - debug << "SO_Q3ListView"; break; case QStyleOption::SO_TitleBar: debug << "SO_TitleBar"; break; case QStyleOption::SO_CustomBase: diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h index 677a48ec20..588898637f 100644 --- a/src/widgets/styles/qstyleoption.h +++ b/src/widgets/styles/qstyleoption.h @@ -68,12 +68,12 @@ class Q_WIDGETS_EXPORT QStyleOption public: enum OptionType { SO_Default, SO_FocusRect, SO_Button, SO_Tab, SO_MenuItem, - SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header, SO_Q3DockWindow, - SO_DockWidget, SO_Q3ListViewItem, SO_ViewItem, SO_TabWidgetFrame, + SO_Frame, SO_ProgressBar, SO_ToolBox, SO_Header, + SO_DockWidget, SO_ViewItem, SO_TabWidgetFrame, SO_TabBarBase, SO_RubberBand, SO_ToolBar, SO_GraphicsItem, SO_Complex = 0xf0000, SO_Slider, SO_SpinBox, SO_ToolButton, SO_ComboBox, - SO_Q3ListView, SO_TitleBar, SO_GroupBox, SO_SizeGrip, + SO_TitleBar, SO_GroupBox, SO_SizeGrip, SO_CustomBase = 0xf00, SO_ComplexCustomBase = 0xf000000 @@ -363,47 +363,6 @@ protected: QStyleOptionMenuItem(int version); }; -class Q_WIDGETS_EXPORT QStyleOptionQ3ListViewItem : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Q3ListViewItem }; - enum StyleOptionVersion { Version = 1 }; - - enum Q3ListViewItemFeature { None = 0x00, Expandable = 0x01, MultiLine = 0x02, Visible = 0x04, - ParentControl = 0x08 }; - Q_DECLARE_FLAGS(Q3ListViewItemFeatures, Q3ListViewItemFeature) - - Q3ListViewItemFeatures features; - int height; - int totalHeight; - int itemY; - int childCount; - - QStyleOptionQ3ListViewItem(); - QStyleOptionQ3ListViewItem(const QStyleOptionQ3ListViewItem &other) : QStyleOption(Version, Type) { *this = other; } - -protected: - QStyleOptionQ3ListViewItem(int version); -}; - -Q_DECLARE_OPERATORS_FOR_FLAGS(QStyleOptionQ3ListViewItem::Q3ListViewItemFeatures) - -class Q_WIDGETS_EXPORT QStyleOptionQ3DockWindow : public QStyleOption -{ -public: - enum StyleOptionType { Type = SO_Q3DockWindow }; - enum StyleOptionVersion { Version = 1 }; - - bool docked; - bool closeEnabled; - - QStyleOptionQ3DockWindow(); - QStyleOptionQ3DockWindow(const QStyleOptionQ3DockWindow &other) : QStyleOption(Version, Type) { *this = other; } - -protected: - QStyleOptionQ3DockWindow(int version); -}; - class Q_WIDGETS_EXPORT QStyleOptionDockWidget : public QStyleOption { public: @@ -585,27 +544,6 @@ protected: }; #endif // QT_NO_SPINBOX -class Q_WIDGETS_EXPORT QStyleOptionQ3ListView : public QStyleOptionComplex -{ -public: - enum StyleOptionType { Type = SO_Q3ListView }; - enum StyleOptionVersion { Version = 1 }; - - QList items; - QPalette viewportPalette; - QPalette::ColorRole viewportBGRole; - int sortColumn; - int itemMargin; - int treeStepSize; - bool rootIsDecorated; - - QStyleOptionQ3ListView(); - QStyleOptionQ3ListView(const QStyleOptionQ3ListView &other) : QStyleOptionComplex(Version, Type) { *this = other; } - -protected: - QStyleOptionQ3ListView(int version); -}; - class Q_WIDGETS_EXPORT QStyleOptionToolButton : public QStyleOptionComplex { public: diff --git a/src/widgets/styles/qwindowscestyle.cpp b/src/widgets/styles/qwindowscestyle.cpp index 5bd2de290a..49d4e74aaf 100644 --- a/src/widgets/styles/qwindowscestyle.cpp +++ b/src/widgets/styles/qwindowscestyle.cpp @@ -264,14 +264,13 @@ void QWindowsCEStyle::drawPrimitive(PrimitiveElement element, const QStyleOption option->rect.x() + 1, option->rect.y() + option->rect.height() - 1); //fall through... } - case PE_IndicatorViewItemCheck: - case PE_Q3CheckListIndicator: { + case PE_IndicatorViewItemCheck: { if (!doRestore) { painter->save(); doRestore = true; } int arrowSize= 2; - if (element == PE_Q3CheckListIndicator || element == PE_IndicatorViewItemCheck) { + if (element == PE_IndicatorViewItemCheck) { QLinearGradient linearGradient(QPoint(option->rect.x(),option->rect.y()), QPoint(option->rect.x()+option->rect.width(), option->rect.y()+option->rect.height())); linearGradient.setColorAt(0, windowsCECheckBoxGradientColorBegin); diff --git a/src/widgets/styles/qwindowsmobilestyle.cpp b/src/widgets/styles/qwindowsmobilestyle.cpp index 30269751ca..863bd1aa62 100644 --- a/src/widgets/styles/qwindowsmobilestyle.cpp +++ b/src/widgets/styles/qwindowsmobilestyle.cpp @@ -4875,13 +4875,12 @@ void QWindowsMobileStyle::drawPrimitive(PrimitiveElement element, const QStyleOp } //fall through... } - case PE_IndicatorViewItemCheck: - case PE_Q3CheckListIndicator: { + case PE_IndicatorViewItemCheck: { if (!doRestore) { painter->save(); doRestore = true; } - if (element == PE_Q3CheckListIndicator || element == PE_IndicatorViewItemCheck) { + if (element == PE_IndicatorViewItemCheck) { painter->setPen(option->palette.shadow().color()); if (option->state & State_NoChange) painter->setBrush(option->palette.brush(QPalette::Button)); diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index 295d46963e..c7870d18c2 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -1467,12 +1467,11 @@ void QWindowsStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, p->setPen(opt->palette.text().color()); } // Fall through! case PE_IndicatorViewItemCheck: - case PE_Q3CheckListIndicator: if (!doRestore) { p->save(); doRestore = true; } - if (pe == PE_Q3CheckListIndicator || pe == PE_IndicatorViewItemCheck) { + if (pe == PE_IndicatorViewItemCheck) { const QStyleOptionViewItem *itemViewOpt = qstyleoption_cast(opt); p->setPen(itemViewOpt && itemViewOpt->showDecorationSelected diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index 8b745ba114..a342486339 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -1178,8 +1178,7 @@ void QWindowsXPStyle::polish(QWidget *widget) || qobject_cast(widget) || qobject_cast(widget) #endif // QT_NO_SPINBOX - || widget->inherits("QWorkspaceChild") - || widget->inherits("Q3TitleBar")) + || widget->inherits("QWorkspaceChild")) widget->setAttribute(Qt::WA_Hover); #ifndef QT_NO_RUBBERBAND @@ -1250,8 +1249,7 @@ void QWindowsXPStyle::unpolish(QWidget *widget) || qobject_cast(widget) || qobject_cast(widget) #endif // QT_NO_SPINBOX - || widget->inherits("QWorkspaceChild") - || widget->inherits("Q3TitleBar")) + || widget->inherits("QWorkspaceChild")) widget->setAttribute(Qt::WA_Hover, false); QWindowsStyle::unpolish(widget); } @@ -1822,14 +1820,6 @@ case PE_Frame: } break; - case PE_Q3DockWindowSeparator: - name = QLatin1String("TOOLBAR"); - if (flags & State_Horizontal) - partId = TP_SEPARATOR; - else - partId = TP_SEPARATORVERT; - break; - case PE_FrameWindow: if (const QStyleOptionFrame *frm = qstyleoption_cast(option)) { diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h index 1fa7195170..e4e6390a9d 100644 --- a/src/widgets/widgets/qmenu.h +++ b/src/widgets/widgets/qmenu.h @@ -190,7 +190,6 @@ private: friend class QMenuBar; friend class QMenuBarPrivate; friend class QTornOffMenu; - friend class Q3PopupMenu; friend class QComboBox; friend class QAction; friend class QToolButtonPrivate; diff --git a/src/widgets/widgets/qtabwidget.h b/src/widgets/widgets/qtabwidget.h index 26d9243eb9..4e8d4d4583 100644 --- a/src/widgets/widgets/qtabwidget.h +++ b/src/widgets/widgets/qtabwidget.h @@ -175,7 +175,6 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_removeTab(int)) Q_PRIVATE_SLOT(d_func(), void _q_tabMoved(int, int)) void setUpLayout(bool = false); - friend class Q3TabDialog; }; #endif // QT_NO_TABWIDGET -- cgit v1.2.3 From 0042b5f0f2bef3d2affb3e7b44613d13830ee94a Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 19 Mar 2012 12:21:11 +0100 Subject: Reserve the virtual viewportSizeHint method in QAbstractScrollArea. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The virtual method will be used to implement the patch at http://codereview.qt-project.org/#change,11763 Change-Id: I6d6ffbb8aaaba73e5c769f3435cc60323c77b75a Reviewed-by: Christoph Schleifenbaum Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Stephen Kelly --- src/widgets/widgets/qabstractscrollarea.cpp | 10 ++++++++++ src/widgets/widgets/qabstractscrollarea.h | 2 ++ 2 files changed, 12 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp index a960ce8d9c..dc96321599 100644 --- a/src/widgets/widgets/qabstractscrollarea.cpp +++ b/src/widgets/widgets/qabstractscrollarea.cpp @@ -1489,6 +1489,16 @@ void QAbstractScrollArea::setupViewport(QWidget *viewport) Q_UNUSED(viewport); } +/*! + \internal + + This method is reserved for future use. +*/ +QSize QAbstractScrollArea::viewportSizeHint() const +{ + return QSize(); +} + QT_END_NAMESPACE #include "moc_qabstractscrollarea.cpp" diff --git a/src/widgets/widgets/qabstractscrollarea.h b/src/widgets/widgets/qabstractscrollarea.h index f155f52920..2f1168a4f1 100644 --- a/src/widgets/widgets/qabstractscrollarea.h +++ b/src/widgets/widgets/qabstractscrollarea.h @@ -122,6 +122,8 @@ protected: virtual void scrollContentsBy(int dx, int dy); + virtual QSize viewportSizeHint() const; + private: Q_DECLARE_PRIVATE(QAbstractScrollArea) Q_DISABLE_COPY(QAbstractScrollArea) -- cgit v1.2.3 From fbdf76771c50294f0a1c0b450f50affc2100b30a Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 19 Mar 2012 12:16:12 +0100 Subject: Reserve a virtual method for use with a feature in Qt 5.1. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The view will query the delegate for roles which are relevant to the particular delegate. For unrelated roles, the delegate will not have to repaint when the data changes. Change-Id: If8f1ba4c2bce7dbcf70de344b984aea1deca0edd Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: David Faure --- src/widgets/itemviews/qabstractitemdelegate.cpp | 10 ++++++++++ src/widgets/itemviews/qabstractitemdelegate.h | 2 ++ 2 files changed, 12 insertions(+) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp index ecba3e238f..125beab91b 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.cpp +++ b/src/widgets/itemviews/qabstractitemdelegate.cpp @@ -402,6 +402,16 @@ bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, return false; } +/*! + \internal + + This virtual method is reserved and will be used in Qt 5.1. +*/ +QSet QAbstractItemDelegate::paintingRoles() const +{ + return QSet(); +} + QT_END_NAMESPACE #endif // QT_NO_ITEMVIEWS diff --git a/src/widgets/itemviews/qabstractitemdelegate.h b/src/widgets/itemviews/qabstractitemdelegate.h index 2c51dfcac8..89aa1915f6 100644 --- a/src/widgets/itemviews/qabstractitemdelegate.h +++ b/src/widgets/itemviews/qabstractitemdelegate.h @@ -114,6 +114,8 @@ public: const QStyleOptionViewItem &option, const QModelIndex &index); + virtual QSet paintingRoles() const; + Q_SIGNALS: void commitData(QWidget *editor); void closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint); -- cgit v1.2.3 From bfd2b30faf3da224e5bc5f86d13a57524cd6b2b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Nowacki?= Date: Fri, 16 Mar 2012 17:28:47 +0100 Subject: Crash fix in ~QVariant QVariant handlers can not be unregistered. We are not able to guarantee that such operation is safe and we do not want to. Change-Id: Id9a12e6a8c750110e4a08eab1de3e07e5c408675 Reviewed-by: Thiago Macieira --- src/widgets/kernel/qwidgetsvariant.cpp | 8 -------- 1 file changed, 8 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidgetsvariant.cpp b/src/widgets/kernel/qwidgetsvariant.cpp index 81847681e4..f6817cec8a 100644 --- a/src/widgets/kernel/qwidgetsvariant.cpp +++ b/src/widgets/kernel/qwidgetsvariant.cpp @@ -184,12 +184,4 @@ void qRegisterWidgetsVariant() } Q_CONSTRUCTOR_FUNCTION(qRegisterWidgetsVariant) -void qUnregisterWidgetsVariant() -{ - QVariantPrivate::unregisterHandler(QModulesPrivate::Widgets); - qMetaTypeWidgetsHelper = 0; -} -Q_DESTRUCTOR_FUNCTION(qUnregisterWidgetsVariant) - - QT_END_NAMESPACE -- cgit v1.2.3 From a974986d077407f06ef3c2a218fcecca97e9cbe8 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 19:43:55 +0100 Subject: Change the parameter name of signals to be consistent. Change-Id: Ib602fde3f9cb240f328457abf57a341c98aaace9 Reviewed-by: hjk --- src/widgets/widgets/qdatetimeedit.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qdatetimeedit.h b/src/widgets/widgets/qdatetimeedit.h index 9a57175716..ffb8503d5e 100644 --- a/src/widgets/widgets/qdatetimeedit.h +++ b/src/widgets/widgets/qdatetimeedit.h @@ -168,8 +168,8 @@ public: bool event(QEvent *event); Q_SIGNALS: - void dateTimeChanged(const QDateTime &date); - void timeChanged(const QTime &date); + void dateTimeChanged(const QDateTime &dateTime); + void timeChanged(const QTime &time); void dateChanged(const QDate &date); public Q_SLOTS: -- cgit v1.2.3 From 55fa3c189f88933d390177ad5606d3de9deacf93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 14 Mar 2012 17:55:43 +0100 Subject: Got rid of Map / Unmap events in favor of Expose event. Since change 2e4d8f67a871f2033 the need for Map and Unmap events has gone away, as now the Expose event is used to notify the application about when it can start rendering. The Map and Unmap events weren't really used except by QWidget to set the WA_Mapped flag, which we now set based on the expose / unexpose. Also guarantee that a Resize event is always sent before the first Expose, by re-introducing an asynchronous expose event handler. Since an expose is required before rendering to a QWindow, show a warning if QOpenGLContext::swapBuffers() or QBackingStore::flush() if called on a window that has not received its first expose. Change-Id: Ia6b609aa275d5b463b5011a96f2fd9bbe52e9bc4 Reviewed-by: Friedemann Kleint --- src/widgets/kernel/qwidget_qpa.cpp | 11 ++++++++--- src/widgets/kernel/qwidgetbackingstore.cpp | 27 ++++----------------------- src/widgets/kernel/qwidgetwindow_qpa.cpp | 17 +++++++---------- 3 files changed, 19 insertions(+), 36 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget_qpa.cpp b/src/widgets/kernel/qwidget_qpa.cpp index 3d23b04ddf..0f55646958 100644 --- a/src/widgets/kernel/qwidget_qpa.cpp +++ b/src/widgets/kernel/qwidget_qpa.cpp @@ -440,9 +440,9 @@ static inline QRect positionTopLevelWindow(QRect geometry, const QScreen *screen void QWidgetPrivate::show_sys() { Q_Q(QWidget); - q->setAttribute(Qt::WA_Mapped); if (q->testAttribute(Qt::WA_DontShowOnScreen)) { invalidateBuffer(q->rect()); + q->setAttribute(Qt::WA_Mapped); return; } @@ -483,8 +483,8 @@ void QWidgetPrivate::show_sys() void QWidgetPrivate::hide_sys() { Q_Q(QWidget); - q->setAttribute(Qt::WA_Mapped, false); deactivateWidgetCleanup(); + if (!q->isWindow()) { QWidget *p = q->parentWidget(); if (p &&p->isVisible()) { @@ -492,7 +492,12 @@ void QWidgetPrivate::hide_sys() } return; } - if (QWindow *window = q->windowHandle()) { + + invalidateBuffer(q->rect()); + + if (q->testAttribute(Qt::WA_DontShowOnScreen)) { + q->setAttribute(Qt::WA_Mapped, false); + } else if (QWindow *window = q->windowHandle()) { window->setVisible(false); } } diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index b331356e66..2e9f072a0f 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -914,29 +914,7 @@ void QWidgetPrivate::scrollRect(const QRect &rect, int dx, int dy) static inline bool discardSyncRequest(QWidget *tlw, QTLWExtra *tlwExtra) { - if (!tlw || !tlwExtra) - return true; - -#ifdef Q_WS_X11 - // Delay the sync until we get an Expose event from X11 (initial show). - // Qt::WA_Mapped is set to true, but the actual mapping has not yet occurred. - // However, we must repaint immediately regardless of the state if someone calls repaint(). - if (tlwExtra->waitingForMapNotify && !tlwExtra->inRepaint) - return true; -#endif - - if (!tlw->testAttribute(Qt::WA_Mapped)) - return true; - - if (!tlw->isVisible() -#ifndef Q_WS_X11 - // If we're minimized on X11, WA_Mapped will be false and we - // will return in the case above. Some window managers on X11 - // sends us the PropertyNotify to change the minimized state - // *AFTER* we've received the expose event, which is baaad. - || tlw->isMinimized() -#endif - ) + if (!tlw || !tlwExtra || !tlw->testAttribute(Qt::WA_Mapped) || !tlw->isVisible()) return true; return false; @@ -1345,6 +1323,9 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn) return; Q_Q(QWidget); + if (discardSyncRequest(q, maybeTopData())) + return; + if (q->testAttribute(Qt::WA_StaticContents)) { if (!extra) createExtra(); diff --git a/src/widgets/kernel/qwidgetwindow_qpa.cpp b/src/widgets/kernel/qwidgetwindow_qpa.cpp index f58dddb70f..498908f4db 100644 --- a/src/widgets/kernel/qwidgetwindow_qpa.cpp +++ b/src/widgets/kernel/qwidgetwindow_qpa.cpp @@ -137,15 +137,6 @@ bool QWidgetWindow::event(QEvent *event) handleDragEvent(event); break; - case QEvent::Map: - m_widget->setAttribute(Qt::WA_Mapped); - m_widget->d_func()->syncBackingStore(); - return true; - - case QEvent::Unmap: - m_widget->setAttribute(Qt::WA_Mapped, false); - return true; - case QEvent::Expose: handleExposeEvent(static_cast(event)); return true; @@ -432,7 +423,13 @@ void QWidgetWindow::handleDragEvent(QEvent *event) void QWidgetWindow::handleExposeEvent(QExposeEvent *event) { - m_widget->d_func()->syncBackingStore(event->region()); + if (isExposed()) { + m_widget->setAttribute(Qt::WA_Mapped); + if (!event->region().isNull()) + m_widget->d_func()->syncBackingStore(event->region()); + } else { + m_widget->setAttribute(Qt::WA_Mapped, false); + } } void QWidgetWindow::handleWindowStateChangedEvent(QWindowStateChangeEvent *event) -- cgit v1.2.3 From 8ed2f9f189c908ffc2a76148d2356108743804db Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 20:46:30 +0100 Subject: Remove obsolete internal functions. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ib0deecfe4bfc13504b98e6e1f3349f8c57b25314 Reviewed-by: Sean Harmer Reviewed-by: Oswald Buddenhagen Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qlistview.cpp | 24 ------------------------ src/widgets/itemviews/qlistview.h | 3 --- 2 files changed, 27 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 872798a8e9..efcff3f840 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -894,30 +894,6 @@ void QListView::startDrag(Qt::DropActions supportedActions) QAbstractItemView::startDrag(supportedActions); } -/*! - \internal - - Called whenever items from the view is dropped on the viewport. - The \a event provides additional information. -*/ -void QListView::internalDrop(QDropEvent *event) -{ - // ### Qt5: remove that function - Q_UNUSED(event); -} - -/*! - \internal - - Called whenever the user starts dragging items and the items are movable, - enabling internal dragging and dropping of items. -*/ -void QListView::internalDrag(Qt::DropActions supportedActions) -{ - // ### Qt5: remove that function - Q_UNUSED(supportedActions); -} - #endif // QT_NO_DRAGANDDROP /*! diff --git a/src/widgets/itemviews/qlistview.h b/src/widgets/itemviews/qlistview.h index d278dec8c6..7b065b0585 100644 --- a/src/widgets/itemviews/qlistview.h +++ b/src/widgets/itemviews/qlistview.h @@ -160,9 +160,6 @@ protected: void dragLeaveEvent(QDragLeaveEvent *e); void dropEvent(QDropEvent *e); void startDrag(Qt::DropActions supportedActions); - - void internalDrop(QDropEvent *e); - void internalDrag(Qt::DropActions supportedActions); #endif // QT_NO_DRAGANDDROP QStyleOptionViewItem viewOptions() const; -- cgit v1.2.3 From d596563cae61cad51543845b80d02b0b4e461b96 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 20:44:49 +0100 Subject: Remove non-const version of QTreeWidget method. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The const version should be enough. Change-Id: Ia9cfa484f070e318c76f03df8d8220217a7100c2 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qtreewidget.cpp | 10 ---------- src/widgets/itemviews/qtreewidget.h | 1 - 2 files changed, 11 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index f8e3a375a4..6ee77c773d 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -2654,16 +2654,6 @@ QTreeWidgetItem *QTreeWidget::takeTopLevelItem(int index) return d->treeModel()->rootItem->takeChild(index); } -/*! - \internal -*/ -int QTreeWidget::indexOfTopLevelItem(QTreeWidgetItem *item) -{ - Q_D(QTreeWidget); - d->treeModel()->executePendingSort(); - return d->treeModel()->rootItem->children.indexOf(item); -} - /*! Returns the index of the given top-level \a item, or -1 if the item cannot be found. diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h index c5f1032728..611516cf99 100644 --- a/src/widgets/itemviews/qtreewidget.h +++ b/src/widgets/itemviews/qtreewidget.h @@ -277,7 +277,6 @@ public: void insertTopLevelItem(int index, QTreeWidgetItem *item); void addTopLevelItem(QTreeWidgetItem *item); QTreeWidgetItem *takeTopLevelItem(int index); - int indexOfTopLevelItem(QTreeWidgetItem *item); // ### Qt 5: remove me int indexOfTopLevelItem(QTreeWidgetItem *item) const; void insertTopLevelItems(int index, const QList &items); -- cgit v1.2.3 From 6a54344e223b23f3334409930b7a072d257dd947 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 20:47:23 +0100 Subject: Remove obsolete methods which forward to the base class. Change-Id: I7903d9664d52c6afeff800a95062c983a49703c6 Reviewed-by: Oswald Buddenhagen Reviewed-by: Sean Harmer Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qtreewidget.cpp | 20 -------------------- src/widgets/itemviews/qtreewidget.h | 2 -- 2 files changed, 22 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp index 6ee77c773d..e2d84825f0 100644 --- a/src/widgets/itemviews/qtreewidget.cpp +++ b/src/widgets/itemviews/qtreewidget.cpp @@ -2889,26 +2889,6 @@ void QTreeWidget::sortItems(int column, Qt::SortOrder order) d->model->sort(column, order); } -/*! - \internal - - ### Qt 5: remove -*/ -void QTreeWidget::setSortingEnabled(bool enable) -{ - QTreeView::setSortingEnabled(enable); -} - -/*! - \internal - - ### Qt 5: remove -*/ -bool QTreeWidget::isSortingEnabled() const -{ - return QTreeView::isSortingEnabled(); -} - /*! Starts editing the \a item in the given \a column if it is editable. */ diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h index 611516cf99..7420894dfb 100644 --- a/src/widgets/itemviews/qtreewidget.h +++ b/src/widgets/itemviews/qtreewidget.h @@ -299,8 +299,6 @@ public: int sortColumn() const; void sortItems(int column, Qt::SortOrder order); - void setSortingEnabled(bool enable); - bool isSortingEnabled() const; void editItem(QTreeWidgetItem *item, int column = 0); void openPersistentEditor(QTreeWidgetItem *item, int column = 0); -- cgit v1.2.3 From f31e614245e796c7f82ec33eed708902d4d01521 Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Sat, 17 Mar 2012 21:37:17 -0700 Subject: Cleanup Q3* items Cleanup Q3* items from QtCore and QtGui modules. Change-Id: Id214a077a50e99d820c84e96e34866492a0130d8 Reviewed-by: Thiago Macieira Reviewed-by: Lars Knoll --- src/widgets/widgets/qtextedit.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp index 198d101dbf..4b7e1b5978 100644 --- a/src/widgets/widgets/qtextedit.cpp +++ b/src/widgets/widgets/qtextedit.cpp @@ -2453,7 +2453,7 @@ void QTextEdit::setText(const QString &text) if (d->textFormat == Qt::AutoText) format = Qt::mightBeRichText(text) ? Qt::RichText : Qt::PlainText; #ifndef QT_NO_TEXTHTMLPARSER - if (format == Qt::RichText || format == Qt::LogText) + if (format == Qt::RichText) setHtml(text); else #endif -- cgit v1.2.3 From 2f2b78321427daa8c7f0702140c297d22b0bf3c8 Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Tue, 20 Mar 2012 20:21:30 -0700 Subject: Remove QWorkspace. QWorkspace had been called Q3Workspace before Qt4.0 finally released. In a sense, it is a Qt3 support Widget. And QWorkspace has been deprecated and replaced by QMdiArea at Qt4.3. Change-Id: Iea1bf831c9960c23c2b21d51fdc7c13b303642ea Reviewed-by: Friedemann Kleint Reviewed-by: Lars Knoll --- src/widgets/dialogs/qmessagebox.cpp | 2 +- src/widgets/dialogs/qwizard_win.cpp | 2 +- src/widgets/graphicsview/qgraphicswidget.cpp | 2 +- src/widgets/graphicsview/qgraphicswidget_p.cpp | 2 +- src/widgets/kernel/qapplication_qpa.cpp | 4 +- src/widgets/styles/qcleanlooksstyle.cpp | 2 - src/widgets/styles/qcommonstyle.cpp | 107 - src/widgets/styles/qmacstyle_mac.mm | 10 +- src/widgets/styles/qplastiquestyle.cpp | 7 +- src/widgets/styles/qwindowsxpstyle.cpp | 101 +- src/widgets/widgets/qmdiarea.cpp | 2 +- src/widgets/widgets/qwidgetresizehandler.cpp | 2 +- src/widgets/widgets/qworkspace.cpp | 3341 ------------------------ src/widgets/widgets/qworkspace.h | 131 - src/widgets/widgets/widgets.pri | 2 - 15 files changed, 15 insertions(+), 3702 deletions(-) delete mode 100644 src/widgets/widgets/qworkspace.cpp delete mode 100644 src/widgets/widgets/qworkspace.h (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 040f61dfc5..abdc0d3e65 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -369,7 +369,7 @@ void QMessageBoxPrivate::updateSize() label->setSizePolicy(policy); } - QFontMetrics fm(QApplication::font("QWorkspaceTitleBar")); + QFontMetrics fm(QApplication::font("QMdiSubWindowTitleBar")); int windowTitleWidth = qMin(fm.width(q->windowTitle()) + 50, hardLimit); if (windowTitleWidth > width) width = windowTitleWidth; diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp index 2c4c738681..49450be75b 100644 --- a/src/widgets/dialogs/qwizard_win.cpp +++ b/src/widgets/dialogs/qwizard_win.cpp @@ -335,7 +335,7 @@ void QVistaHelper::drawTitleBar(QPainter *painter) const int verticalCenter = (btnTop + btnHeight / 2) - 1; const QString text = wizard->window()->windowTitle(); - const QFont font = QApplication::font("QWorkspaceTitleBar"); + const QFont font = QApplication::font("QMdiSubWindowTitleBar"); const QFontMetrics fontMetrics(font); const QRect brect = fontMetrics.boundingRect(text); int textHeight = brect.height(); diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp index 4ad8513050..5ac2269ff1 100644 --- a/src/widgets/graphicsview/qgraphicswidget.cpp +++ b/src/widgets/graphicsview/qgraphicswidget.cpp @@ -2305,7 +2305,7 @@ void QGraphicsWidget::paintWindowFrame(QPainter *painter, const QStyleOptionGrap bar.rect.adjust(frameWidth, frameWidth, -frameWidth, 0); painter->save(); - painter->setFont(QApplication::font("QWorkspaceTitleBar")); + painter->setFont(QApplication::font("QMdiSubWindowTitleBar")); style()->drawComplexControl(QStyle::CC_TitleBar, &bar, painter, widget); painter->restore(); if (setMask) diff --git a/src/widgets/graphicsview/qgraphicswidget_p.cpp b/src/widgets/graphicsview/qgraphicswidget_p.cpp index ee03f093c7..7931913545 100644 --- a/src/widgets/graphicsview/qgraphicswidget_p.cpp +++ b/src/widgets/graphicsview/qgraphicswidget_p.cpp @@ -325,7 +325,7 @@ void QGraphicsWidgetPrivate::initStyleOptionTitleBar(QStyleOptionTitleBar *optio option->state &= ~QStyle::State_Active; option->titleBarState = Qt::WindowNoState; } - QFont windowTitleFont = QApplication::font("QWorkspaceTitleBar"); + QFont windowTitleFont = QApplication::font("QMdiSubWindowTitleBar"); QRect textRect = q->style()->subControlRect(QStyle::CC_TitleBar, option, QStyle::SC_TitleBarLabel, 0); option->text = QFontMetrics(windowTitleFont).elidedText( windowData->windowTitle, Qt::ElideRight, textRect.width()); diff --git a/src/widgets/kernel/qapplication_qpa.cpp b/src/widgets/kernel/qapplication_qpa.cpp index 7c969b4928..da6a02a41d 100644 --- a/src/widgets/kernel/qapplication_qpa.cpp +++ b/src/widgets/kernel/qapplication_qpa.cpp @@ -339,10 +339,8 @@ void QApplicationPrivate::initializeWidgetFontHash() fontHash->insert(QByteArrayLiteral("QTitleBar"), *font); if (const QFont *font = theme->font(QPlatformTheme::StatusBarFont)) fontHash->insert(QByteArrayLiteral("QStatusBar"), *font); - if (const QFont *font = theme->font(QPlatformTheme::MdiSubWindowTitleFont)) { - fontHash->insert(QByteArrayLiteral("QWorkspaceTitleBar"), *font); + if (const QFont *font = theme->font(QPlatformTheme::MdiSubWindowTitleFont)) fontHash->insert(QByteArrayLiteral("QMdiSubWindowTitleBar"), *font); - } if (const QFont *font = theme->font(QPlatformTheme::DockWidgetTitleFont)) fontHash->insert(QByteArrayLiteral("QDockWidgetTitle"), *font); if (const QFont *font = theme->font(QPlatformTheme::PushButtonFont)) diff --git a/src/widgets/styles/qcleanlooksstyle.cpp b/src/widgets/styles/qcleanlooksstyle.cpp index 67b3c59b29..d617ee7e6f 100644 --- a/src/widgets/styles/qcleanlooksstyle.cpp +++ b/src/widgets/styles/qcleanlooksstyle.cpp @@ -3906,7 +3906,6 @@ void QCleanlooksStyle::polish(QWidget *widget) #ifndef QT_NO_SPINBOX || qobject_cast(widget) #endif - || (widget->inherits("QWorkspaceChild")) || (widget->inherits("QDockSeparator")) || (widget->inherits("QDockWidgetSeparator")) ) { @@ -3953,7 +3952,6 @@ void QCleanlooksStyle::unpolish(QWidget *widget) #ifndef QT_NO_SPINBOX || qobject_cast(widget) #endif - || (widget->inherits("QWorkspaceChild")) || (widget->inherits("QDockSeparator")) || (widget->inherits("QDockWidgetSeparator")) ) { diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index ca06cda2b0..148d7bcfb5 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -3568,69 +3568,6 @@ void QCommonStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCompl } break; #endif // QT_NO_GROUPBOX -#ifndef QT_NO_WORKSPACE - case CC_MdiControls: - { - QStyleOptionButton btnOpt; - btnOpt.QStyleOption::operator=(*opt); - btnOpt.state &= ~State_MouseOver; - int bsx = 0; - int bsy = 0; - if (opt->subControls & QStyle::SC_MdiCloseButton) { - if (opt->activeSubControls & QStyle::SC_MdiCloseButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiCloseButton, widget); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); - QPixmap pm = standardIcon(SP_TitleBarCloseButton).pixmap(16, 16); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - if (opt->subControls & QStyle::SC_MdiNormalButton) { - if (opt->activeSubControls & QStyle::SC_MdiNormalButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiNormalButton, widget); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); - QPixmap pm = standardIcon(SP_TitleBarNormalButton).pixmap(16, 16); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - if (opt->subControls & QStyle::SC_MdiMinButton) { - if (opt->activeSubControls & QStyle::SC_MdiMinButton && (opt->state & State_Sunken)) { - btnOpt.state |= State_Sunken; - btnOpt.state &= ~State_Raised; - bsx = proxy()->pixelMetric(PM_ButtonShiftHorizontal); - bsy = proxy()->pixelMetric(PM_ButtonShiftVertical); - } else { - btnOpt.state |= State_Raised; - btnOpt.state &= ~State_Sunken; - bsx = 0; - bsy = 0; - } - btnOpt.rect = proxy()->subControlRect(CC_MdiControls, opt, SC_MdiMinButton, widget); - proxy()->drawPrimitive(PE_PanelButtonCommand, &btnOpt, p, widget); - QPixmap pm = standardIcon(SP_TitleBarMinButton).pixmap(16, 16); - proxy()->drawItemPixmap(p, btnOpt.rect.translated(bsx, bsy), Qt::AlignCenter, pm); - } - } - break; -#endif // QT_NO_WORKSPACE - default: qWarning("QCommonStyle::drawComplexControl: Control %d not handled", cc); } @@ -4155,50 +4092,6 @@ QRect QCommonStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex break; } #endif // QT_NO_GROUPBOX -#ifndef QT_NO_WORKSPACE - case CC_MdiControls: - { - int numSubControls = 0; - if (opt->subControls & SC_MdiCloseButton) - ++numSubControls; - if (opt->subControls & SC_MdiMinButton) - ++numSubControls; - if (opt->subControls & SC_MdiNormalButton) - ++numSubControls; - if (numSubControls == 0) - break; - - int buttonWidth = opt->rect.width()/ numSubControls - 1; - int offset = 0; - switch (sc) { - case SC_MdiCloseButton: - // Only one sub control, no offset needed. - if (numSubControls == 1) - break; - offset += buttonWidth + 2; - //FALL THROUGH - case SC_MdiNormalButton: - // No offset needed if - // 1) There's only one sub control - // 2) We have a close button and a normal button (offset already added in SC_MdiClose) - if (numSubControls == 1 || (numSubControls == 2 && !(opt->subControls & SC_MdiMinButton))) - break; - if (opt->subControls & SC_MdiNormalButton) - offset += buttonWidth; - break; - default: - break; - } - - // Subtract one pixel if we only have one sub control. At this point - // buttonWidth is the actual width + 1 pixel margin, but we don't want the - // margin when there are no other controllers. - if (numSubControls == 1) - --buttonWidth; - ret = QRect(offset, 0, buttonWidth, opt->rect.height()); - break; - } -#endif // QT_NO_WORKSPACE default: qWarning("QCommonStyle::subControlRect: Case %d not handled", cc); } diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 55c603896b..ef6947088e 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -2184,8 +2184,7 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW if (widget && (widget->isWindow() || !widget->parentWidget() || (qobject_cast(widget->parentWidget()) && static_cast(widget->parentWidget())->centralWidget() == widget)) - && (qobject_cast(widget) - || widget->inherits("QWorkspaceChild"))) + && qobject_cast(widget)) ret = 0; else #endif @@ -2547,12 +2546,7 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w ret = Qt::AlignTop; break; case SH_ScrollView_FrameOnlyAroundContents: - if (w && (w->isWindow() || !w->parentWidget() || w->parentWidget()->isWindow()) - && (w->inherits("QWorkspaceChild") - )) - ret = true; - else - ret = QWindowsStyle::styleHint(sh, opt, w, hret); + ret = QWindowsStyle::styleHint(sh, opt, w, hret); break; case SH_Menu_FillScreenWithScroll: ret = false; diff --git a/src/widgets/styles/qplastiquestyle.cpp b/src/widgets/styles/qplastiquestyle.cpp index 0bf443fe00..cae015ff82 100644 --- a/src/widgets/styles/qplastiquestyle.cpp +++ b/src/widgets/styles/qplastiquestyle.cpp @@ -83,7 +83,6 @@ static const int blueFrameWidth = 2; // with of line edit focus frame #include #include #include -#include #include #include #include @@ -5629,8 +5628,7 @@ void QPlastiqueStyle::polish(QWidget *widget) widget->setAttribute(Qt::WA_Hover); } - if (widget->inherits("QWorkspaceTitleBar") - || widget->inherits("QDockSeparator") + if (widget->inherits("QDockSeparator") || widget->inherits("QDockWidgetSeparator")) { widget->setAttribute(Qt::WA_Hover); } @@ -5684,8 +5682,7 @@ void QPlastiqueStyle::unpolish(QWidget *widget) widget->setAttribute(Qt::WA_Hover, false); } - if (widget->inherits("QWorkspaceTitleBar") - || widget->inherits("QDockSeparator") + if (widget->inherits("QDockSeparator") || widget->inherits("QDockWidgetSeparator")) { widget->setAttribute(Qt::WA_Hover, false); } diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp index a342486339..f57da855fb 100644 --- a/src/widgets/styles/qwindowsxpstyle.cpp +++ b/src/widgets/styles/qwindowsxpstyle.cpp @@ -1178,8 +1178,9 @@ void QWindowsXPStyle::polish(QWidget *widget) || qobject_cast(widget) || qobject_cast(widget) #endif // QT_NO_SPINBOX - || widget->inherits("QWorkspaceChild")) + ) { widget->setAttribute(Qt::WA_Hover); + } #ifndef QT_NO_RUBBERBAND if (qobject_cast(widget)) { @@ -1249,8 +1250,9 @@ void QWindowsXPStyle::unpolish(QWidget *widget) || qobject_cast(widget) || qobject_cast(widget) #endif // QT_NO_SPINBOX - || widget->inherits("QWorkspaceChild")) + ) { widget->setAttribute(Qt::WA_Hover, false); + } QWindowsStyle::unpolish(widget); } @@ -3225,63 +3227,6 @@ void QWindowsXPStyle::drawComplexControl(ComplexControl cc, const QStyleOptionCo } break; -#ifndef QT_NO_WORKSPACE - case CC_MdiControls: - { - QRect buttonRect; - XPThemeData theme(widget, p, QLatin1String("WINDOW"), WP_MDICLOSEBUTTON, CBS_NORMAL); - - if (option->subControls & SC_MdiCloseButton) { - buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiCloseButton, widget); - if (theme.isValid()) { - theme.partId = WP_MDICLOSEBUTTON; - theme.rect = buttonRect; - if (!(flags & State_Enabled)) - theme.stateId = CBS_INACTIVE; - else if (flags & State_Sunken && (option->activeSubControls & SC_MdiCloseButton)) - theme.stateId = CBS_PUSHED; - else if (flags & State_MouseOver && (option->activeSubControls & SC_MdiCloseButton)) - theme.stateId = CBS_HOT; - else - theme.stateId = CBS_NORMAL; - d->drawBackground(theme); - } - } - if (option->subControls & SC_MdiNormalButton) { - buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiNormalButton, widget); - if (theme.isValid()) { - theme.partId = WP_MDIRESTOREBUTTON; - theme.rect = buttonRect; - if (!(flags & State_Enabled)) - theme.stateId = CBS_INACTIVE; - else if (flags & State_Sunken && (option->activeSubControls & SC_MdiNormalButton)) - theme.stateId = CBS_PUSHED; - else if (flags & State_MouseOver && (option->activeSubControls & SC_MdiNormalButton)) - theme.stateId = CBS_HOT; - else - theme.stateId = CBS_NORMAL; - d->drawBackground(theme); - } - } - if (option->subControls & QStyle::SC_MdiMinButton) { - buttonRect = proxy()->subControlRect(CC_MdiControls, option, SC_MdiMinButton, widget); - if (theme.isValid()) { - theme.partId = WP_MDIMINBUTTON; - theme.rect = buttonRect; - if (!(flags & State_Enabled)) - theme.stateId = CBS_INACTIVE; - else if (flags & State_Sunken && (option->activeSubControls & SC_MdiMinButton)) - theme.stateId = CBS_PUSHED; - else if (flags & State_MouseOver && (option->activeSubControls & SC_MdiMinButton)) - theme.stateId = CBS_HOT; - else - theme.stateId = CBS_NORMAL; - d->drawBackground(theme); - } - } - } - break; -#endif //QT_NO_WORKSPACE #ifndef QT_NO_DIAL case CC_Dial: if (const QStyleOptionSlider *dial = qstyleoption_cast(option)) @@ -3667,44 +3612,6 @@ QRect QWindowsXPStyle::subControlRect(ComplexControl cc, const QStyleOptionCompl } } break; -#ifndef QT_NO_WORKSPACE - case CC_MdiControls: - { - int numSubControls = 0; - if (option->subControls & SC_MdiCloseButton) - ++numSubControls; - if (option->subControls & SC_MdiMinButton) - ++numSubControls; - if (option->subControls & SC_MdiNormalButton) - ++numSubControls; - if (numSubControls == 0) - break; - - int buttonWidth = option->rect.width()/ numSubControls; - int offset = 0; - switch (subControl) { - case SC_MdiCloseButton: - // Only one sub control, no offset needed. - if (numSubControls == 1) - break; - offset += buttonWidth; - //FALL THROUGH - case SC_MdiNormalButton: - // No offset needed if - // 1) There's only one sub control - // 2) We have a close button and a normal button (offset already added in SC_MdiClose) - if (numSubControls == 1 || (numSubControls == 2 && !(option->subControls & SC_MdiMinButton))) - break; - if (option->subControls & SC_MdiNormalButton) - offset += buttonWidth; - break; - default: - break; - } - rect = QRect(offset, 0, buttonWidth, option->rect.height()); - break; - } -#endif // QT_NO_WORKSPACE default: rect = visualRect(option->direction, option->rect, diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp index 36fba72963..eb483ac0fe 100644 --- a/src/widgets/widgets/qmdiarea.cpp +++ b/src/widgets/widgets/qmdiarea.cpp @@ -357,7 +357,7 @@ void SimpleCascader::rearrange(QList &widgets, const QRect &domain) c if (qobject_cast(widgets.at(0)->style())) titleBarHeight -= 4; #endif - const QFontMetrics fontMetrics = QFontMetrics(QApplication::font("QWorkspaceTitleBar")); + const QFontMetrics fontMetrics = QFontMetrics(QApplication::font("QMdiSubWindowTitleBar")); const int dy = qMax(titleBarHeight - (titleBarHeight - fontMetrics.height()) / 2, 1); const int n = widgets.size(); diff --git a/src/widgets/widgets/qwidgetresizehandler.cpp b/src/widgets/widgets/qwidgetresizehandler.cpp index 5380fb798c..0847263645 100644 --- a/src/widgets/widgets/qwidgetresizehandler.cpp +++ b/src/widgets/widgets/qwidgetresizehandler.cpp @@ -336,7 +336,7 @@ void QWidgetResizeHandler::setMouseCursor(MousePosition m) QObjectList children = widget->children(); for (int i = 0; i < children.size(); ++i) { if (QWidget *w = qobject_cast(children.at(i))) { - if (!w->testAttribute(Qt::WA_SetCursor) && !w->inherits("QWorkspaceTitleBar")) { + if (!w->testAttribute(Qt::WA_SetCursor)) { w->setCursor(Qt::ArrowCursor); } } diff --git a/src/widgets/widgets/qworkspace.cpp b/src/widgets/widgets/qworkspace.cpp deleted file mode 100644 index 36c589be1c..0000000000 --- a/src/widgets/widgets/qworkspace.cpp +++ /dev/null @@ -1,3341 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qworkspace.h" -#ifndef QT_NO_WORKSPACE -#include "qapplication.h" -#include "qbitmap.h" -#include "qcursor.h" -#include "qdesktopwidget.h" -#include "qevent.h" -#include "qhash.h" -#include "qicon.h" -#include "qimage.h" -#include "qlabel.h" -#include "qlayout.h" -#include "qmenubar.h" -#include "qmenu.h" -#include "qpainter.h" -#include "qpointer.h" -#include "qscrollbar.h" -#include "qstyle.h" -#include "qstyleoption.h" -#include "qelapsedtimer.h" -#include "qtooltip.h" -#include "qdebug.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QWorkspaceTitleBarPrivate; - - -/************************************************************** -* QMDIControl -* -* Used for displaying MDI controls in a maximized MDI window -* -*/ -class QMDIControl : public QWidget -{ - Q_OBJECT -signals: - void _q_minimize(); - void _q_restore(); - void _q_close(); - -public: - QMDIControl(QWidget *widget); - -private: - QSize sizeHint() const; - void paintEvent(QPaintEvent *event); - void mousePressEvent(QMouseEvent *event); - void mouseReleaseEvent(QMouseEvent *event); - void mouseMoveEvent(QMouseEvent *event); - void leaveEvent(QEvent *event); - bool event(QEvent *event); - void initStyleOption(QStyleOptionComplex *option) const; - QStyle::SubControl activeControl; //control locked by pressing and holding the mouse - QStyle::SubControl hoverControl; //previously active hover control, used for tracking repaints -}; - -bool QMDIControl::event(QEvent *event) -{ - if (event->type() == QEvent::ToolTip) { - QStyleOptionComplex opt; - initStyleOption(&opt); -#ifndef QT_NO_TOOLTIP - QHelpEvent *helpEvent = static_cast(event); - QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt, - helpEvent->pos(), this); - if (ctrl == QStyle::SC_MdiCloseButton) - QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Close"), this); - else if (ctrl == QStyle::SC_MdiMinButton) - QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Minimize"), this); - else if (ctrl == QStyle::SC_MdiNormalButton) - QToolTip::showText(helpEvent->globalPos(), QWorkspace::tr("Restore Down"), this); - else - QToolTip::hideText(); -#endif // QT_NO_TOOLTIP - } - return QWidget::event(event); -} - -void QMDIControl::initStyleOption(QStyleOptionComplex *option) const -{ - option->initFrom(this); - option->subControls = QStyle::SC_All; - option->activeSubControls = QStyle::SC_None; -} - -QMDIControl::QMDIControl(QWidget *widget) - : QWidget(widget), activeControl(QStyle::SC_None), - hoverControl(QStyle::SC_None) -{ - setObjectName(QLatin1String("qt_maxcontrols")); - setFocusPolicy(Qt::NoFocus); - setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); - setMouseTracking(true); -} - -QSize QMDIControl::sizeHint() const -{ - ensurePolished(); - QStyleOptionComplex opt; - initStyleOption(&opt); - QSize size(48, 16); - return style()->sizeFromContents(QStyle::CT_MdiControls, &opt, size, this); -} - -void QMDIControl::mousePressEvent(QMouseEvent *event) -{ - if (event->button() != Qt::LeftButton) { - event->ignore(); - return; - } - QStyleOptionComplex opt; - initStyleOption(&opt); - QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt, - event->pos(), this); - activeControl = ctrl; - update(); -} - -void QMDIControl::mouseReleaseEvent(QMouseEvent *event) -{ - if (event->button() != Qt::LeftButton) { - event->ignore(); - return; - } - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt, - event->pos(), this); - if (under_mouse == activeControl) { - switch (activeControl) { - case QStyle::SC_MdiCloseButton: - emit _q_close(); - break; - case QStyle::SC_MdiNormalButton: - emit _q_restore(); - break; - case QStyle::SC_MdiMinButton: - emit _q_minimize(); - break; - default: - break; - } - } - activeControl = QStyle::SC_None; - update(); -} - -void QMDIControl::leaveEvent(QEvent * /*event*/) -{ - hoverControl = QStyle::SC_None; - update(); -} - -void QMDIControl::mouseMoveEvent(QMouseEvent *event) -{ - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_MdiControls, &opt, - event->pos(), this); - //test if hover state changes - if (hoverControl != under_mouse) { - hoverControl = under_mouse; - update(); - } -} - -void QMDIControl::paintEvent(QPaintEvent *) -{ - QPainter p(this); - QStyleOptionComplex opt; - initStyleOption(&opt); - if (activeControl == hoverControl) { - opt.activeSubControls = activeControl; - opt.state |= QStyle::State_Sunken; - } else if (hoverControl != QStyle::SC_None && (activeControl == QStyle::SC_None)) { - opt.activeSubControls = hoverControl; - opt.state |= QStyle::State_MouseOver; - } - style()->drawComplexControl(QStyle::CC_MdiControls, &opt, &p, this); -} - -class QWorkspaceTitleBar : public QWidget -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QWorkspaceTitleBar) - Q_PROPERTY(bool autoRaise READ autoRaise WRITE setAutoRaise) - Q_PROPERTY(bool movable READ isMovable WRITE setMovable) - -public: - QWorkspaceTitleBar (QWidget *w, QWidget *parent, Qt::WindowFlags f = 0); - ~QWorkspaceTitleBar(); - - bool isActive() const; - bool usesActiveColor() const; - - bool isMovable() const; - void setMovable(bool); - - bool autoRaise() const; - void setAutoRaise(bool); - - QWidget *window() const; - bool isTool() const; - - QSize sizeHint() const; - void initStyleOption(QStyleOptionTitleBar *option) const; - -public slots: - void setActive(bool); - -signals: - void doActivate(); - void doNormal(); - void doClose(); - void doMaximize(); - void doMinimize(); - void doShade(); - void showOperationMenu(); - void popupOperationMenu(const QPoint&); - void doubleClicked(); - -protected: - bool event(QEvent *); -#ifndef QT_NO_CONTEXTMENU - void contextMenuEvent(QContextMenuEvent *); -#endif - void mousePressEvent(QMouseEvent *); - void mouseDoubleClickEvent(QMouseEvent *); - void mouseReleaseEvent(QMouseEvent *); - void mouseMoveEvent(QMouseEvent *); - void enterEvent(QEvent *e); - void leaveEvent(QEvent *e); - void paintEvent(QPaintEvent *p); - -private: - Q_DISABLE_COPY(QWorkspaceTitleBar) -}; - - -class QWorkspaceTitleBarPrivate : public QWidgetPrivate -{ - Q_DECLARE_PUBLIC(QWorkspaceTitleBar) -public: - QWorkspaceTitleBarPrivate() - : - lastControl(QStyle::SC_None), - act(0), window(0), movable(1), pressed(0), autoraise(0), moving(0) - { - } - - Qt::WindowFlags flags; - QStyle::SubControl buttonDown; - QStyle::SubControl lastControl; - QPoint moveOffset; - bool act :1; - QPointer window; - bool movable :1; - bool pressed :1; - bool autoraise :1; - bool moving : 1; - - int titleBarState() const; - void readColors(); -}; - -inline int QWorkspaceTitleBarPrivate::titleBarState() const -{ - Q_Q(const QWorkspaceTitleBar); - uint state = window ? window->windowState() : static_cast(Qt::WindowNoState); - state |= uint((act && q->isActiveWindow()) ? QStyle::State_Active : QStyle::State_None); - return (int)state; -} - -void QWorkspaceTitleBar::initStyleOption(QStyleOptionTitleBar *option) const -{ - Q_D(const QWorkspaceTitleBar); - option->initFrom(this); - //################ - if (d->window && (d->flags & Qt::WindowTitleHint)) { - option->text = d->window->windowTitle(); - QIcon icon = d->window->windowIcon(); - QSize s = icon.actualSize(QSize(64, 64)); - option->icon = icon.pixmap(s); - } - option->subControls = QStyle::SC_All; - option->activeSubControls = QStyle::SC_None; - option->titleBarState = d->titleBarState(); - option->titleBarFlags = d->flags; - option->state &= ~QStyle::State_MouseOver; -} - -QWorkspaceTitleBar::QWorkspaceTitleBar(QWidget *w, QWidget *parent, Qt::WindowFlags f) - : QWidget(*new QWorkspaceTitleBarPrivate, parent, Qt::FramelessWindowHint) -{ - Q_D(QWorkspaceTitleBar); - if (f == 0 && w) - f = w->windowFlags(); - d->flags = f; - d->window = w; - d->buttonDown = QStyle::SC_None; - d->act = 0; - if (w) { - if (w->maximumSize() != QSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX)) - d->flags &= ~Qt::WindowMaximizeButtonHint; - setWindowTitle(w->windowTitle()); - } - - d->readColors(); - setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); - setMouseTracking(true); - setAutoRaise(style()->styleHint(QStyle::SH_TitleBar_AutoRaise, 0, this)); -} - -QWorkspaceTitleBar::~QWorkspaceTitleBar() -{ -} - - -#ifdef Q_WS_WIN -static inline QRgb colorref2qrgb(COLORREF col) -{ - return qRgb(GetRValue(col),GetGValue(col),GetBValue(col)); -} -#endif - -void QWorkspaceTitleBarPrivate::readColors() -{ - Q_Q(QWorkspaceTitleBar); - QPalette pal = q->palette(); - - bool colorsInitialized = false; - -#ifdef Q_WS_WIN // ask system properties on windows -#ifndef SPI_GETGRADIENTCAPTIONS -#define SPI_GETGRADIENTCAPTIONS 0x1008 -#endif -#ifndef COLOR_GRADIENTACTIVECAPTION -#define COLOR_GRADIENTACTIVECAPTION 27 -#endif -#ifndef COLOR_GRADIENTINACTIVECAPTION -#define COLOR_GRADIENTINACTIVECAPTION 28 -#endif - if (QApplication::desktopSettingsAware()) { - pal.setColor(QPalette::Active, QPalette::Highlight, colorref2qrgb(GetSysColor(COLOR_ACTIVECAPTION))); - pal.setColor(QPalette::Inactive, QPalette::Highlight, colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTION))); - pal.setColor(QPalette::Active, QPalette::HighlightedText, colorref2qrgb(GetSysColor(COLOR_CAPTIONTEXT))); - pal.setColor(QPalette::Inactive, QPalette::HighlightedText, colorref2qrgb(GetSysColor(COLOR_INACTIVECAPTIONTEXT))); - - colorsInitialized = true; - BOOL gradient = false; - SystemParametersInfo(SPI_GETGRADIENTCAPTIONS, 0, &gradient, 0); - - if (gradient) { - pal.setColor(QPalette::Active, QPalette::Base, colorref2qrgb(GetSysColor(COLOR_GRADIENTACTIVECAPTION))); - pal.setColor(QPalette::Inactive, QPalette::Base, colorref2qrgb(GetSysColor(COLOR_GRADIENTINACTIVECAPTION))); - } else { - pal.setColor(QPalette::Active, QPalette::Base, pal.color(QPalette::Active, QPalette::Highlight)); - pal.setColor(QPalette::Inactive, QPalette::Base, pal.color(QPalette::Inactive, QPalette::Highlight)); - } - } -#endif // Q_WS_WIN - if (!colorsInitialized) { - pal.setColor(QPalette::Active, QPalette::Highlight, - pal.color(QPalette::Active, QPalette::Highlight)); - pal.setColor(QPalette::Active, QPalette::Base, - pal.color(QPalette::Active, QPalette::Highlight)); - pal.setColor(QPalette::Inactive, QPalette::Highlight, - pal.color(QPalette::Inactive, QPalette::Dark)); - pal.setColor(QPalette::Inactive, QPalette::Base, - pal.color(QPalette::Inactive, QPalette::Dark)); - pal.setColor(QPalette::Inactive, QPalette::HighlightedText, - pal.color(QPalette::Inactive, QPalette::Window)); - } - - q->setPalette(pal); - q->setActive(act); -} - -void QWorkspaceTitleBar::mousePressEvent(QMouseEvent *e) -{ - Q_D(QWorkspaceTitleBar); - if (!d->act) - emit doActivate(); - if (e->button() == Qt::LeftButton) { - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0) - && !rect().adjusted(5, 5, -5, 0).contains(e->pos())) { - // propagate border events to the QWidgetResizeHandler - e->ignore(); - return; - } - - d->pressed = true; - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, - e->pos(), this); - switch (ctrl) { - case QStyle::SC_TitleBarSysMenu: - if (d->flags & Qt::WindowSystemMenuHint) { - d->buttonDown = QStyle::SC_None; - static QElapsedTimer *t = 0; - static QWorkspaceTitleBar *tc = 0; - if (!t) - t = new QElapsedTimer; - if (tc != this || t->elapsed() > QApplication::doubleClickInterval()) { - emit showOperationMenu(); - t->start(); - tc = this; - } else { - tc = 0; - emit doClose(); - return; - } - } - break; - - case QStyle::SC_TitleBarShadeButton: - case QStyle::SC_TitleBarUnshadeButton: - if (d->flags & Qt::WindowShadeButtonHint) - d->buttonDown = ctrl; - break; - - case QStyle::SC_TitleBarNormalButton: - d->buttonDown = ctrl; - break; - - case QStyle::SC_TitleBarMinButton: - if (d->flags & Qt::WindowMinimizeButtonHint) - d->buttonDown = ctrl; - break; - - case QStyle::SC_TitleBarMaxButton: - if (d->flags & Qt::WindowMaximizeButtonHint) - d->buttonDown = ctrl; - break; - - case QStyle::SC_TitleBarCloseButton: - if (d->flags & Qt::WindowSystemMenuHint) - d->buttonDown = ctrl; - break; - - case QStyle::SC_TitleBarLabel: - d->buttonDown = ctrl; - d->moveOffset = mapToParent(e->pos()); - break; - - default: - break; - } - update(); - } else { - d->pressed = false; - } -} - -#ifndef QT_NO_CONTEXTMENU -void QWorkspaceTitleBar::contextMenuEvent(QContextMenuEvent *e) -{ - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, e->pos(), - this); - if(ctrl == QStyle::SC_TitleBarLabel || ctrl == QStyle::SC_TitleBarSysMenu) { - e->accept(); - emit popupOperationMenu(e->globalPos()); - } else { - e->ignore(); - } -} -#endif // QT_NO_CONTEXTMENU - -void QWorkspaceTitleBar::mouseReleaseEvent(QMouseEvent *e) -{ - Q_D(QWorkspaceTitleBar); - if (!d->window) { - // could have been deleted as part of a double click event on the sysmenu - return; - } - if (e->button() == Qt::LeftButton && d->pressed) { - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0) - && !rect().adjusted(5, 5, -5, 0).contains(e->pos())) { - // propagate border events to the QWidgetResizeHandler - e->ignore(); - d->buttonDown = QStyle::SC_None; - d->pressed = false; - return; - } - e->accept(); - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl ctrl = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, - e->pos(), this); - - if (d->pressed) { - update(); - d->pressed = false; - d->moving = false; - } - if (ctrl == d->buttonDown) { - d->buttonDown = QStyle::SC_None; - switch(ctrl) { - case QStyle::SC_TitleBarShadeButton: - case QStyle::SC_TitleBarUnshadeButton: - if(d->flags & Qt::WindowShadeButtonHint) - emit doShade(); - break; - - case QStyle::SC_TitleBarNormalButton: - if(d->flags & Qt::WindowMinMaxButtonsHint) - emit doNormal(); - break; - - case QStyle::SC_TitleBarMinButton: - if(d->flags & Qt::WindowMinimizeButtonHint) { - if (d->window && d->window->isMinimized()) - emit doNormal(); - else - emit doMinimize(); - } - break; - - case QStyle::SC_TitleBarMaxButton: - if(d->flags & Qt::WindowMaximizeButtonHint) { - if(d->window && d->window->isMaximized()) - emit doNormal(); - else - emit doMaximize(); - } - break; - - case QStyle::SC_TitleBarCloseButton: - if(d->flags & Qt::WindowSystemMenuHint) { - d->buttonDown = QStyle::SC_None; - emit doClose(); - return; - } - break; - - default: - break; - } - } - } else { - e->ignore(); - } -} - -void QWorkspaceTitleBar::mouseMoveEvent(QMouseEvent *e) -{ - Q_D(QWorkspaceTitleBar); - e->ignore(); - if ((e->buttons() & Qt::LeftButton) && style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, 0) - && !rect().adjusted(5, 5, -5, 0).contains(e->pos()) && !d->pressed) { - // propagate border events to the QWidgetResizeHandler - return; - } - - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QStyle::SubControl under_mouse = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, - e->pos(), this); - if(under_mouse != d->lastControl) { - d->lastControl = under_mouse; - update(); - } - - switch (d->buttonDown) { - case QStyle::SC_None: - break; - case QStyle::SC_TitleBarSysMenu: - break; - case QStyle::SC_TitleBarLabel: - if (d->buttonDown == QStyle::SC_TitleBarLabel && d->movable && d->pressed) { - if (d->moving || (d->moveOffset - mapToParent(e->pos())).manhattanLength() >= 4) { - d->moving = true; - QPoint p = mapFromGlobal(e->globalPos()); - - QWidget *parent = d->window ? d->window->parentWidget() : 0; - if(parent && parent->inherits("QWorkspaceChild")) { - QWidget *workspace = parent->parentWidget(); - p = workspace->mapFromGlobal(e->globalPos()); - if (!workspace->rect().contains(p)) { - if (p.x() < 0) - p.rx() = 0; - if (p.y() < 0) - p.ry() = 0; - if (p.x() > workspace->width()) - p.rx() = workspace->width(); - if (p.y() > workspace->height()) - p.ry() = workspace->height(); - } - } - - QPoint pp = p - d->moveOffset; - if (!parentWidget()->isMaximized()) - parentWidget()->move(pp); - } - } - e->accept(); - break; - default: - break; - } -} - -bool QWorkspaceTitleBar::isTool() const -{ - Q_D(const QWorkspaceTitleBar); - return (d->flags & Qt::WindowType_Mask) == Qt::Tool; -} - -// from qwidget.cpp -extern QString qt_setWindowTitle_helperHelper(const QString &, const QWidget*); - -void QWorkspaceTitleBar::paintEvent(QPaintEvent *) -{ - Q_D(QWorkspaceTitleBar); - QStyleOptionTitleBar opt; - initStyleOption(&opt); - opt.subControls = QStyle::SC_TitleBarLabel; - opt.activeSubControls = d->buttonDown; - - if (d->window && (d->flags & Qt::WindowTitleHint)) { - QString title = qt_setWindowTitle_helperHelper(opt.text, d->window); - int maxw = style()->subControlRect(QStyle::CC_TitleBar, &opt, QStyle::SC_TitleBarLabel, - this).width(); - opt.text = fontMetrics().elidedText(title, Qt::ElideRight, maxw); - } - - if (d->flags & Qt::WindowSystemMenuHint) { - opt.subControls |= QStyle::SC_TitleBarSysMenu | QStyle::SC_TitleBarCloseButton; - if (d->window && (d->flags & Qt::WindowShadeButtonHint)) { - if (d->window->isMinimized()) - opt.subControls |= QStyle::SC_TitleBarUnshadeButton; - else - opt.subControls |= QStyle::SC_TitleBarShadeButton; - } - if (d->window && (d->flags & Qt::WindowMinMaxButtonsHint)) { - if(d->window && d->window->isMinimized()) - opt.subControls |= QStyle::SC_TitleBarNormalButton; - else - opt.subControls |= QStyle::SC_TitleBarMinButton; - } - if (d->window && (d->flags & Qt::WindowMaximizeButtonHint) && !d->window->isMaximized()) - opt.subControls |= QStyle::SC_TitleBarMaxButton; - } - - QStyle::SubControl under_mouse = QStyle::SC_None; - under_mouse = style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, - mapFromGlobal(QCursor::pos()), this); - if ((d->buttonDown == under_mouse) && d->pressed) { - opt.state |= QStyle::State_Sunken; - } else if( autoRaise() && under_mouse != QStyle::SC_None && !d->pressed) { - opt.activeSubControls = under_mouse; - opt.state |= QStyle::State_MouseOver; - } - opt.palette.setCurrentColorGroup(usesActiveColor() ? QPalette::Active : QPalette::Inactive); - - QPainter p(this); - style()->drawComplexControl(QStyle::CC_TitleBar, &opt, &p, this); -} - -void QWorkspaceTitleBar::mouseDoubleClickEvent(QMouseEvent *e) -{ - Q_D(QWorkspaceTitleBar); - if (e->button() != Qt::LeftButton) { - e->ignore(); - return; - } - e->accept(); - QStyleOptionTitleBar opt; - initStyleOption(&opt); - switch (style()->hitTestComplexControl(QStyle::CC_TitleBar, &opt, e->pos(), this)) { - case QStyle::SC_TitleBarLabel: - emit doubleClicked(); - break; - - case QStyle::SC_TitleBarSysMenu: - if (d->flags & Qt::WindowSystemMenuHint) - emit doClose(); - break; - - default: - break; - } -} - -void QWorkspaceTitleBar::leaveEvent(QEvent *) -{ - Q_D(QWorkspaceTitleBar); - d->lastControl = QStyle::SC_None; - if(autoRaise() && !d->pressed) - update(); -} - -void QWorkspaceTitleBar::enterEvent(QEvent *) -{ - Q_D(QWorkspaceTitleBar); - if(autoRaise() && !d->pressed) - update(); - QEvent e(QEvent::Leave); - QApplication::sendEvent(parentWidget(), &e); -} - -void QWorkspaceTitleBar::setActive(bool active) -{ - Q_D(QWorkspaceTitleBar); - if (d->act == active) - return ; - - d->act = active; - update(); -} - -bool QWorkspaceTitleBar::isActive() const -{ - Q_D(const QWorkspaceTitleBar); - return d->act; -} - -bool QWorkspaceTitleBar::usesActiveColor() const -{ - return (isActive() && isActiveWindow()) || - (!window() && QWidget::window()->isActiveWindow()); -} - -QWidget *QWorkspaceTitleBar::window() const -{ - Q_D(const QWorkspaceTitleBar); - return d->window; -} - -bool QWorkspaceTitleBar::event(QEvent *e) -{ - Q_D(QWorkspaceTitleBar); - if (e->type() == QEvent::ApplicationPaletteChange) { - d->readColors(); - } else if (e->type() == QEvent::WindowActivate - || e->type() == QEvent::WindowDeactivate) { - if (d->act) - update(); - } - return QWidget::event(e); -} - -void QWorkspaceTitleBar::setMovable(bool b) -{ - Q_D(QWorkspaceTitleBar); - d->movable = b; -} - -bool QWorkspaceTitleBar::isMovable() const -{ - Q_D(const QWorkspaceTitleBar); - return d->movable; -} - -void QWorkspaceTitleBar::setAutoRaise(bool b) -{ - Q_D(QWorkspaceTitleBar); - d->autoraise = b; -} - -bool QWorkspaceTitleBar::autoRaise() const -{ - Q_D(const QWorkspaceTitleBar); - return d->autoraise; -} - -QSize QWorkspaceTitleBar::sizeHint() const -{ - ensurePolished(); - QStyleOptionTitleBar opt; - initStyleOption(&opt); - QRect menur = style()->subControlRect(QStyle::CC_TitleBar, &opt, - QStyle::SC_TitleBarSysMenu, this); - return QSize(menur.width(), style()->pixelMetric(QStyle::PM_TitleBarHeight, &opt, this)); -} - -/*! - \class QWorkspace - \obsolete - \brief The QWorkspace widget provides a workspace window that can be - used in an MDI application. - - \inmodule QtWidgets - - This class is deprecated. Use QMdiArea instead. - - Multiple Document Interface (MDI) applications are typically - composed of a main window containing a menu bar, a toolbar, and - a central QWorkspace widget. The workspace itself is used to display - a number of child windows, each of which is a widget. - - The workspace itself is an ordinary Qt widget. It has a standard - constructor that takes a parent widget. - Workspaces can be placed in any layout, but are typically given - as the central widget in a QMainWindow: - - \snippet doc/src/snippets/code/src_gui_widgets_qworkspace.cpp 0 - - Child windows (MDI windows) are standard Qt widgets that are - inserted into the workspace with addWindow(). As with top-level - widgets, you can call functions such as show(), hide(), - showMaximized(), and setWindowTitle() on a child window to change - its appearance within the workspace. You can also provide widget - flags to determine the layout of the decoration or the behavior of - the widget itself. - - To change or retrieve the geometry of a child window, you must - operate on its parentWidget(). The parentWidget() provides - access to the decorated frame that contains the child window - widget. When a child window is maximised, its decorated frame - is hidden. If the top-level widget contains a menu bar, it will display - the maximised window's operations menu to the left of the menu - entries, and the window's controls to the right. - - A child window becomes active when it gets the keyboard focus, - or when setFocus() is called. The user can activate a window by moving - focus in the usual ways, for example by clicking a window or by pressing - Tab. The workspace emits a signal windowActivated() when the active - window changes, and the function activeWindow() returns a pointer to the - active child window, or 0 if no window is active. - - The convenience function windowList() returns a list of all child - windows. This information could be used in a popup menu - containing a list of windows, for example. This feature is also - available as part of the \l{Window Menu} Solution. - - QWorkspace provides two built-in layout strategies for child - windows: cascade() and tile(). Both are slots so you can easily - connect menu entries to them. - - \table - \row \li \inlineimage mdi-cascade.png - \li \inlineimage mdi-tile.png - \endtable - - If you want your users to be able to work with child windows - larger than the visible workspace area, set the scrollBarsEnabled - property to true. - - \sa QDockWidget, {MDI Example} -*/ - - -class QWorkspaceChild : public QWidget -{ - Q_OBJECT - - friend class QWorkspacePrivate; - friend class QWorkspace; - friend class QWorkspaceTitleBar; - -public: - QWorkspaceChild(QWidget* window, QWorkspace* parent=0, Qt::WindowFlags flags = 0); - ~QWorkspaceChild(); - - void setActive(bool); - bool isActive() const; - - void adjustToFullscreen(); - - QWidget* windowWidget() const; - QWidget* iconWidget() const; - - void doResize(); - void doMove(); - - QSize sizeHint() const; - QSize minimumSizeHint() const; - - QSize baseSize() const; - - int frameWidth() const; - - void show(); - - bool isWindowOrIconVisible() const; - -signals: - void showOperationMenu(); - void popupOperationMenu(const QPoint&); - -public slots: - void activate(); - void showMinimized(); - void showMaximized(); - void showNormal(); - void showShaded(); - void internalRaise(); - void titleBarDoubleClicked(); - -protected: - void enterEvent(QEvent *); - void leaveEvent(QEvent *); - void childEvent(QChildEvent*); - void resizeEvent(QResizeEvent *); - void moveEvent(QMoveEvent *); - bool eventFilter(QObject *, QEvent *); - - void paintEvent(QPaintEvent *); - void changeEvent(QEvent *); - -private: - void updateMask(); - - Q_DISABLE_COPY(QWorkspaceChild) - - QWidget *childWidget; - QWidgetResizeHandler *widgetResizeHandler; - QWorkspaceTitleBar *titlebar; - QPointer iconw; - QSize windowSize; - QSize shadeRestore; - QSize shadeRestoreMin; - bool act :1; - bool shademode :1; -}; - -int QWorkspaceChild::frameWidth() const -{ - return contentsRect().left(); -} - - - -class QWorkspacePrivate : public QWidgetPrivate { - Q_DECLARE_PUBLIC(QWorkspace) -public: - QWorkspaceChild* active; - QList windows; - QList focus; - QList icons; - QWorkspaceChild* maxWindow; - QRect maxRestore; - QPointer maxcontrols; - QPointer maxmenubar; - QHash shortcutMap; - - int px; - int py; - QWidget *becomeActive; - QPointer maxtools; - QString topTitle; - - QMenu *popup, *toolPopup; - enum WSActs { RestoreAct, MoveAct, ResizeAct, MinimizeAct, MaximizeAct, CloseAct, StaysOnTopAct, ShadeAct, NCountAct }; - QAction *actions[NCountAct]; - - QScrollBar *vbar, *hbar; - QWidget *corner; - int yoffset, xoffset; - QBrush background; - - void init(); - void insertIcon(QWidget* w); - void removeIcon(QWidget* w); - void place(QWidget*); - - QWorkspaceChild* findChild(QWidget* w); - void showMaximizeControls(); - void hideMaximizeControls(); - void activateWindow(QWidget* w, bool change_focus = true); - void hideChild(QWorkspaceChild *c); - void showWindow(QWidget* w); - void maximizeWindow(QWidget* w); - void minimizeWindow(QWidget* w); - void normalizeWindow(QWidget* w); - - QRect updateWorkspace(); - -private: - void _q_normalizeActiveWindow(); - void _q_minimizeActiveWindow(); - void _q_showOperationMenu(); - void _q_popupOperationMenu(const QPoint&); - void _q_operationMenuActivated(QAction *); - void _q_scrollBarChanged(); - void _q_updateActions(); - bool inTitleChange; -}; - -static bool isChildOf(QWidget * child, QWidget * parent) -{ - if (!parent || !child) - return false; - QWidget * w = child; - while(w && w != parent) - w = w->parentWidget(); - return w != 0; -} - -/*! - Constructs a workspace with the given \a parent. -*/ -QWorkspace::QWorkspace(QWidget *parent) - : QWidget(*new QWorkspacePrivate, parent, 0) -{ - Q_D(QWorkspace); - d->init(); -} - - -/*! - \internal -*/ -void -QWorkspacePrivate::init() -{ - Q_Q(QWorkspace); - - maxcontrols = 0; - active = 0; - maxWindow = 0; - maxtools = 0; - px = 0; - py = 0; - becomeActive = 0; - popup = new QMenu(q); - toolPopup = new QMenu(q); - popup->setObjectName(QLatin1String("qt_internal_mdi_popup")); - toolPopup->setObjectName(QLatin1String("qt_internal_mdi_tool_popup")); - - actions[QWorkspacePrivate::RestoreAct] = new QAction(QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarNormalButton, 0, q)), - QWorkspace::tr("&Restore"), q); - actions[QWorkspacePrivate::MoveAct] = new QAction(QWorkspace::tr("&Move"), q); - actions[QWorkspacePrivate::ResizeAct] = new QAction(QWorkspace::tr("&Size"), q); - actions[QWorkspacePrivate::MinimizeAct] = new QAction(QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarMinButton, 0, q)), - QWorkspace::tr("Mi&nimize"), q); - actions[QWorkspacePrivate::MaximizeAct] = new QAction(QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarMaxButton, 0, q)), - QWorkspace::tr("Ma&ximize"), q); - actions[QWorkspacePrivate::CloseAct] = new QAction(QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarCloseButton, 0, q)), - QWorkspace::tr("&Close") -#ifndef QT_NO_SHORTCUT - + QLatin1Char('\t') - + QKeySequence(Qt::CTRL+Qt::Key_F4).toString(QKeySequence::NativeText) -#endif - ,q); - QObject::connect(actions[QWorkspacePrivate::CloseAct], SIGNAL(triggered()), q, SLOT(closeActiveWindow())); - actions[QWorkspacePrivate::StaysOnTopAct] = new QAction(QWorkspace::tr("Stay on &Top"), q); - actions[QWorkspacePrivate::StaysOnTopAct]->setChecked(true); - actions[QWorkspacePrivate::ShadeAct] = new QAction(QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarShadeButton, 0, q)), - QWorkspace::tr("Sh&ade"), q); - - QObject::connect(popup, SIGNAL(aboutToShow()), q, SLOT(_q_updateActions())); - QObject::connect(popup, SIGNAL(triggered(QAction*)), q, SLOT(_q_operationMenuActivated(QAction*))); - popup->addAction(actions[QWorkspacePrivate::RestoreAct]); - popup->addAction(actions[QWorkspacePrivate::MoveAct]); - popup->addAction(actions[QWorkspacePrivate::ResizeAct]); - popup->addAction(actions[QWorkspacePrivate::MinimizeAct]); - popup->addAction(actions[QWorkspacePrivate::MaximizeAct]); - popup->addSeparator(); - popup->addAction(actions[QWorkspacePrivate::CloseAct]); - - QObject::connect(toolPopup, SIGNAL(aboutToShow()), q, SLOT(_q_updateActions())); - QObject::connect(toolPopup, SIGNAL(triggered(QAction*)), q, SLOT(_q_operationMenuActivated(QAction*))); - toolPopup->addAction(actions[QWorkspacePrivate::MoveAct]); - toolPopup->addAction(actions[QWorkspacePrivate::ResizeAct]); - toolPopup->addAction(actions[QWorkspacePrivate::StaysOnTopAct]); - toolPopup->addSeparator(); - toolPopup->addAction(actions[QWorkspacePrivate::ShadeAct]); - toolPopup->addAction(actions[QWorkspacePrivate::CloseAct]); - -#ifndef QT_NO_SHORTCUT - // Set up shortcut bindings (id -> slot), most used first - QList shortcuts = QKeySequence::keyBindings(QKeySequence::NextChild); - foreach (const QKeySequence &seq, shortcuts) - shortcutMap.insert(q->grabShortcut(seq), "activateNextWindow"); - - shortcuts = QKeySequence::keyBindings(QKeySequence::PreviousChild); - foreach (const QKeySequence &seq, shortcuts) - shortcutMap.insert(q->grabShortcut(seq), "activatePreviousWindow"); - - shortcuts = QKeySequence::keyBindings(QKeySequence::Close); - foreach (const QKeySequence &seq, shortcuts) - shortcutMap.insert(q->grabShortcut(seq), "closeActiveWindow"); - - shortcutMap.insert(q->grabShortcut(QKeySequence(QLatin1String("ALT+-"))), "_q_showOperationMenu"); -#endif // QT_NO_SHORTCUT - - q->setBackgroundRole(QPalette::Dark); - q->setAutoFillBackground(true); - q->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - - hbar = vbar = 0; - corner = 0; - xoffset = yoffset = 0; - - q->window()->installEventFilter(q); - - inTitleChange = false; - updateWorkspace(); -} - -/*! - Destroys the workspace and frees any allocated resources. -*/ - -QWorkspace::~QWorkspace() -{ -} - -/*! \reimp */ -QSize QWorkspace::sizeHint() const -{ - QSize s(QApplication::desktop()->size()); - return QSize(s.width()*2/3, s.height()*2/3); -} - - - -/*! - \property QWorkspace::background - \brief the workspace's background -*/ -QBrush QWorkspace::background() const -{ - Q_D(const QWorkspace); - if (d->background.style() == Qt::NoBrush) - return palette().dark(); - return d->background; -} - -void QWorkspace::setBackground(const QBrush &background) -{ - Q_D(QWorkspace); - d->background = background; - setAttribute(Qt::WA_OpaquePaintEvent, background.style() == Qt::NoBrush); - update(); -} - -/*! - Adds widget \a w as new sub window to the workspace. If \a flags - are non-zero, they will override the flags set on the widget. - - Returns the widget used for the window frame. - - To remove the widget \a w from the workspace, simply call - setParent() with the new parent (or 0 to make it a stand-alone - window). -*/ -QWidget * QWorkspace::addWindow(QWidget *w, Qt::WindowFlags flags) -{ - Q_D(QWorkspace); - if (!w) - return 0; - - w->setAutoFillBackground(true); - - QWidgetPrivate::adjustFlags(flags); - -#if 0 - bool wasMaximized = w->isMaximized(); - bool wasMinimized = w->isMinimized(); -#endif - bool hasSize = w->testAttribute(Qt::WA_Resized); - int x = w->x(); - int y = w->y(); - bool hasPos = w->testAttribute(Qt::WA_Moved); - if (!hasSize && w->sizeHint().isValid()) - w->adjustSize(); - - QWorkspaceChild* child = new QWorkspaceChild(w, this, flags); - child->setObjectName(QLatin1String("qt_workspacechild")); - child->installEventFilter(this); - - connect(child, SIGNAL(popupOperationMenu(QPoint)), - this, SLOT(_q_popupOperationMenu(QPoint))); - connect(child, SIGNAL(showOperationMenu()), - this, SLOT(_q_showOperationMenu())); - d->windows.append(child); - if (child->isVisibleTo(this)) - d->focus.append(child); - child->internalRaise(); - - if (!hasPos) - d->place(child); - if (!hasSize) - child->adjustSize(); - if (hasPos) - child->move(x, y); - - return child; - -#if 0 - if (wasMaximized) - w->showMaximized(); - else if (wasMinimized) - w->showMinimized(); - else if (!hasBeenHidden) - d->activateWindow(w); - - d->updateWorkspace(); - return child; -#endif -} - -/*! \reimp */ -void QWorkspace::childEvent(QChildEvent * e) -{ - Q_D(QWorkspace); - if (e->removed()) { - if (d->windows.removeAll(static_cast(e->child()))) { - d->focus.removeAll(static_cast(e->child())); - if (d->maxWindow == e->child()) - d->maxWindow = 0; - d->updateWorkspace(); - } - } -} - -/*! \reimp */ -#ifndef QT_NO_WHEELEVENT -void QWorkspace::wheelEvent(QWheelEvent *e) -{ - Q_D(QWorkspace); - if (!scrollBarsEnabled()) - return; - // the scroll bars are children of the workspace, so if we receive - // a wheel event we redirect to the scroll bars using a direct event - // call, /not/ using sendEvent() because if the scroll bar ignores the - // event QApplication::sendEvent() will propagate the event to the parent widget, - // which is us, who /just/ sent it. - if (d->vbar && d->vbar->isVisible() && !(e->modifiers() & Qt::AltModifier)) - d->vbar->event(e); - else if (d->hbar && d->hbar->isVisible()) - d->hbar->event(e); -} -#endif - -void QWorkspacePrivate::activateWindow(QWidget* w, bool change_focus) -{ - Q_Q(QWorkspace); - if (!w) { - active = 0; - emit q->windowActivated(0); - return; - } - if (!q->isVisible()) { - becomeActive = w; - return; - } - - if (active && active->windowWidget() == w) { - if (!isChildOf(q->focusWidget(), w)) // child window does not have focus - active->setActive(true); - return; - } - - active = 0; - // First deactivate all other workspace clients - QList::Iterator it(windows.begin()); - while (it != windows.end()) { - QWorkspaceChild* c = *it; - ++it; - if (c->windowWidget() == w) - active = c; - else - c->setActive(false); - } - - if (!active) - return; - - // Then activate the new one, so the focus is stored correctly - active->setActive(true); - - if (!active) - return; - - if (maxWindow && maxWindow != active && active->windowWidget() && - (active->windowWidget()->windowFlags() & Qt::WindowMaximizeButtonHint)) - active->showMaximized(); - - active->internalRaise(); - - if (change_focus) { - int from = focus.indexOf(active); - if (from >= 0) - focus.move(from, focus.size() - 1); - } - - updateWorkspace(); - emit q->windowActivated(w); -} - - -/*! - Returns a pointer to the widget corresponding to the active child - window, or 0 if no window is active. - - \sa setActiveWindow() -*/ -QWidget* QWorkspace::activeWindow() const -{ - Q_D(const QWorkspace); - return d->active? d->active->windowWidget() : 0; -} - -/*! - Makes the child window that contains \a w the active child window. - - \sa activeWindow() -*/ -void QWorkspace::setActiveWindow(QWidget *w) -{ - Q_D(QWorkspace); - d->activateWindow(w, true); - if (w && w->isMinimized()) - w->setWindowState(w->windowState() & ~Qt::WindowMinimized); -} - -void QWorkspacePrivate::place(QWidget *w) -{ - Q_Q(QWorkspace); - - QList widgets; - for (QList::Iterator it(windows.begin()); it != windows.end(); ++it) - if (*it != w) - widgets.append(*it); - - int overlap, minOverlap = 0; - int possible; - - QRect r1(0, 0, 0, 0); - QRect r2(0, 0, 0, 0); - QRect maxRect = q->rect(); - int x = maxRect.left(), y = maxRect.top(); - QPoint wpos(maxRect.left(), maxRect.top()); - - bool firstPass = true; - - do { - if (y + w->height() > maxRect.bottom()) { - overlap = -1; - } else if(x + w->width() > maxRect.right()) { - overlap = -2; - } else { - overlap = 0; - - r1.setRect(x, y, w->width(), w->height()); - - QWidget *l; - QList::Iterator it(widgets.begin()); - while (it != widgets.end()) { - l = *it; - ++it; - - if (maxWindow == l) - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, maxRestore); - else - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, - QRect(l->x(), l->y(), l->width(), l->height())); - - if (r2.intersects(r1)) { - r2.setCoords(qMax(r1.left(), r2.left()), - qMax(r1.top(), r2.top()), - qMin(r1.right(), r2.right()), - qMin(r1.bottom(), r2.bottom()) - ); - - overlap += (r2.right() - r2.left()) * - (r2.bottom() - r2.top()); - } - } - } - - if (overlap == 0) { - wpos = QPoint(x, y); - break; - } - - if (firstPass) { - firstPass = false; - minOverlap = overlap; - } else if (overlap >= 0 && overlap < minOverlap) { - minOverlap = overlap; - wpos = QPoint(x, y); - } - - if (overlap > 0) { - possible = maxRect.right(); - if (possible - w->width() > x) possible -= w->width(); - - QWidget *l; - QList::Iterator it(widgets.begin()); - while (it != widgets.end()) { - l = *it; - ++it; - if (maxWindow == l) - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, maxRestore); - else - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, - QRect(l->x(), l->y(), l->width(), l->height())); - - if((y < r2.bottom()) && (r2.top() < w->height() + y)) { - if(r2.right() > x) - possible = possible < r2.right() ? - possible : r2.right(); - - if(r2.left() - w->width() > x) - possible = possible < r2.left() - w->width() ? - possible : r2.left() - w->width(); - } - } - - x = possible; - } else if (overlap == -2) { - x = maxRect.left(); - possible = maxRect.bottom(); - - if (possible - w->height() > y) possible -= w->height(); - - QWidget *l; - QList::Iterator it(widgets.begin()); - while (it != widgets.end()) { - l = *it; - ++it; - if (maxWindow == l) - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, maxRestore); - else - r2 = QStyle::visualRect(q->layoutDirection(), maxRect, - QRect(l->x(), l->y(), l->width(), l->height())); - - if(r2.bottom() > y) - possible = possible < r2.bottom() ? - possible : r2.bottom(); - - if(r2.top() - w->height() > y) - possible = possible < r2.top() - w->height() ? - possible : r2.top() - w->height(); - } - - y = possible; - } - } - while(overlap != 0 && overlap != -1); - - QRect resultRect = w->geometry(); - resultRect.moveTo(wpos); - w->setGeometry(QStyle::visualRect(q->layoutDirection(), maxRect, resultRect)); - updateWorkspace(); -} - - -void QWorkspacePrivate::insertIcon(QWidget* w) -{ - Q_Q(QWorkspace); - if (!w || icons.contains(w)) - return; - icons.append(w); - if (w->parentWidget() != q) { - w->setParent(q, 0); - w->move(0,0); - } - QRect cr = updateWorkspace(); - int x = 0; - int y = cr.height() - w->height(); - - QList::Iterator it(icons.begin()); - while (it != icons.end()) { - QWidget* i = *it; - ++it; - if (x > 0 && x + i->width() > cr.width()){ - x = 0; - y -= i->height(); - } - - if (i != w && - i->geometry().intersects(QRect(x, y, w->width(), w->height()))) - x += i->width(); - } - w->move(x, y); - - if (q->isVisibleTo(q->parentWidget())) { - w->show(); - w->lower(); - } - updateWorkspace(); -} - - -void QWorkspacePrivate::removeIcon(QWidget* w) -{ - if (icons.removeAll(w)) - w->hide(); -} - - -/*! \reimp */ -void QWorkspace::resizeEvent(QResizeEvent *) -{ - Q_D(QWorkspace); - if (d->maxWindow) { - d->maxWindow->adjustToFullscreen(); - if (d->maxWindow->windowWidget()) - d->maxWindow->windowWidget()->overrideWindowState(Qt::WindowMaximized); - } - d->updateWorkspace(); -} - -/*! \reimp */ -void QWorkspace::showEvent(QShowEvent *e) -{ - Q_D(QWorkspace); - if (d->maxWindow) - d->showMaximizeControls(); - QWidget::showEvent(e); - if (d->becomeActive) { - d->activateWindow(d->becomeActive); - d->becomeActive = 0; - } else if (d->windows.count() > 0 && !d->active) { - d->activateWindow(d->windows.first()->windowWidget()); - } - -// // force a frame repaint - this is a workaround for what seems to be a bug -// // introduced when changing the QWidget::show() implementation. Might be -// // a windows bug as well though. -// for (int i = 0; i < d->windows.count(); ++i) { -// QWorkspaceChild* c = d->windows.at(i); -// c->update(c->rect()); -// } - - d->updateWorkspace(); -} - -/*! \reimp */ -void QWorkspace::hideEvent(QHideEvent *) -{ - Q_D(QWorkspace); - if (!isVisible()) - d->hideMaximizeControls(); -} - -/*! \reimp */ -void QWorkspace::paintEvent(QPaintEvent *) -{ - Q_D(QWorkspace); - - if (d->background.style() != Qt::NoBrush) { - QPainter p(this); - p.fillRect(0, 0, width(), height(), d->background); - } -} - -void QWorkspacePrivate::minimizeWindow(QWidget* w) -{ - QWorkspaceChild* c = findChild(w); - - if (!w || !(w->windowFlags() & Qt::WindowMinimizeButtonHint)) - return; - - if (c) { - bool wasMax = false; - if (c == maxWindow) { - wasMax = true; - maxWindow = 0; - hideMaximizeControls(); - for (QList::Iterator it(windows.begin()); it != windows.end(); ++it) { - QWorkspaceChild* c = *it; - if (c->titlebar) - c->titlebar->setMovable(true); - c->widgetResizeHandler->setActive(true); - } - } - c->hide(); - if (wasMax) - c->setGeometry(maxRestore); - if (!focus.contains(c)) - focus.append(c); - insertIcon(c->iconWidget()); - - if (!maxWindow) - activateWindow(w); - - updateWorkspace(); - - w->overrideWindowState(Qt::WindowMinimized); - c->overrideWindowState(Qt::WindowMinimized); - } -} - -void QWorkspacePrivate::normalizeWindow(QWidget* w) -{ - Q_Q(QWorkspace); - QWorkspaceChild* c = findChild(w); - if (!w) - return; - if (c) { - w->overrideWindowState(Qt::WindowNoState); - hideMaximizeControls(); - if (!maxmenubar || q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q) || !maxWindow) { - if (w->minimumSize() != w->maximumSize()) - c->widgetResizeHandler->setActive(true); - if (c->titlebar) - c->titlebar->setMovable(true); - } - w->overrideWindowState(Qt::WindowNoState); - c->overrideWindowState(Qt::WindowNoState); - - if (c == maxWindow) { - c->setGeometry(maxRestore); - maxWindow = 0; - } else { - if (c->iconw) - removeIcon(c->iconw->parentWidget()); - c->show(); - } - - hideMaximizeControls(); - for (QList::Iterator it(windows.begin()); it != windows.end(); ++it) { - QWorkspaceChild* c = *it; - if (c->titlebar) - c->titlebar->setMovable(true); - if (c->childWidget && c->childWidget->minimumSize() != c->childWidget->maximumSize()) - c->widgetResizeHandler->setActive(true); - } - activateWindow(w, true); - updateWorkspace(); - } -} - -void QWorkspacePrivate::maximizeWindow(QWidget* w) -{ - Q_Q(QWorkspace); - QWorkspaceChild* c = findChild(w); - - if (!w || !(w->windowFlags() & Qt::WindowMaximizeButtonHint)) - return; - - if (!c || c == maxWindow) - return; - - bool updatesEnabled = q->updatesEnabled(); - q->setUpdatesEnabled(false); - - if (c->iconw && icons.contains(c->iconw->parentWidget())) - normalizeWindow(w); - QRect r(c->geometry()); - QWorkspaceChild *oldMaxWindow = maxWindow; - maxWindow = c; - - showMaximizeControls(); - - c->adjustToFullscreen(); - c->show(); - c->internalRaise(); - if (oldMaxWindow != c) { - if (oldMaxWindow) { - oldMaxWindow->setGeometry(maxRestore); - oldMaxWindow->overrideWindowState(Qt::WindowNoState); - if(oldMaxWindow->windowWidget()) - oldMaxWindow->windowWidget()->overrideWindowState(Qt::WindowNoState); - } - maxRestore = r; - } - - activateWindow(w); - - if(!maxmenubar || q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q)) { - if (!active && becomeActive) { - active = (QWorkspaceChild*)becomeActive->parentWidget(); - active->setActive(true); - becomeActive = 0; - emit q->windowActivated(active->windowWidget()); - } - c->widgetResizeHandler->setActive(false); - if (c->titlebar) - c->titlebar->setMovable(false); - } - updateWorkspace(); - - w->overrideWindowState(Qt::WindowMaximized); - c->overrideWindowState(Qt::WindowMaximized); - q->setUpdatesEnabled(updatesEnabled); -} - -void QWorkspacePrivate::showWindow(QWidget* w) -{ - if (w->isMinimized() && (w->windowFlags() & Qt::WindowMinimizeButtonHint)) - minimizeWindow(w); - else if ((maxWindow || w->isMaximized()) && w->windowFlags() & Qt::WindowMaximizeButtonHint) - maximizeWindow(w); - else if (w->windowFlags() & Qt::WindowMaximizeButtonHint) - normalizeWindow(w); - else - w->parentWidget()->show(); - if (maxWindow) - maxWindow->internalRaise(); - updateWorkspace(); -} - - -QWorkspaceChild* QWorkspacePrivate::findChild(QWidget* w) -{ - QList::Iterator it(windows.begin()); - while (it != windows.end()) { - QWorkspaceChild* c = *it; - ++it; - if (c->windowWidget() == w) - return c; - } - return 0; -} - -/*! - Returns a list of all visible or minimized child windows. If \a - order is CreationOrder (the default), the windows are listed in - the order in which they were inserted into the workspace. If \a - order is StackingOrder, the windows are listed in their stacking - order, with the topmost window as the last item in the list. -*/ -QWidgetList QWorkspace::windowList(WindowOrder order) const -{ - Q_D(const QWorkspace); - QWidgetList windows; - if (order == StackingOrder) { - QObjectList cl = children(); - for (int i = 0; i < cl.size(); ++i) { - QWorkspaceChild *c = qobject_cast(cl.at(i)); - if (c && c->isWindowOrIconVisible()) - windows.append(c->windowWidget()); - } - } else { - QList::ConstIterator it(d->windows.begin()); - while (it != d->windows.end()) { - QWorkspaceChild* c = *it; - ++it; - if (c && c->isWindowOrIconVisible()) - windows.append(c->windowWidget()); - } - } - return windows; -} - - -/*! \reimp */ -bool QWorkspace::event(QEvent *e) -{ -#ifndef QT_NO_SHORTCUT - Q_D(QWorkspace); - if (e->type() == QEvent::Shortcut) { - QShortcutEvent *se = static_cast(e); - const char *theSlot = d->shortcutMap.value(se->shortcutId(), 0); - if (theSlot) - QMetaObject::invokeMethod(this, theSlot); - } else -#endif - if (e->type() == QEvent::FocusIn || e->type() == QEvent::FocusOut){ - return true; - } - return QWidget::event(e); -} - -/*! \reimp */ -bool QWorkspace::eventFilter(QObject *o, QEvent * e) -{ - Q_D(QWorkspace); - static QElapsedTimer* t = 0; - static QWorkspace* tc = 0; - if (o == d->maxtools) { - switch (e->type()) { - case QEvent::MouseButtonPress: - { - QMenuBar* b = (QMenuBar*)o->parent(); - if (!t) - t = new QElapsedTimer; - if (tc != this || t->elapsed() > QApplication::doubleClickInterval()) { - if (isRightToLeft()) { - QPoint p = b->mapToGlobal(QPoint(b->x() + b->width(), b->y() + b->height())); - p.rx() -= d->popup->sizeHint().width(); - d->_q_popupOperationMenu(p); - } else { - d->_q_popupOperationMenu(b->mapToGlobal(QPoint(b->x(), b->y() + b->height()))); - } - t->start(); - tc = this; - } else { - tc = 0; - closeActiveWindow(); - } - return true; - } - default: - break; - } - return QWidget::eventFilter(o, e); - } - switch (e->type()) { - case QEvent::HideToParent: - break; - case QEvent::ShowToParent: - if (QWorkspaceChild *c = qobject_cast(o)) - if (!d->focus.contains(c)) - d->focus.append(c); - d->updateWorkspace(); - break; - case QEvent::WindowTitleChange: - if (!d->inTitleChange) { - if (o == window()) - d->topTitle = window()->windowTitle(); - if (d->maxWindow && d->maxWindow->windowWidget() && d->topTitle.size()) { - d->inTitleChange = true; - window()->setWindowTitle(tr("%1 - [%2]") - .arg(d->topTitle).arg(d->maxWindow->windowWidget()->windowTitle())); - d->inTitleChange = false; - } - } - break; - - case QEvent::ModifiedChange: - if (o == d->maxWindow) - window()->setWindowModified(d->maxWindow->isWindowModified()); - break; - - case QEvent::Close: - if (o == window()) - { - QList::Iterator it(d->windows.begin()); - while (it != d->windows.end()) { - QWorkspaceChild* c = *it; - ++it; - if (c->shademode) - c->showShaded(); - } - } else if (qobject_cast(o)) { - d->popup->hide(); - } - d->updateWorkspace(); - break; - default: - break; - } - return QWidget::eventFilter(o, e); -} - -static QMenuBar *findMenuBar(QWidget *w) -{ - // don't search recursively to avoid finding a menu bar of a - // mainwindow that happens to be a workspace window (like - // a mainwindow in designer) - QList children = w->children(); - for (int i = 0; i < children.count(); ++i) { - QMenuBar *bar = qobject_cast(children.at(i)); - if (bar) - return bar; - } - return 0; -} - -void QWorkspacePrivate::showMaximizeControls() -{ - Q_Q(QWorkspace); - Q_ASSERT(maxWindow); - - // merge windowtitle and modified state - if (!topTitle.size()) - topTitle = q->window()->windowTitle(); - - if (maxWindow->windowWidget()) { - QString docTitle = maxWindow->windowWidget()->windowTitle(); - if (topTitle.size() && docTitle.size()) { - inTitleChange = true; - q->window()->setWindowTitle(QWorkspace::tr("%1 - [%2]").arg(topTitle).arg(docTitle)); - inTitleChange = false; - } - q->window()->setWindowModified(maxWindow->windowWidget()->isWindowModified()); - } - - if (!q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q)) { - QMenuBar* b = 0; - - // Do a breadth-first search first on every parent, - QWidget* w = q->parentWidget(); - while (w) { - b = findMenuBar(w); - if (b) - break; - w = w->parentWidget(); - } - - // last attempt. - if (!b) - b = findMenuBar(q->window()); - - if (!b) - return; - - if (!maxcontrols) { - maxmenubar = b; - maxcontrols = new QMDIControl(b); - QObject::connect(maxcontrols, SIGNAL(_q_minimize()), - q, SLOT(_q_minimizeActiveWindow())); - QObject::connect(maxcontrols, SIGNAL(_q_restore()), - q, SLOT(_q_normalizeActiveWindow())); - QObject::connect(maxcontrols, SIGNAL(_q_close()), - q, SLOT(closeActiveWindow())); - } - - b->setCornerWidget(maxcontrols); - if (b->isVisible()) - maxcontrols->show(); - if (!active && becomeActive) { - active = (QWorkspaceChild*)becomeActive->parentWidget(); - active->setActive(true); - becomeActive = 0; - emit q->windowActivated(active->windowWidget()); - } - if (active) { - if (!maxtools) { - maxtools = new QLabel(q->window()); - maxtools->setObjectName(QLatin1String("qt_maxtools")); - maxtools->installEventFilter(q); - } - if (active->windowWidget() && !active->windowWidget()->windowIcon().isNull()) { - QIcon icon = active->windowWidget()->windowIcon(); - int iconSize = maxcontrols->size().height(); - maxtools->setPixmap(icon.pixmap(QSize(iconSize, iconSize))); - } else { - QPixmap pm = q->style()->standardPixmap(QStyle::SP_TitleBarMenuButton, 0, q); - if (pm.isNull()) { - pm = QPixmap(14,14); - pm.fill(Qt::black); - } - maxtools->setPixmap(pm); - } - b->setCornerWidget(maxtools, Qt::TopLeftCorner); - if (b->isVisible()) - maxtools->show(); - } - } -} - - -void QWorkspacePrivate::hideMaximizeControls() -{ - Q_Q(QWorkspace); - if (maxmenubar && !q->style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, q)) { - if (maxmenubar) { - maxmenubar->setCornerWidget(0, Qt::TopLeftCorner); - maxmenubar->setCornerWidget(0, Qt::TopRightCorner); - } - if (maxcontrols) { - maxcontrols->deleteLater(); - maxcontrols = 0; - } - if (maxtools) { - maxtools->deleteLater(); - maxtools = 0; - } - } - - //unmerge the title bar/modification state - if (topTitle.size()) { - inTitleChange = true; - q->window()->setWindowTitle(topTitle); - inTitleChange = false; - } - q->window()->setWindowModified(false); -} - -/*! - Closes the child window that is currently active. - - \sa closeAllWindows() -*/ -void QWorkspace::closeActiveWindow() -{ - Q_D(QWorkspace); - if (d->maxWindow && d->maxWindow->windowWidget()) - d->maxWindow->windowWidget()->close(); - else if (d->active && d->active->windowWidget()) - d->active->windowWidget()->close(); - d->updateWorkspace(); -} - -/*! - Closes all child windows. - - If any child window fails to accept the close event, the remaining windows - will remain open. - - \sa closeActiveWindow() -*/ -void QWorkspace::closeAllWindows() -{ - Q_D(QWorkspace); - bool did_close = true; - QList::const_iterator it = d->windows.constBegin(); - while (it != d->windows.constEnd() && did_close) { - QWorkspaceChild *c = *it; - ++it; - if (c->windowWidget() && !c->windowWidget()->isHidden()) - did_close = c->windowWidget()->close(); - } -} - -void QWorkspacePrivate::_q_normalizeActiveWindow() -{ - if (maxWindow) - maxWindow->showNormal(); - else if (active) - active->showNormal(); -} - -void QWorkspacePrivate::_q_minimizeActiveWindow() -{ - if (maxWindow) - maxWindow->showMinimized(); - else if (active) - active->showMinimized(); -} - -void QWorkspacePrivate::_q_showOperationMenu() -{ - Q_Q(QWorkspace); - if (!active || !active->windowWidget()) - return; - Q_ASSERT((active->windowWidget()->windowFlags() & Qt::WindowSystemMenuHint)); - QPoint p; - QMenu *popup = (active->titlebar && active->titlebar->isTool()) ? toolPopup : this->popup; - if (q->isRightToLeft()) { - p = QPoint(active->windowWidget()->mapToGlobal(QPoint(active->windowWidget()->width(),0))); - p.rx() -= popup->sizeHint().width(); - } else { - p = QPoint(active->windowWidget()->mapToGlobal(QPoint(0,0))); - } - if (!active->isVisible()) { - p = active->iconWidget()->mapToGlobal(QPoint(0,0)); - p.ry() -= popup->sizeHint().height(); - } - _q_popupOperationMenu(p); -} - -void QWorkspacePrivate::_q_popupOperationMenu(const QPoint& p) -{ - if (!active || !active->windowWidget() || !(active->windowWidget()->windowFlags() & Qt::WindowSystemMenuHint)) - return; - if (active->titlebar && active->titlebar->isTool()) - toolPopup->popup(p); - else - popup->popup(p); -} - -void QWorkspacePrivate::_q_updateActions() -{ - Q_Q(QWorkspace); - for (int i = 1; i < NCountAct-1; i++) { - bool enable = active != 0; - actions[i]->setEnabled(enable); - } - - if (!active || !active->windowWidget()) - return; - - QWidget *windowWidget = active->windowWidget(); - bool canResize = windowWidget->maximumSize() != windowWidget->minimumSize(); - actions[QWorkspacePrivate::ResizeAct]->setEnabled(canResize); - actions[QWorkspacePrivate::MinimizeAct]->setEnabled((windowWidget->windowFlags() & Qt::WindowMinimizeButtonHint)); - actions[QWorkspacePrivate::MaximizeAct]->setEnabled((windowWidget->windowFlags() & Qt::WindowMaximizeButtonHint) && canResize); - - if (active == maxWindow) { - actions[QWorkspacePrivate::MoveAct]->setEnabled(false); - actions[QWorkspacePrivate::ResizeAct]->setEnabled(false); - actions[QWorkspacePrivate::MaximizeAct]->setEnabled(false); - actions[QWorkspacePrivate::RestoreAct]->setEnabled(true); - } else if (active->isVisible()){ - actions[QWorkspacePrivate::RestoreAct]->setEnabled(false); - } else { - actions[QWorkspacePrivate::MoveAct]->setEnabled(false); - actions[QWorkspacePrivate::ResizeAct]->setEnabled(false); - actions[QWorkspacePrivate::MinimizeAct]->setEnabled(false); - actions[QWorkspacePrivate::RestoreAct]->setEnabled(true); - } - if (active->shademode) { - actions[QWorkspacePrivate::ShadeAct]->setIcon( - QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarUnshadeButton, 0, q))); - actions[QWorkspacePrivate::ShadeAct]->setText(QWorkspace::tr("&Unshade")); - } else { - actions[QWorkspacePrivate::ShadeAct]->setIcon( - QIcon(q->style()->standardPixmap(QStyle::SP_TitleBarShadeButton, 0, q))); - actions[QWorkspacePrivate::ShadeAct]->setText(QWorkspace::tr("Sh&ade")); - } - actions[QWorkspacePrivate::StaysOnTopAct]->setEnabled(!active->shademode && canResize); - actions[QWorkspacePrivate::StaysOnTopAct]->setChecked( - (active->windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint)); -} - -void QWorkspacePrivate::_q_operationMenuActivated(QAction *action) -{ - if (!active) - return; - if(action == actions[QWorkspacePrivate::RestoreAct]) { - active->showNormal(); - } else if(action == actions[QWorkspacePrivate::MoveAct]) { - active->doMove(); - } else if(action == actions[QWorkspacePrivate::ResizeAct]) { - if (active->shademode) - active->showShaded(); - active->doResize(); - } else if(action == actions[QWorkspacePrivate::MinimizeAct]) { - active->showMinimized(); - } else if(action == actions[QWorkspacePrivate::MaximizeAct]) { - active->showMaximized(); - } else if(action == actions[QWorkspacePrivate::ShadeAct]) { - active->showShaded(); - } else if(action == actions[QWorkspacePrivate::StaysOnTopAct]) { - if(QWidget* w = active->windowWidget()) { - if ((w->windowFlags() & Qt::WindowStaysOnTopHint)) { - w->overrideWindowFlags(w->windowFlags() & ~Qt::WindowStaysOnTopHint); - } else { - w->overrideWindowFlags(w->windowFlags() | Qt::WindowStaysOnTopHint); - w->parentWidget()->raise(); - } - } - } -} - - -void QWorkspacePrivate::hideChild(QWorkspaceChild *c) -{ - Q_Q(QWorkspace); - -// bool updatesEnabled = q->updatesEnabled(); -// q->setUpdatesEnabled(false); - focus.removeAll(c); - QRect restore; - if (maxWindow == c) - restore = maxRestore; - if (active == c) { - q->setFocus(); - q->activatePreviousWindow(); - } - if (active == c) - activateWindow(0); - if (maxWindow == c) { - hideMaximizeControls(); - maxWindow = 0; - } - c->hide(); - if (!restore.isEmpty()) - c->setGeometry(restore); -// q->setUpdatesEnabled(updatesEnabled); -} - -/*! - Gives the input focus to the next window in the list of child - windows. - - \sa activatePreviousWindow() -*/ -void QWorkspace::activateNextWindow() -{ - Q_D(QWorkspace); - - if (d->focus.isEmpty()) - return; - if (!d->active) { - if (d->focus.first()) - d->activateWindow(d->focus.first()->windowWidget(), false); - return; - } - - int a = d->focus.indexOf(d->active) + 1; - - a = a % d->focus.count(); - - if (d->focus.at(a)) - d->activateWindow(d->focus.at(a)->windowWidget(), false); - else - d->activateWindow(0); -} - -/*! - Gives the input focus to the previous window in the list of child - windows. - - \sa activateNextWindow() -*/ -void QWorkspace::activatePreviousWindow() -{ - Q_D(QWorkspace); - - if (d->focus.isEmpty()) - return; - if (!d->active) { - if (d->focus.last()) - d->activateWindow(d->focus.first()->windowWidget(), false); - else - d->activateWindow(0); - return; - } - - int a = d->focus.indexOf(d->active) - 1; - if (a < 0) - a = d->focus.count()-1; - - if (d->focus.at(a)) - d->activateWindow(d->focus.at(a)->windowWidget(), false); - else - d->activateWindow(0); -} - - -/*! - \fn void QWorkspace::windowActivated(QWidget* w) - - This signal is emitted when the child window \a w becomes active. - Note that \a w can be 0, and that more than one signal may be - emitted for a single activation event. - - \sa activeWindow(), windowList() -*/ - -/*! - Arranges all the child windows in a cascade pattern. - - \sa tile(), arrangeIcons() -*/ -void QWorkspace::cascade() -{ - Q_D(QWorkspace); - blockSignals(true); - if (d->maxWindow) - d->maxWindow->showNormal(); - - if (d->vbar) { - d->vbar->blockSignals(true); - d->vbar->setValue(0); - d->vbar->blockSignals(false); - d->hbar->blockSignals(true); - d->hbar->setValue(0); - d->hbar->blockSignals(false); - d->_q_scrollBarChanged(); - } - - const int xoffset = 13; - const int yoffset = 20; - - // make a list of all relevant mdi clients - QList widgets; - QList::Iterator it(d->windows.begin()); - QWorkspaceChild* wc = 0; - - for (it = d->focus.begin(); it != d->focus.end(); ++it) { - wc = *it; - if (wc->windowWidget()->isVisibleTo(this) && !(wc->titlebar && wc->titlebar->isTool())) - widgets.append(wc); - } - - int x = 0; - int y = 0; - - it = widgets.begin(); - while (it != widgets.end()) { - QWorkspaceChild *child = *it; - ++it; - - QSize prefSize = child->windowWidget()->sizeHint().expandedTo(qSmartMinSize(child->windowWidget())); - if (!prefSize.isValid()) - prefSize = child->windowWidget()->size(); - prefSize = prefSize.expandedTo(qSmartMinSize(child->windowWidget())); - if (prefSize.isValid()) - prefSize += QSize(child->baseSize().width(), child->baseSize().height()); - - int w = prefSize.width(); - int h = prefSize.height(); - - child->showNormal(); - if (y + h > height()) - y = 0; - if (x + w > width()) - x = 0; - child->setGeometry(x, y, w, h); - x += xoffset; - y += yoffset; - child->internalRaise(); - } - d->updateWorkspace(); - blockSignals(false); -} - -/*! - Arranges all child windows in a tile pattern. - - \sa cascade(), arrangeIcons() -*/ -void QWorkspace::tile() -{ - Q_D(QWorkspace); - blockSignals(true); - QWidget *oldActive = d->active ? d->active->windowWidget() : 0; - if (d->maxWindow) - d->maxWindow->showNormal(); - - if (d->vbar) { - d->vbar->blockSignals(true); - d->vbar->setValue(0); - d->vbar->blockSignals(false); - d->hbar->blockSignals(true); - d->hbar->setValue(0); - d->hbar->blockSignals(false); - d->_q_scrollBarChanged(); - } - - int rows = 1; - int cols = 1; - int n = 0; - QWorkspaceChild* c; - - QList::Iterator it(d->windows.begin()); - while (it != d->windows.end()) { - c = *it; - ++it; - if (!c->windowWidget()->isHidden() - && !(c->windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint) - && !c->iconw) - n++; - } - - while (rows * cols < n) { - if (cols <= rows) - cols++; - else - rows++; - } - int add = cols * rows - n; - bool* used = new bool[cols*rows]; - for (int i = 0; i < rows*cols; i++) - used[i] = false; - - int row = 0; - int col = 0; - int w = width() / cols; - int h = height() / rows; - - it = d->windows.begin(); - while (it != d->windows.end()) { - c = *it; - ++it; - if (c->iconw || c->windowWidget()->isHidden() || (c->titlebar && c->titlebar->isTool())) - continue; - if (!row && !col) { - w -= c->baseSize().width(); - h -= c->baseSize().height(); - } - if ((c->windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint)) { - QPoint p = c->pos(); - if (p.x()+c->width() < 0) - p.setX(0); - if (p.x() > width()) - p.setX(width() - c->width()); - if (p.y() + 10 < 0) - p.setY(0); - if (p.y() > height()) - p.setY(height() - c->height()); - - if (p != c->pos()) - c->QWidget::move(p); - } else { - c->showNormal(); - used[row*cols+col] = true; - QSize sz(w, h); - QSize bsize(c->baseSize()); - sz = sz.expandedTo(c->windowWidget()->minimumSize()).boundedTo(c->windowWidget()->maximumSize()); - sz += bsize; - - if ( add ) { - if (sz.height() == h + bsize.height()) // no relevant constrains - sz.rheight() *= 2; - used[(row+1)*cols+col] = true; - add--; - } - - c->setGeometry(col*w + col*bsize.width(), row*h + row*bsize.height(), sz.width(), sz.height()); - - while(row < rows && col < cols && used[row*cols+col]) { - col++; - if (col == cols) { - col = 0; - row++; - } - } - } - } - delete [] used; - - d->activateWindow(oldActive); - d->updateWorkspace(); - blockSignals(false); -} - -/*! - Arranges all iconified windows at the bottom of the workspace. - - \sa cascade(), tile() -*/ -void QWorkspace::arrangeIcons() -{ - Q_D(QWorkspace); - - QRect cr = d->updateWorkspace(); - int x = 0; - int y = -1; - - QList::Iterator it(d->icons.begin()); - while (it != d->icons.end()) { - QWidget* i = *it; - if (y == -1) - y = cr.height() - i->height(); - if (x > 0 && x + i->width() > cr.width()) { - x = 0; - y -= i->height(); - } - i->move(x, y); - x += i->width(); - ++it; - } - d->updateWorkspace(); -} - - -QWorkspaceChild::QWorkspaceChild(QWidget* window, QWorkspace *parent, Qt::WindowFlags flags) - : QWidget(parent, - Qt::FramelessWindowHint | Qt::SubWindow) -{ - setAttribute(Qt::WA_DeleteOnClose); - setAttribute(Qt::WA_NoMousePropagation); - setMouseTracking(true); - act = false; - iconw = 0; - shademode = false; - titlebar = 0; - setAutoFillBackground(true); - - setBackgroundRole(QPalette::Window); - if (window) { - flags |= (window->windowFlags() & Qt::MSWindowsOwnDC); - if (flags) - window->setParent(this, flags & ~Qt::WindowType_Mask); - else - window->setParent(this); - } - - if (window && (flags & (Qt::WindowTitleHint - | Qt::WindowSystemMenuHint - | Qt::WindowMinimizeButtonHint - | Qt::WindowMaximizeButtonHint - | Qt::WindowContextHelpButtonHint))) { - titlebar = new QWorkspaceTitleBar(window, this, flags); - connect(titlebar, SIGNAL(doActivate()), - this, SLOT(activate())); - connect(titlebar, SIGNAL(doClose()), - window, SLOT(close())); - connect(titlebar, SIGNAL(doMinimize()), - this, SLOT(showMinimized())); - connect(titlebar, SIGNAL(doNormal()), - this, SLOT(showNormal())); - connect(titlebar, SIGNAL(doMaximize()), - this, SLOT(showMaximized())); - connect(titlebar, SIGNAL(popupOperationMenu(QPoint)), - this, SIGNAL(popupOperationMenu(QPoint))); - connect(titlebar, SIGNAL(showOperationMenu()), - this, SIGNAL(showOperationMenu())); - connect(titlebar, SIGNAL(doShade()), - this, SLOT(showShaded())); - connect(titlebar, SIGNAL(doubleClicked()), - this, SLOT(titleBarDoubleClicked())); - } - - setMinimumSize(128, 0); - int fw = style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth, 0, this); - setContentsMargins(fw, fw, fw, fw); - - childWidget = window; - if (!childWidget) - return; - - setWindowTitle(childWidget->windowTitle()); - - QPoint p; - QSize s; - QSize cs; - - bool hasBeenResized = childWidget->testAttribute(Qt::WA_Resized); - - if (!hasBeenResized) - cs = childWidget->sizeHint().expandedTo(childWidget->minimumSizeHint()).expandedTo(childWidget->minimumSize()).boundedTo(childWidget->maximumSize()); - else - cs = childWidget->size(); - - windowSize = cs; - - int th = titlebar ? titlebar->sizeHint().height() : 0; - if (titlebar) { - if (!childWidget->windowIcon().isNull()) - titlebar->setWindowIcon(childWidget->windowIcon()); - - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - th -= contentsRect().y(); - - p = QPoint(contentsRect().x(), - th + contentsRect().y()); - s = QSize(cs.width() + 2*frameWidth(), - cs.height() + 2*frameWidth() + th); - } else { - p = QPoint(contentsRect().x(), contentsRect().y()); - s = QSize(cs.width() + 2*frameWidth(), - cs.height() + 2*frameWidth()); - } - - childWidget->move(p); - resize(s); - - childWidget->installEventFilter(this); - - widgetResizeHandler = new QWidgetResizeHandler(this, window); - widgetResizeHandler->setSizeProtection(!parent->scrollBarsEnabled()); - widgetResizeHandler->setFrameWidth(frameWidth()); - connect(widgetResizeHandler, SIGNAL(activate()), - this, SLOT(activate())); - if (!style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - widgetResizeHandler->setExtraHeight(th + contentsRect().y() - 2*frameWidth()); - else - widgetResizeHandler->setExtraHeight(th + contentsRect().y() - frameWidth()); - if (childWidget->minimumSize() == childWidget->maximumSize()) - widgetResizeHandler->setActive(QWidgetResizeHandler::Resize, false); - setBaseSize(baseSize()); -} - -QWorkspaceChild::~QWorkspaceChild() -{ - QWorkspace *workspace = qobject_cast(parentWidget()); - if (iconw) { - if (workspace) - workspace->d_func()->removeIcon(iconw->parentWidget()); - delete iconw->parentWidget(); - } - - if (workspace) { - workspace->d_func()->focus.removeAll(this); - if (workspace->d_func()->active == this) - workspace->activatePreviousWindow(); - if (workspace->d_func()->active == this) - workspace->d_func()->activateWindow(0); - if (workspace->d_func()->maxWindow == this) { - workspace->d_func()->hideMaximizeControls(); - workspace->d_func()->maxWindow = 0; - } - } -} - -void QWorkspaceChild::moveEvent(QMoveEvent *) -{ - ((QWorkspace*)parentWidget())->d_func()->updateWorkspace(); -} - -void QWorkspaceChild::resizeEvent(QResizeEvent *) -{ - bool wasMax = isMaximized(); - QRect r = contentsRect(); - QRect cr; - - updateMask(); - - if (titlebar) { - int th = titlebar->sizeHint().height(); - QRect tbrect(0, 0, width(), th); - if (!style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - tbrect = QRect(r.x(), r.y(), r.width(), th); - titlebar->setGeometry(tbrect); - - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - th -= frameWidth(); - cr = QRect(r.x(), r.y() + th + (shademode ? (frameWidth() * 3) : 0), - r.width(), r.height() - th); - } else { - cr = r; - } - - if (!childWidget) - return; - - bool doContentsResize = (windowSize == childWidget->size() - || !(childWidget->testAttribute(Qt::WA_Resized) && childWidget->testAttribute(Qt::WA_PendingResizeEvent)) - ||childWidget->isMaximized()); - - windowSize = cr.size(); - childWidget->move(cr.topLeft()); - if (doContentsResize) - childWidget->resize(cr.size()); - ((QWorkspace*)parentWidget())->d_func()->updateWorkspace(); - - if (wasMax) { - overrideWindowState(Qt::WindowMaximized); - childWidget->overrideWindowState(Qt::WindowMaximized); - } -} - -QSize QWorkspaceChild::baseSize() const -{ - int th = titlebar ? titlebar->sizeHint().height() : 0; - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - th -= frameWidth(); - return QSize(2*frameWidth(), 2*frameWidth() + th); -} - -QSize QWorkspaceChild::sizeHint() const -{ - if (!childWidget) - return QWidget::sizeHint() + baseSize(); - - QSize prefSize = windowWidget()->sizeHint().expandedTo(windowWidget()->minimumSizeHint()); - prefSize = prefSize.expandedTo(windowWidget()->minimumSize()).boundedTo(windowWidget()->maximumSize()); - prefSize += baseSize(); - - return prefSize; -} - -QSize QWorkspaceChild::minimumSizeHint() const -{ - if (!childWidget) - return QWidget::minimumSizeHint() + baseSize(); - QSize s = childWidget->minimumSize(); - if (s.isEmpty()) - s = childWidget->minimumSizeHint(); - return s + baseSize(); -} - -void QWorkspaceChild::activate() -{ - ((QWorkspace*)parentWidget())->d_func()->activateWindow(windowWidget()); -} - -bool QWorkspaceChild::eventFilter(QObject * o, QEvent * e) -{ - if (!isActive() - && (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::FocusIn)) { - if (iconw) { - ((QWorkspace*)parentWidget())->d_func()->normalizeWindow(windowWidget()); - if (iconw) { - ((QWorkspace*)parentWidget())->d_func()->removeIcon(iconw->parentWidget()); - delete iconw->parentWidget(); - iconw = 0; - } - } - activate(); - } - - // for all widgets except the window, that's the only thing we - // process, and if we have no childWidget we skip totally - if (o != childWidget || childWidget == 0) - return false; - - switch (e->type()) { - case QEvent::ShowToParent: - if (((QWorkspace*)parentWidget())->d_func()->focus.indexOf(this) < 0) - ((QWorkspace*)parentWidget())->d_func()->focus.append(this); - - if (windowWidget() && (windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint)) { - internalRaise(); - show(); - } - ((QWorkspace*)parentWidget())->d_func()->showWindow(windowWidget()); - break; - case QEvent::WindowStateChange: { - if (static_cast(e)->isOverride()) - break; - Qt::WindowStates state = windowWidget()->windowState(); - - if (state & Qt::WindowMinimized) { - ((QWorkspace*)parentWidget())->d_func()->minimizeWindow(windowWidget()); - } else if (state & Qt::WindowMaximized) { - if (windowWidget()->maximumSize().isValid() && - (windowWidget()->maximumWidth() < parentWidget()->width() || - windowWidget()->maximumHeight() < parentWidget()->height())) { - windowWidget()->resize(windowWidget()->maximumSize()); - windowWidget()->overrideWindowState(Qt::WindowNoState); - if (titlebar) - titlebar->update(); - break; - } - if ((windowWidget()->windowFlags() & Qt::WindowMaximizeButtonHint)) - ((QWorkspace*)parentWidget())->d_func()->maximizeWindow(windowWidget()); - else - ((QWorkspace*)parentWidget())->d_func()->normalizeWindow(windowWidget()); - } else { - ((QWorkspace*)parentWidget())->d_func()->normalizeWindow(windowWidget()); - if (iconw) { - ((QWorkspace*)parentWidget())->d_func()->removeIcon(iconw->parentWidget()); - delete iconw->parentWidget(); - } - } - } break; - case QEvent::HideToParent: - { - QWidget * w = iconw; - if (w && (w = w->parentWidget())) { - ((QWorkspace*)parentWidget())->d_func()->removeIcon(w); - delete w; - } - ((QWorkspace*)parentWidget())->d_func()->hideChild(this); - } break; - case QEvent::WindowIconChange: - { - QWorkspace* ws = (QWorkspace*)parentWidget(); - if (ws->d_func()->maxtools && ws->d_func()->maxWindow == this) { - int iconSize = ws->d_func()->maxtools->size().height(); - ws->d_func()->maxtools->setPixmap(childWidget->windowIcon().pixmap(QSize(iconSize, iconSize))); - } - } - // fall through - case QEvent::WindowTitleChange: - setWindowTitle(windowWidget()->windowTitle()); - if (titlebar) - titlebar->update(); - if (iconw) - iconw->update(); - break; - case QEvent::ModifiedChange: - setWindowModified(windowWidget()->isWindowModified()); - if (titlebar) - titlebar->update(); - if (iconw) - iconw->update(); - break; - case QEvent::Resize: - { - QResizeEvent* re = (QResizeEvent*)e; - if (re->size() != windowSize && !shademode) { - resize(re->size() + baseSize()); - childWidget->update(); //workaround - } - } - break; - - case QEvent::WindowDeactivate: - if (titlebar && titlebar->isActive()) { - update(); - } - break; - - case QEvent::WindowActivate: - if (titlebar && titlebar->isActive()) { - update(); - } - break; - - default: - break; - } - - return QWidget::eventFilter(o, e); -} - -void QWorkspaceChild::childEvent(QChildEvent* e) -{ - if (e->type() == QEvent::ChildRemoved && e->child() == childWidget) { - childWidget = 0; - if (iconw) { - ((QWorkspace*)parentWidget())->d_func()->removeIcon(iconw->parentWidget()); - delete iconw->parentWidget(); - } - close(); - } -} - - -void QWorkspaceChild::doResize() -{ - widgetResizeHandler->doResize(); -} - -void QWorkspaceChild::doMove() -{ - widgetResizeHandler->doMove(); -} - -void QWorkspaceChild::enterEvent(QEvent *) -{ -} - -void QWorkspaceChild::leaveEvent(QEvent *) -{ -#ifndef QT_NO_CURSOR - if (!widgetResizeHandler->isButtonDown()) - setCursor(Qt::ArrowCursor); -#endif -} - -void QWorkspaceChild::paintEvent(QPaintEvent *) -{ - QPainter p(this); - QStyleOptionFrame opt; - opt.rect = rect(); - opt.palette = palette(); - opt.state = QStyle::State_None; - opt.lineWidth = style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth, 0, this); - opt.midLineWidth = 1; - - if (titlebar && titlebar->isActive() && isActiveWindow()) - opt.state |= QStyle::State_Active; - - style()->drawPrimitive(QStyle::PE_FrameWindow, &opt, &p, this); -} - -void QWorkspaceChild::changeEvent(QEvent *ev) -{ - if(ev->type() == QEvent::StyleChange) { - resizeEvent(0); - if (iconw) { - QFrame *frame = qobject_cast(iconw->parentWidget()); - Q_ASSERT(frame); - if (!style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) { - frame->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); - frame->resize(196+2*frame->frameWidth(), 20 + 2*frame->frameWidth()); - } else { - frame->resize(196, 20); - } - } - updateMask(); - } - QWidget::changeEvent(ev); -} - -void QWorkspaceChild::setActive(bool b) -{ - if (!childWidget) - return; - - bool hasFocus = isChildOf(window()->focusWidget(), this); - if (act == b && (act == hasFocus)) - return; - - act = b; - - if (titlebar) - titlebar->setActive(act); - if (iconw) - iconw->setActive(act); - update(); - - QList wl = childWidget->findChildren(); - if (act) { - for (int i = 0; i < wl.size(); ++i) { - QWidget *w = wl.at(i); - w->removeEventFilter(this); - } - if (!hasFocus) { - QWidget *lastfocusw = childWidget->focusWidget(); - if (lastfocusw && lastfocusw->focusPolicy() != Qt::NoFocus) { - lastfocusw->setFocus(); - } else if (childWidget->focusPolicy() != Qt::NoFocus) { - childWidget->setFocus(); - } else { - // find something, anything, that accepts focus, and use that. - for (int i = 0; i < wl.size(); ++i) { - QWidget *w = wl.at(i); - if(w->focusPolicy() != Qt::NoFocus) { - w->setFocus(); - hasFocus = true; - break; - } - } - if (!hasFocus) - setFocus(); - } - } - } else { - for (int i = 0; i < wl.size(); ++i) { - QWidget *w = wl.at(i); - w->removeEventFilter(this); - w->installEventFilter(this); - } - } -} - -bool QWorkspaceChild::isActive() const -{ - return act; -} - -QWidget* QWorkspaceChild::windowWidget() const -{ - return childWidget; -} - -bool QWorkspaceChild::isWindowOrIconVisible() const -{ - return childWidget && (!isHidden() || (iconw && !iconw->isHidden())); -} - -void QWorkspaceChild::updateMask() -{ - QStyleOptionTitleBar titleBarOptions; - titleBarOptions.rect = rect(); - titleBarOptions.titleBarFlags = windowFlags(); - titleBarOptions.titleBarState = windowState(); - - QStyleHintReturnMask frameMask; - if (style()->styleHint(QStyle::SH_WindowFrame_Mask, &titleBarOptions, this, &frameMask)) { - setMask(frameMask.region); - } else if (!mask().isEmpty()) { - clearMask(); - } - - if (iconw) { - QFrame *frame = qobject_cast(iconw->parentWidget()); - Q_ASSERT(frame); - - titleBarOptions.rect = frame->rect(); - titleBarOptions.titleBarFlags = frame->windowFlags(); - titleBarOptions.titleBarState = frame->windowState() | Qt::WindowMinimized; - if (style()->styleHint(QStyle::SH_WindowFrame_Mask, &titleBarOptions, frame, &frameMask)) { - frame->setMask(frameMask.region); - } else if (!frame->mask().isEmpty()) { - frame->clearMask(); - } - } -} - -QWidget* QWorkspaceChild::iconWidget() const -{ - if (!iconw) { - QWorkspaceChild* that = (QWorkspaceChild*) this; - - QFrame* frame = new QFrame(that, Qt::Window); - QVBoxLayout *vbox = new QVBoxLayout(frame); - vbox->setMargin(0); - QWorkspaceTitleBar *tb = new QWorkspaceTitleBar(windowWidget(), frame); - vbox->addWidget(tb); - tb->setObjectName(QLatin1String("_workspacechild_icon_")); - QStyleOptionTitleBar opt; - tb->initStyleOption(&opt); - int th = style()->pixelMetric(QStyle::PM_TitleBarHeight, &opt, tb); - int iconSize = style()->pixelMetric(QStyle::PM_MdiSubWindowMinimizedWidth, 0, this); - if (!style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) { - frame->setFrameStyle(QFrame::StyledPanel | QFrame::Raised); - frame->resize(iconSize+2*frame->frameWidth(), th+2*frame->frameWidth()); - } else { - frame->resize(iconSize, th); - } - - that->iconw = tb; - that->updateMask(); - iconw->setActive(isActive()); - - connect(iconw, SIGNAL(doActivate()), - this, SLOT(activate())); - connect(iconw, SIGNAL(doClose()), - windowWidget(), SLOT(close())); - connect(iconw, SIGNAL(doNormal()), - this, SLOT(showNormal())); - connect(iconw, SIGNAL(doMaximize()), - this, SLOT(showMaximized())); - connect(iconw, SIGNAL(popupOperationMenu(QPoint)), - this, SIGNAL(popupOperationMenu(QPoint))); - connect(iconw, SIGNAL(showOperationMenu()), - this, SIGNAL(showOperationMenu())); - connect(iconw, SIGNAL(doubleClicked()), - this, SLOT(titleBarDoubleClicked())); - } - if (windowWidget()) { - iconw->setWindowTitle(windowWidget()->windowTitle()); - } - return iconw->parentWidget(); -} - -void QWorkspaceChild::showMinimized() -{ - windowWidget()->setWindowState(Qt::WindowMinimized | (windowWidget()->windowState() & ~Qt::WindowMaximized)); -} - -void QWorkspaceChild::showMaximized() -{ - windowWidget()->setWindowState(Qt::WindowMaximized | (windowWidget()->windowState() & ~Qt::WindowMinimized)); -} - -void QWorkspaceChild::showNormal() -{ - windowWidget()->setWindowState(windowWidget()->windowState() & ~(Qt::WindowMinimized|Qt::WindowMaximized)); -} - -void QWorkspaceChild::showShaded() -{ - if (!titlebar) - return; - ((QWorkspace*)parentWidget())->d_func()->activateWindow(windowWidget()); - QWidget* w = windowWidget(); - if (shademode) { - w->overrideWindowState(Qt::WindowNoState); - overrideWindowState(Qt::WindowNoState); - - shademode = false; - resize(shadeRestore.expandedTo(minimumSizeHint())); - setMinimumSize(shadeRestoreMin); - style()->polish(this); - } else { - shadeRestore = size(); - shadeRestoreMin = minimumSize(); - setMinimumHeight(0); - shademode = true; - w->overrideWindowState(Qt::WindowMinimized); - overrideWindowState(Qt::WindowMinimized); - - if (style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar)) - resize(width(), titlebar->height()); - else - resize(width(), titlebar->height() + 2*frameWidth() + 1); - style()->polish(this); - } - titlebar->update(); -} - -void QWorkspaceChild::titleBarDoubleClicked() -{ - if (!windowWidget()) - return; - if (iconw) - showNormal(); - else if (windowWidget()->windowFlags() & Qt::WindowShadeButtonHint) - showShaded(); - else if (windowWidget()->windowFlags() & Qt::WindowMaximizeButtonHint) - showMaximized(); -} - -void QWorkspaceChild::adjustToFullscreen() -{ - if (!childWidget) - return; - - if(!((QWorkspace*)parentWidget())->d_func()->maxmenubar || style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, this)) { - setGeometry(parentWidget()->rect()); - } else { - int fw = style()->pixelMetric(QStyle::PM_MdiSubWindowFrameWidth, 0, this); - bool noBorder = style()->styleHint(QStyle::SH_TitleBar_NoBorder, 0, titlebar); - int th = titlebar ? titlebar->sizeHint().height() : 0; - int w = parentWidget()->width() + 2*fw; - int h = parentWidget()->height() + (noBorder ? fw : 2*fw) + th; - w = qMax(w, childWidget->minimumWidth()); - h = qMax(h, childWidget->minimumHeight()); - setGeometry(-fw, (noBorder ? 0 : -fw) - th, w, h); - } - childWidget->overrideWindowState(Qt::WindowMaximized); - overrideWindowState(Qt::WindowMaximized); -} - -void QWorkspaceChild::internalRaise() -{ - - QWidget *stackUnderWidget = 0; - if (!windowWidget() || (windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint) == 0) { - - QList::Iterator it(((QWorkspace*)parent())->d_func()->windows.begin()); - while (it != ((QWorkspace*)parent())->d_func()->windows.end()) { - QWorkspaceChild* c = *it; - ++it; - if (c->windowWidget() && - !c->windowWidget()->isHidden() && - (c->windowWidget()->windowFlags() & Qt::WindowStaysOnTopHint)) { - if (stackUnderWidget) - c->stackUnder(stackUnderWidget); - else - c->raise(); - stackUnderWidget = c; - } - } - } - - if (stackUnderWidget) { - if (iconw) - iconw->parentWidget()->stackUnder(stackUnderWidget); - stackUnder(stackUnderWidget); - } else { - if (iconw) - iconw->parentWidget()->raise(); - raise(); - } - -} - -void QWorkspaceChild::show() -{ - if (childWidget && childWidget->isHidden()) - childWidget->show(); - QWidget::show(); -} - -bool QWorkspace::scrollBarsEnabled() const -{ - Q_D(const QWorkspace); - return d->vbar != 0; -} - -/*! - \property QWorkspace::scrollBarsEnabled - \brief whether the workspace provides scroll bars - - If this property is true, the workspace will provide scroll bars if any - of the child windows extend beyond the edges of the visible - workspace. The workspace area will automatically increase to - contain child windows if they are resized beyond the right or - bottom edges of the visible area. - - If this property is false (the default), resizing child windows - out of the visible area of the workspace is not permitted, although - it is still possible to position them partially outside the visible area. -*/ -void QWorkspace::setScrollBarsEnabled(bool enable) -{ - Q_D(QWorkspace); - if ((d->vbar != 0) == enable) - return; - - d->xoffset = d->yoffset = 0; - if (enable) { - d->vbar = new QScrollBar(Qt::Vertical, this); - d->vbar->setObjectName(QLatin1String("vertical scrollbar")); - connect(d->vbar, SIGNAL(valueChanged(int)), this, SLOT(_q_scrollBarChanged())); - d->hbar = new QScrollBar(Qt::Horizontal, this); - d->hbar->setObjectName(QLatin1String("horizontal scrollbar")); - connect(d->hbar, SIGNAL(valueChanged(int)), this, SLOT(_q_scrollBarChanged())); - d->corner = new QWidget(this); - d->corner->setBackgroundRole(QPalette::Window); - d->corner->setObjectName(QLatin1String("qt_corner")); - d->updateWorkspace(); - } else { - delete d->vbar; - delete d->hbar; - delete d->corner; - d->vbar = d->hbar = 0; - d->corner = 0; - } - - QList::Iterator it(d->windows.begin()); - while (it != d->windows.end()) { - QWorkspaceChild *child = *it; - ++it; - child->widgetResizeHandler->setSizeProtection(!enable); - } -} - -QRect QWorkspacePrivate::updateWorkspace() -{ - Q_Q(QWorkspace); - QRect cr(q->rect()); - - if (q->scrollBarsEnabled() && !maxWindow) { - corner->raise(); - vbar->raise(); - hbar->raise(); - if (maxWindow) - maxWindow->internalRaise(); - - QRect r(0, 0, 0, 0); - QList::Iterator it(windows.begin()); - while (it != windows.end()) { - QWorkspaceChild *child = *it; - ++it; - if (!child->isHidden()) - r = r.united(child->geometry()); - } - vbar->blockSignals(true); - hbar->blockSignals(true); - - int hsbExt = hbar->sizeHint().height(); - int vsbExt = vbar->sizeHint().width(); - - - bool showv = yoffset || yoffset + r.bottom() - q->height() + 1 > 0 || yoffset + r.top() < 0; - bool showh = xoffset || xoffset + r.right() - q->width() + 1 > 0 || xoffset + r.left() < 0; - - if (showh && !showv) - showv = yoffset + r.bottom() - q->height() + hsbExt + 1 > 0; - if (showv && !showh) - showh = xoffset + r.right() - q->width() + vsbExt + 1 > 0; - - if (!showh) - hsbExt = 0; - if (!showv) - vsbExt = 0; - - if (showv) { - vbar->setSingleStep(qMax(q->height() / 12, 30)); - vbar->setPageStep(q->height() - hsbExt); - vbar->setMinimum(qMin(0, yoffset + qMin(0, r.top()))); - vbar->setMaximum(qMax(0, yoffset + qMax(0, r.bottom() - q->height() + hsbExt + 1))); - vbar->setGeometry(q->width() - vsbExt, 0, vsbExt, q->height() - hsbExt); - vbar->setValue(yoffset); - vbar->show(); - } else { - vbar->hide(); - } - - if (showh) { - hbar->setSingleStep(qMax(q->width() / 12, 30)); - hbar->setPageStep(q->width() - vsbExt); - hbar->setMinimum(qMin(0, xoffset + qMin(0, r.left()))); - hbar->setMaximum(qMax(0, xoffset + qMax(0, r.right() - q->width() + vsbExt + 1))); - hbar->setGeometry(0, q->height() - hsbExt, q->width() - vsbExt, hsbExt); - hbar->setValue(xoffset); - hbar->show(); - } else { - hbar->hide(); - } - - if (showh && showv) { - corner->setGeometry(q->width() - vsbExt, q->height() - hsbExt, vsbExt, hsbExt); - corner->show(); - } else { - corner->hide(); - } - - vbar->blockSignals(false); - hbar->blockSignals(false); - - cr.setRect(0, 0, q->width() - vsbExt, q->height() - hsbExt); - } - - QList::Iterator ii(icons.begin()); - while (ii != icons.end()) { - QWidget* w = *ii; - ++ii; - int x = w->x(); - int y = w->y(); - bool m = false; - if (x+w->width() > cr.width()) { - m = true; - x = cr.width() - w->width(); - } - if (y+w->height() > cr.height()) { - y = cr.height() - w->height(); - m = true; - } - if (m) { - if (QWorkspaceChild *child = qobject_cast(w)) - child->move(x, y); - else - w->move(x, y); - } - } - - return cr; - -} - -void QWorkspacePrivate::_q_scrollBarChanged() -{ - int ver = yoffset - vbar->value(); - int hor = xoffset - hbar->value(); - yoffset = vbar->value(); - xoffset = hbar->value(); - - QList::Iterator it(windows.begin()); - while (it != windows.end()) { - QWorkspaceChild *child = *it; - ++it; - // we do not use move() due to the reimplementation in QWorkspaceChild - child->setGeometry(child->x() + hor, child->y() + ver, child->width(), child->height()); - } - updateWorkspace(); -} - -/*! - \enum QWorkspace::WindowOrder - - Specifies the order in which child windows are returned from windowList(). - - \value CreationOrder The windows are returned in the order of their creation - \value StackingOrder The windows are returned in the order of their stacking -*/ - -/*!\reimp */ -void QWorkspace::changeEvent(QEvent *ev) -{ - Q_D(QWorkspace); - if(ev->type() == QEvent::StyleChange) { - if (isVisible() && d->maxWindow && d->maxmenubar) { - if(style()->styleHint(QStyle::SH_Workspace_FillSpaceOnMaximize, 0, this)) { - d->hideMaximizeControls(); //hide any visible maximized controls - d->showMaximizeControls(); //updates the modification state as well - } - } - } - QWidget::changeEvent(ev); -} - -QT_END_NAMESPACE - -#include "moc_qworkspace.cpp" - -#include "qworkspace.moc" - -#endif // QT_NO_WORKSPACE diff --git a/src/widgets/widgets/qworkspace.h b/src/widgets/widgets/qworkspace.h deleted file mode 100644 index 9c18f3fce0..0000000000 --- a/src/widgets/widgets/qworkspace.h +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/ -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWORKSPACE_H -#define QWORKSPACE_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - - -#ifndef QT_NO_WORKSPACE - -class QAction; -class QWorkspaceChild; -class QShowEvent; -class QWorkspacePrivate; - -class Q_WIDGETS_EXPORT QWorkspace : public QWidget -{ - Q_OBJECT - Q_PROPERTY(bool scrollBarsEnabled READ scrollBarsEnabled WRITE setScrollBarsEnabled) - Q_PROPERTY(QBrush background READ background WRITE setBackground) - -public: - explicit QWorkspace(QWidget* parent=0); - ~QWorkspace(); - - enum WindowOrder { CreationOrder, StackingOrder }; - - QWidget* activeWindow() const; - QWidgetList windowList(WindowOrder order = CreationOrder) const; - - QWidget * addWindow(QWidget *w, Qt::WindowFlags flags = 0); - - QSize sizeHint() const; - - bool scrollBarsEnabled() const; - void setScrollBarsEnabled(bool enable); - - - void setBackground(const QBrush &background); - QBrush background() const; - -Q_SIGNALS: - void windowActivated(QWidget* w); - -public Q_SLOTS: - void setActiveWindow(QWidget *w); - void cascade(); - void tile(); - void arrangeIcons(); - void closeActiveWindow(); - void closeAllWindows(); - void activateNextWindow(); - void activatePreviousWindow(); - -protected: - bool event(QEvent *e); - void paintEvent(QPaintEvent *e); - void changeEvent(QEvent *); - void childEvent(QChildEvent *); - void resizeEvent(QResizeEvent *); - bool eventFilter(QObject *, QEvent *); - void showEvent(QShowEvent *e); - void hideEvent(QHideEvent *e); -#ifndef QT_NO_WHEELEVENT - void wheelEvent(QWheelEvent *e); -#endif - -private: - Q_DECLARE_PRIVATE(QWorkspace) - Q_DISABLE_COPY(QWorkspace) - Q_PRIVATE_SLOT(d_func(), void _q_normalizeActiveWindow()) - Q_PRIVATE_SLOT(d_func(), void _q_minimizeActiveWindow()) - Q_PRIVATE_SLOT(d_func(), void _q_showOperationMenu()) - Q_PRIVATE_SLOT(d_func(), void _q_popupOperationMenu(const QPoint&)) - Q_PRIVATE_SLOT(d_func(), void _q_operationMenuActivated(QAction *)) - Q_PRIVATE_SLOT(d_func(), void _q_updateActions()) - Q_PRIVATE_SLOT(d_func(), void _q_scrollBarChanged()) - - friend class QWorkspaceChild; -}; - -#endif // QT_NO_WORKSPACE - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QWORKSPACE_H diff --git a/src/widgets/widgets/widgets.pri b/src/widgets/widgets/widgets.pri index 0875ecaa6b..c86bc1eff7 100644 --- a/src/widgets/widgets/widgets.pri +++ b/src/widgets/widgets/widgets.pri @@ -73,7 +73,6 @@ HEADERS += \ widgets/qwidgetresizehandler_p.h \ widgets/qfocusframe.h \ widgets/qscrollarea.h \ - widgets/qworkspace.h \ widgets/qwidgetanimator_p.h \ widgets/qwidgettextcontrol_p.h \ widgets/qwidgettextcontrol_p_p.h \ @@ -135,7 +134,6 @@ SOURCES += \ widgets/qwidgetresizehandler.cpp \ widgets/qfocusframe.cpp \ widgets/qscrollarea.cpp \ - widgets/qworkspace.cpp \ widgets/qwidgetanimator.cpp \ widgets/qwidgettextcontrol.cpp \ widgets/qwidgetlinecontrol.cpp \ -- cgit v1.2.3 From 6a1d1165c2392e1ab5f493ce324942faa4d5df43 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Tue, 27 Mar 2012 01:05:41 +1000 Subject: Make QGridLayout::getItemPosition() const. This commit addresses a long-standing Qt 5 to-do. Whilst a trivial change, it is binary incompatible. Task-number: QTBUG-1433 Change-Id: I6e31e47fd5791cb6f1373e2696ffc95f7174f0b0 Reviewed-by: Lars Knoll --- src/widgets/kernel/qgridlayout.cpp | 8 ++++---- src/widgets/kernel/qgridlayout.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp index 3607d88d9e..39daf96eb8 100644 --- a/src/widgets/kernel/qgridlayout.cpp +++ b/src/widgets/kernel/qgridlayout.cpp @@ -167,9 +167,9 @@ public: return item; } - void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) { + void getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const { if (index < things.count()) { - QGridBox *b = things.at(index); + const QGridBox *b = things.at(index); int toRow = b->toRow(rr); int toCol = b->toCol(cc); *row = b->row; @@ -1347,9 +1347,9 @@ QLayoutItem *QGridLayout::takeAt(int index) \sa itemAtPosition(), itemAt() */ -void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) +void QGridLayout::getItemPosition(int index, int *row, int *column, int *rowSpan, int *columnSpan) const { - Q_D(QGridLayout); + Q_D(const QGridLayout); d->getItemPosition(index, row, column, rowSpan, columnSpan); } diff --git a/src/widgets/kernel/qgridlayout.h b/src/widgets/kernel/qgridlayout.h index 02789b7794..930fdf4511 100644 --- a/src/widgets/kernel/qgridlayout.h +++ b/src/widgets/kernel/qgridlayout.h @@ -120,7 +120,7 @@ public: void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment = 0); void setDefaultPositioning(int n, Qt::Orientation orient); - void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan); + void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const; protected: void addItem(QLayoutItem *); -- cgit v1.2.3 From 13d936b0f2105be2f87df5dc1d6f5f2da11a74cc Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Mon, 26 Mar 2012 19:09:49 +1000 Subject: Make QWidget::isEnabledTo() and isVisibleTo() to take const pointers. This commit addresses a long-standing Qt 5 to-do comment. Whilst a trivial change, it is binary incompatible. Task-number: QTBUG-259 Change-Id: I2fc7bfda488318dbabbbea9f5ff9d2b1d6ce0784 Reviewed-by: Lars Knoll --- src/widgets/kernel/qwidget.cpp | 4 ++-- src/widgets/kernel/qwidget.h | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 8a3fea9c8a..2d3961cb8f 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -2884,7 +2884,7 @@ void QWidget::showNormal() \sa setEnabled() enabled */ -bool QWidget::isEnabledTo(QWidget* ancestor) const +bool QWidget::isEnabledTo(const QWidget *ancestor) const { const QWidget * w = this; while (!w->testAttribute(Qt::WA_ForceDisabled) @@ -7574,7 +7574,7 @@ bool QWidget::close() \sa show() hide() isVisible() */ -bool QWidget::isVisibleTo(QWidget* ancestor) const +bool QWidget::isVisibleTo(const QWidget *ancestor) const { if (!ancestor) return isVisible(); diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index 78b693c78d..246beac9f1 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -243,7 +243,7 @@ public: void setWindowModality(Qt::WindowModality windowModality); bool isEnabled() const; - bool isEnabledTo(QWidget*) const; + bool isEnabledTo(const QWidget *) const; bool isEnabledToTLW() const; public Q_SLOTS: @@ -505,8 +505,7 @@ public: bool restoreGeometry(const QByteArray &geometry); void adjustSize(); bool isVisible() const; - bool isVisibleTo(QWidget*) const; - // ### Qt 5: bool isVisibleTo(_const_ QWidget *) const + bool isVisibleTo(const QWidget *) const; inline bool isHidden() const; bool isMinimized() const; -- cgit v1.2.3 From 2b17b0235b70f89d15d3b91a14c3297d38377f94 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Mon, 26 Mar 2012 19:59:56 +1000 Subject: Make QWidget::mapTo/mapFrom() take const pointers. This commit addresses a long-standing Qt 5 to-do. Whilst a trivial change, it is binary incompatible. Task-number: QTBUG-665 Change-Id: I4294233d876dec79eda57113bdf298ce73643e76 Reviewed-by: Lars Knoll --- src/widgets/kernel/qwidget.cpp | 8 ++++---- src/widgets/kernel/qwidget.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index 2d3961cb8f..e6d5a7af6d 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -3860,13 +3860,13 @@ void QWidget::setFixedHeight(int h) \sa mapFrom() mapToParent() mapToGlobal() underMouse() */ -QPoint QWidget::mapTo(QWidget * parent, const QPoint & pos) const +QPoint QWidget::mapTo(const QWidget * parent, const QPoint & pos) const { QPoint p = pos; if (parent) { const QWidget * w = this; while (w != parent) { - Q_ASSERT_X(w, "QWidget::mapTo(QWidget *parent, const QPoint &pos)", + Q_ASSERT_X(w, "QWidget::mapTo(const QWidget *parent, const QPoint &pos)", "parent must be in parent hierarchy"); p = w->mapToParent(p); w = w->parentWidget(); @@ -3884,13 +3884,13 @@ QPoint QWidget::mapTo(QWidget * parent, const QPoint & pos) const \sa mapTo() mapFromParent() mapFromGlobal() underMouse() */ -QPoint QWidget::mapFrom(QWidget * parent, const QPoint & pos) const +QPoint QWidget::mapFrom(const QWidget * parent, const QPoint & pos) const { QPoint p(pos); if (parent) { const QWidget * w = this; while (w != parent) { - Q_ASSERT_X(w, "QWidget::mapFrom(QWidget *parent, const QPoint &pos)", + Q_ASSERT_X(w, "QWidget::mapFrom(const QWidget *parent, const QPoint &pos)", "parent must be in parent hierarchy"); p = w->mapFromParent(p); diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h index 246beac9f1..cf907e14cd 100644 --- a/src/widgets/kernel/qwidget.h +++ b/src/widgets/kernel/qwidget.h @@ -306,8 +306,8 @@ public: QPoint mapFromGlobal(const QPoint &) const; QPoint mapToParent(const QPoint &) const; QPoint mapFromParent(const QPoint &) const; - QPoint mapTo(QWidget *, const QPoint &) const; - QPoint mapFrom(QWidget *, const QPoint &) const; + QPoint mapTo(const QWidget *, const QPoint &) const; + QPoint mapFrom(const QWidget *, const QPoint &) const; QWidget *window() const; QWidget *nativeParentWidget() const; -- cgit v1.2.3 From c3e1abad4e141e6e9d876e5cff194c473a2654eb Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 20:41:57 +0100 Subject: Add USER properties to QDateEdit and QTimeEdit. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both classes had such components before, but there were issues with the NOTIFY signal not being in the same class as the Q_PROPERTY. This patch solves that problem by using a signal of a different name. Task-number: QTBUG-15731 Change-Id: Ibc7ce4dba8a6b88c05d62a90e14d0101c5cd3082 Reviewed-by: Olivier Goffart Reviewed-by: Thorbjørn Lund Martsum --- src/widgets/itemviews/qitemdelegate.cpp | 12 ------------ src/widgets/itemviews/qstyleditemdelegate.cpp | 12 ------------ src/widgets/widgets/qdatetimeedit.cpp | 20 ++++++++++++++++++++ src/widgets/widgets/qdatetimeedit.h | 8 ++++++++ 4 files changed, 28 insertions(+), 24 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index 419c62ff65..6c62378009 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -555,18 +555,6 @@ void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) con QVariant v = index.data(Qt::EditRole); QByteArray n = editor->metaObject()->userProperty().name(); - // ### Qt 5: remove - // A work-around for missing "USER true" in qdatetimeedit.h for - // QTimeEdit's time property and QDateEdit's date property. - // It only triggers if the default user property "dateTime" is - // reported for QTimeEdit and QDateEdit. - if (n == "dateTime") { - if (editor->inherits("QTimeEdit")) - n = "time"; - else if (editor->inherits("QDateEdit")) - n = "date"; - } - // ### Qt 5: give QComboBox a USER property if (n.isEmpty() && editor->inherits("QComboBox")) n = d->editorFactory()->valuePropertyName(v.userType()); diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 93893afaa8..b27dcb0a7b 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -492,18 +492,6 @@ void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &inde QVariant v = index.data(Qt::EditRole); QByteArray n = editor->metaObject()->userProperty().name(); - // ### Qt 5: remove - // A work-around for missing "USER true" in qdatetimeedit.h for - // QTimeEdit's time property and QDateEdit's date property. - // It only triggers if the default user property "dateTime" is - // reported for QTimeEdit and QDateEdit. - if (n == "dateTime") { - if (editor->inherits("QTimeEdit")) - n = "time"; - else if (editor->inherits("QDateEdit")) - n = "date"; - } - // ### Qt 5: give QComboBox a USER property if (n.isEmpty() && editor->inherits("QComboBox")) n = d->editorFactory()->valuePropertyName(v.userType()); diff --git a/src/widgets/widgets/qdatetimeedit.cpp b/src/widgets/widgets/qdatetimeedit.cpp index 3d0996a9f5..5e808c1ab5 100644 --- a/src/widgets/widgets/qdatetimeedit.cpp +++ b/src/widgets/widgets/qdatetimeedit.cpp @@ -1549,6 +1549,7 @@ void QDateTimeEdit::mousePressEvent(QMouseEvent *event) QTimeEdit::QTimeEdit(QWidget *parent) : QDateTimeEdit(QDATETIMEEDIT_TIME_MIN, QVariant::Time, parent) { + connect(this, SIGNAL(timeChanged(QTime)), SIGNAL(userTimeChanged(QTime))); } /*! @@ -1561,6 +1562,15 @@ QTimeEdit::QTimeEdit(const QTime &time, QWidget *parent) { } +/*! + \fn void QTimeEdit::userTimeChanged(const QTime &time) + + This signal only exists to fully implement the time Q_PROPERTY on the class. + Normally timeChanged should be used instead. + + \internal +*/ + /*! \class QDateEdit @@ -1603,6 +1613,7 @@ QTimeEdit::QTimeEdit(const QTime &time, QWidget *parent) QDateEdit::QDateEdit(QWidget *parent) : QDateTimeEdit(QDATETIMEEDIT_DATE_INITIAL, QVariant::Date, parent) { + connect(this, SIGNAL(dateChanged(QDate)), SIGNAL(userDateChanged(QDate))); } /*! @@ -1615,6 +1626,15 @@ QDateEdit::QDateEdit(const QDate &date, QWidget *parent) { } +/*! + \fn void QDateEdit::userDateChanged(const QDate &date) + + This signal only exists to fully implement the date Q_PROPERTY on the class. + Normally dateChanged should be used instead. + + \internal +*/ + // --- QDateTimeEditPrivate --- diff --git a/src/widgets/widgets/qdatetimeedit.h b/src/widgets/widgets/qdatetimeedit.h index ffb8503d5e..07fc2b04fb 100644 --- a/src/widgets/widgets/qdatetimeedit.h +++ b/src/widgets/widgets/qdatetimeedit.h @@ -205,17 +205,25 @@ private: class Q_WIDGETS_EXPORT QTimeEdit : public QDateTimeEdit { Q_OBJECT + Q_PROPERTY(QTime time READ time WRITE setTime NOTIFY userTimeChanged USER true) public: QTimeEdit(QWidget *parent = 0); QTimeEdit(const QTime &time, QWidget *parent = 0); + +Q_SIGNALS: + void userTimeChanged(const QTime &time); }; class Q_WIDGETS_EXPORT QDateEdit : public QDateTimeEdit { Q_OBJECT + Q_PROPERTY(QDate date READ date WRITE setDate NOTIFY userDateChanged USER true) public: QDateEdit(QWidget *parent = 0); QDateEdit(const QDate &date, QWidget *parent = 0); + +Q_SIGNALS: + void userDateChanged(const QDate &date); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QDateTimeEdit::Sections) -- cgit v1.2.3 From dc6a1d186eb2060f549ef55b74711b54ed66ade7 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 21 Mar 2012 20:42:50 +0100 Subject: Remove workaround for QComboBox not having a USER property. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit QComboBox does in fact have a user property since b1b87a73012342dc1619a8e907ea9954d59ca564. Change-Id: I24eb2ef267cec5d8a9f7348954b703fa6df04fa5 Reviewed-by: Girish Ramakrishnan Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: David Faure --- src/widgets/itemviews/qitemdelegate.cpp | 4 ---- src/widgets/itemviews/qstyleditemdelegate.cpp | 4 ---- 2 files changed, 8 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index 6c62378009..bd9f4510f7 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -551,13 +551,9 @@ void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) con Q_UNUSED(editor); Q_UNUSED(index); #else - Q_D(const QItemDelegate); QVariant v = index.data(Qt::EditRole); QByteArray n = editor->metaObject()->userProperty().name(); - // ### Qt 5: give QComboBox a USER property - if (n.isEmpty() && editor->inherits("QComboBox")) - n = d->editorFactory()->valuePropertyName(v.userType()); if (!n.isEmpty()) { if (!v.isValid()) v = QVariant(editor->property(n).userType(), (const void *)0); diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index b27dcb0a7b..119692531f 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -488,13 +488,9 @@ void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &inde Q_UNUSED(editor); Q_UNUSED(index); #else - Q_D(const QStyledItemDelegate); QVariant v = index.data(Qt::EditRole); QByteArray n = editor->metaObject()->userProperty().name(); - // ### Qt 5: give QComboBox a USER property - if (n.isEmpty() && editor->inherits("QComboBox")) - n = d->editorFactory()->valuePropertyName(v.userType()); if (!n.isEmpty()) { if (!v.isValid()) v = QVariant(editor->property(n).userType(), (const void *)0); -- cgit v1.2.3 From d2b1c2ef1f1fea3200d8dee5c58fe79649fd13bb Mon Sep 17 00:00:00 2001 From: Debao Zhang Date: Fri, 23 Mar 2012 18:19:27 -0700 Subject: Remove WA_PaintOutsidePaintEvent WA_PaintOutsidePaintEvent is only suggested to be used when porting Qt3 code to Qt 4 under X11 platform. and it has been broken now. Change-Id: Ie4297b2a449f1055ca10ada9efb930e6018b1efb Reviewed-by: Friedemann Kleint Reviewed-by: Lars Knoll --- src/widgets/kernel/qwidget.cpp | 2 +- src/widgets/kernel/qwidgetbackingstore.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp index e6d5a7af6d..8e6e4368e8 100644 --- a/src/widgets/kernel/qwidget.cpp +++ b/src/widgets/kernel/qwidget.cpp @@ -5128,7 +5128,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP paintEngine->d_func()->systemClip = QRegion(); } q->setAttribute(Qt::WA_WState_InPaintEvent, false); - if (q->paintingActive() && !q->testAttribute(Qt::WA_PaintOutsidePaintEvent)) + if (q->paintingActive()) qWarning("QWidget::repaint: It is dangerous to leave painters active on a widget outside of the PaintEvent"); if (paintEngine && paintEngine->autoDestruct()) { diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp index 2e9f072a0f..93c64133d6 100644 --- a/src/widgets/kernel/qwidgetbackingstore.cpp +++ b/src/widgets/kernel/qwidgetbackingstore.cpp @@ -1364,7 +1364,7 @@ void QWidgetPrivate::repaint_sys(const QRegion &rgn) QWidgetBackingStore::unflushPaint(q, toBePainted); #endif - if (!q->testAttribute(Qt::WA_PaintOutsidePaintEvent) && q->paintingActive()) + if (q->paintingActive()) qWarning("QWidget::repaint: It is dangerous to leave painters active on a widget outside of the PaintEvent"); } -- cgit v1.2.3 From 74d2dba46041448c70dbd3049ae2a8277770baf6 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 13 Oct 2011 19:56:28 +0200 Subject: Port to the new QUrl API The use of any broken-down components of the query now needs QUrlQuery. The QUrl constructor and toString() are now rehabilitated and the preferred forms. Use toEncoded() and fromEncoded() now only when we need to store data in a QByteArray or the data comes from a QByteArray anyway. Change to toString() or the constructor if the data was in a QString. Change-Id: I9d761a628bef9c70185a48e927a61779a1642342 Reviewed-by: Lars Knoll --- src/widgets/widgets/qtextbrowser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp index 050730ec2a..261b96f8af 100644 --- a/src/widgets/widgets/qtextbrowser.cpp +++ b/src/widgets/widgets/qtextbrowser.cpp @@ -139,7 +139,7 @@ public: // re-imlemented from QTextEditPrivate virtual QUrl resolveUrl(const QUrl &url) const; inline QUrl resolveUrl(const QString &url) const - { return resolveUrl(QUrl::fromEncoded(url.toUtf8())); } + { return resolveUrl(QUrl(url)); } #ifdef QT_KEYPAD_NAVIGATION void keypadMove(bool next); -- cgit v1.2.3 From 7099c333c4e623b1051b4377d76c632a15b11fbf Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Mon, 2 Apr 2012 16:11:42 +0200 Subject: Remove the sectionAutoResize signal. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Despite being documented, it was never emitted, and I can't find any use of it in the history either. Change-Id: If89b401004d14ef068ada6a4099bef9dc47936c9 Reviewed-by: Thorbjørn Lund Martsum Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qheaderview.cpp | 16 ++-------------- src/widgets/itemviews/qheaderview.h | 1 - 2 files changed, 2 insertions(+), 15 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index e82cd477c5..95c5edca6f 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -130,7 +130,7 @@ QDataStream &operator>>(QDataStream &in, QHeaderViewPrivate::SectionSpan &span) A header will emit sectionMoved() if the user moves a section, sectionResized() if the user resizes a section, and sectionClicked() as well as sectionHandleDoubleClicked() in response to mouse clicks. A header - will also emit sectionCountChanged() and sectionAutoResize(). + will also emit sectionCountChanged(). You can identify a section using the logicalIndex() and logicalIndexAt() functions, or by its index position, using the visualIndex() and @@ -281,18 +281,6 @@ QDataStream &operator>>(QDataStream &in, QHeaderViewPrivate::SectionSpan &span) \sa setSortIndicator() */ -/*! - \fn void QHeaderView::sectionAutoResize(int logicalIndex, - QHeaderView::ResizeMode mode) - - This signal is emitted when a section is automatically resized. The - section's logical index is specified by \a logicalIndex, and the resize - mode by \a mode. - - \sa setResizeMode(), stretchLastSection() -*/ -// ### Qt 5: change to sectionAutoResized() - /*! \fn void QHeaderView::geometriesChanged() \since 4.2 @@ -1195,7 +1183,7 @@ bool QHeaderView::highlightSections() const Sets the constraints on how the header can be resized to those described by the given \a mode. - \sa resizeMode(), length(), sectionResized(), sectionAutoResize() + \sa resizeMode(), length(), sectionResized() */ void QHeaderView::setResizeMode(ResizeMode mode) diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h index bf686e2925..0cea318953 100644 --- a/src/widgets/itemviews/qheaderview.h +++ b/src/widgets/itemviews/qheaderview.h @@ -191,7 +191,6 @@ Q_SIGNALS: void sectionDoubleClicked(int logicalIndex); void sectionCountChanged(int oldCount, int newCount); void sectionHandleDoubleClicked(int logicalIndex); - void sectionAutoResize(int logicalIndex, QHeaderView::ResizeMode mode); void geometriesChanged(); void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order); -- cgit v1.2.3 From e6e4456de0506aa9896b687dc858eb9ae03d8917 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Sun, 1 Apr 2012 18:47:56 +0100 Subject: QFileSystemModel: fix sorting When sorting a model recursively, the children of a QFileSystemNode are extracted from their parent in a QHash order; then filtered, then sorted (using a stable sort) depending on the sorting column. This means that the order of the children comparing to equal for the chosen sort are shown in the order they were picked from the iteration on the QHash, which isn't reliable at all. Moreover, the criteria used in QFileSystemModelSorter for sorting are too loose: when sorting by any column but the name, if the result is "equality", then the file names should be used to determine the sort order. This patch removes the stable sort in favour of a full sort, and fixes the criteria of soring inside QFileSystemModelSorter. Change-Id: Idd9aece22f2ebbe77ec40d372b43cde4c200ff38 Reviewed-by: Stephen Kelly --- src/widgets/dialogs/qfilesystemmodel.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 5446eca383..809024ae6d 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -48,6 +48,8 @@ #include #include +#include + #ifdef Q_OS_WIN # include # include @@ -1081,15 +1083,35 @@ public: r->fileName, Qt::CaseInsensitive) < 0; } case 1: + { // Directories go first - if (l->isDir() && !r->isDir()) - return true; - return l->size() < r->size(); + bool left = l->isDir(); + bool right = r->isDir(); + if (left ^ right) + return left; + + qint64 sizeDifference = l->size() - r->size(); + if (sizeDifference == 0) + return QFileSystemModelPrivate::naturalCompare(l->fileName, r->fileName, Qt::CaseInsensitive) < 0; + + return sizeDifference < 0; + } case 2: - return l->type() < r->type(); + { + int compare = QString::localeAwareCompare(l->type(), r->type()); + if (compare == 0) + return QFileSystemModelPrivate::naturalCompare(l->fileName, r->fileName, Qt::CaseInsensitive) < 0; + + return compare < 0; + } case 3: + { + if (l->lastModified() == r->lastModified()) + return QFileSystemModelPrivate::naturalCompare(l->fileName, r->fileName, Qt::CaseInsensitive) < 0; + return l->lastModified() < r->lastModified(); } + } Q_ASSERT(false); return false; } @@ -1129,7 +1151,7 @@ void QFileSystemModelPrivate::sortChildren(int column, const QModelIndex &parent i++; } QFileSystemModelSorter ms(column); - qStableSort(values.begin(), values.end(), ms); + std::sort(values.begin(), values.end(), ms); // First update the new visible list indexNode->visibleChildren.clear(); //No more dirty item we reset our internal dirty index -- cgit v1.2.3 From a7ed81b557d593a8ddb43b71bf4bbf3b44ead070 Mon Sep 17 00:00:00 2001 From: Marcel Krems Date: Thu, 5 Apr 2012 22:12:15 +0200 Subject: Removed QApplication overloads used solely for documentation. Also removed a define which was used only for this purpose. This change brings the constructors in line with Q{Core,Gui}Application. Change-Id: I1134ca5611453e8445c1a4f3226846621fa8872c Reviewed-by: Olivier Goffart --- src/widgets/kernel/qapplication.cpp | 12 ------------ src/widgets/kernel/qapplication.h | 9 --------- src/widgets/widgets.pro | 2 -- 3 files changed, 23 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index 2615ac891d..22589a4170 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -558,10 +558,6 @@ void QApplicationPrivate::process_cmdline() \sa arguments() */ -QApplication::QApplication(int &argc, char **argv) - : QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, 0x040000)) -{ Q_D(QApplication); d->construct(); } - QApplication::QApplication(int &argc, char **argv, int _internal) : QGuiApplication(*new QApplicationPrivate(argc, argv, GuiClient, _internal)) { Q_D(QApplication); d->construct(); } @@ -584,10 +580,6 @@ QApplication::QApplication(int &argc, char **argv, int _internal) \snippet doc/src/snippets/code/src_gui_kernel_qapplication.cpp 0 */ -QApplication::QApplication(int &argc, char **argv, bool GUIenabled ) - : QGuiApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, 0x040000)) -{ Q_D(QApplication); d->construct(); } - QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _internal) : QGuiApplication(*new QApplicationPrivate(argc, argv, GUIenabled ? GuiClient : Tty, _internal)) { Q_D(QApplication); d->construct();} @@ -603,10 +595,6 @@ QApplication::QApplication(int &argc, char **argv, bool GUIenabled , int _intern be greater than zero and \a argv must contain at least one valid character string. */ -QApplication::QApplication(int &argc, char **argv, Type type) - : QGuiApplication(*new QApplicationPrivate(argc, argv, type, 0x040000)) -{ Q_D(QApplication); d->construct(); } - QApplication::QApplication(int &argc, char **argv, Type type , int _internal) : QGuiApplication(*new QApplicationPrivate(argc, argv, type, _internal)) { Q_D(QApplication); d->construct(); } diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h index 6c1ced1623..7a57a913bd 100644 --- a/src/widgets/kernel/qapplication.h +++ b/src/widgets/kernel/qapplication.h @@ -96,11 +96,9 @@ class Q_WIDGETS_EXPORT QApplication : public QGuiApplication public: -#ifndef qdoc QApplication(int &argc, char **argv, int = ApplicationFlags); QT_DEPRECATED QApplication(int &argc, char **argv, bool GUIenabled, int = ApplicationFlags); QApplication(int &argc, char **argv, Type, int = ApplicationFlags); -#endif virtual ~QApplication(); static Type type(); @@ -225,13 +223,6 @@ protected: bool event(QEvent *); bool compressEvent(QEvent *, QObject *receiver, QPostEventList *); - -#if defined(Q_INTERNAL_QAPP_SRC) || defined(qdoc) - QApplication(int &argc, char **argv); - QT_DEPRECATED QApplication(int &argc, char **argv, bool GUIenabled); - QApplication(int &argc, char **argv, Type); -#endif - private: Q_DISABLE_COPY(QApplication) Q_DECLARE_PRIVATE(QApplication) diff --git a/src/widgets/widgets.pro b/src/widgets/widgets.pro index 596e8a994a..a8be439695 100644 --- a/src/widgets/widgets.pro +++ b/src/widgets/widgets.pro @@ -51,8 +51,6 @@ testcocoon { load(testcocoon) } -DEFINES += Q_INTERNAL_QAPP_SRC - INCLUDEPATH += ../3rdparty/harfbuzz/src win32:!contains(QT_CONFIG, directwrite) { -- cgit v1.2.3 From 7be255156feb7636a5cca5c4fe78f42879ffe69b Mon Sep 17 00:00:00 2001 From: Robin Burchell Date: Fri, 6 Apr 2012 16:34:19 +0200 Subject: Deprecate qMemCopy/qMemSet in favour of their stdlib equivilents. Just like qMalloc/qRealloc/qFree, there is absolutely no reason to wrap these functions just to avoid an include, except to pay for it with worse runtime performance. On OS X, on byte sizes from 50 up to 1000, calling memset directly is 28-15% faster(!) than adding an additional call to qMemSet. The advantage on sizes above that is unmeasurable. For qMemCopy, the benefits are a little more modest: 16-7%. Change-Id: I98aa92bb765aea0448e3f20af42a039b369af0b3 Reviewed-by: Giuseppe D'Angelo Reviewed-by: John Brooks Reviewed-by: Thiago Macieira Reviewed-by: Lars Knoll --- src/widgets/kernel/qgridlayout.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qgridlayout.cpp b/src/widgets/kernel/qgridlayout.cpp index 39daf96eb8..c81158e0cd 100644 --- a/src/widgets/kernel/qgridlayout.cpp +++ b/src/widgets/kernel/qgridlayout.cpp @@ -779,7 +779,7 @@ void QGridLayoutPrivate::setupLayoutData(int hSpacing, int vSpacing) adjacent to which and compute the spacings correctly. */ QVarLengthArray grid(rr * cc); - qMemSet(grid.data(), 0, rr * cc * sizeof(QGridBox *)); + memset(grid.data(), 0, rr * cc * sizeof(QGridBox *)); /* Initialize 'sizes' and 'grid' data structures, and insert -- cgit v1.2.3 From 113af5706193e942225b66b22ef1ac89f5c1d2da Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Thu, 12 Apr 2012 01:03:19 +1000 Subject: Make QBoxLayout::insertItem() public. This commit addresses a Qt 5 to-do comment in the code. The method was already protected (so could already be made public by sub-classing), and already has documentation in qboxlayout.cpp. Task-number: QTBUG-25098 Change-Id: I5b51d34be8180becb63b8ad291879620f265bbec Reviewed-by: Lars Knoll --- src/widgets/kernel/qboxlayout.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qboxlayout.h b/src/widgets/kernel/qboxlayout.h index aac46ef1ec..9b1dace5ed 100644 --- a/src/widgets/kernel/qboxlayout.h +++ b/src/widgets/kernel/qboxlayout.h @@ -84,6 +84,7 @@ public: void insertSpacerItem(int index, QSpacerItem *spacerItem); void insertWidget(int index, QWidget *widget, int stretch = 0, Qt::Alignment alignment = 0); void insertLayout(int index, QLayout *layout, int stretch = 0); + void insertItem(int index, QLayoutItem *); int spacing() const; void setSpacing(int spacing); @@ -107,9 +108,6 @@ public: QLayoutItem *takeAt(int); int count() const; void setGeometry(const QRect&); -protected: - // ### Qt 5: make public - void insertItem(int index, QLayoutItem *); private: Q_DISABLE_COPY(QBoxLayout) -- cgit v1.2.3 From 4f929e01e0dbdbbc618083e5a10cdfb7edc7d9bc Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Wed, 11 Apr 2012 22:22:26 +1000 Subject: Address Qt 5 to-do comment for QColorDialog. - change customColor() to return QColor instead of QRgb. - change setCustomColor() and setStandardColor() to take a QColor instead of QRgb. - add missing standardColor() getter method. Task-number: QTBUG-25087 Change-Id: Ic6adb2031ef47f5e9b15fa3560a5322e6847c0bb Reviewed-by: Lars Knoll --- src/widgets/dialogs/qcolordialog.cpp | 29 +++++++++++++++++++---------- src/widgets/dialogs/qcolordialog.h | 9 ++++----- 2 files changed, 23 insertions(+), 15 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index 569a10653f..606b9b00f7 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -433,36 +433,45 @@ int QColorDialog::customCount() /*! \since 4.5 - Returns the custom color at the given \a index as a QRgb value. + Returns the custom color at the given \a index as a QColor value. */ -QRgb QColorDialog::customColor(int index) +QColor QColorDialog::customColor(int index) { - return QColorDialogOptions::customColor(index); + return QColor(QColorDialogOptions::customColor(index)); } /*! - Sets the custom color at \a index to the QRgb \a color value. + Sets the custom color at \a index to the QColor \a color value. \note This function does not apply to the Native Color Dialog on the Mac OS X platform. If you still require this function, use the QColorDialog::DontUseNativeDialog option. */ -void QColorDialog::setCustomColor(int index, QRgb color) +void QColorDialog::setCustomColor(int index, QColor color) { - QColorDialogOptions::setCustomColor(index, color); + QColorDialogOptions::setCustomColor(index, color.rgba()); } /*! - Sets the standard color at \a index to the QRgb \a color value. + \since 5.0 + + Returns the standard color at the given \a index as a QColor value. +*/ +QColor QColorDialog::standardColor(int index) +{ + return QColor(QColorDialogOptions::standardColor(index)); +} + +/*! + Sets the standard color at \a index to the QColor \a color value. \note This function does not apply to the Native Color Dialog on the Mac OS X platform. If you still require this function, use the QColorDialog::DontUseNativeDialog option. */ - -void QColorDialog::setStandardColor(int index, QRgb color) +void QColorDialog::setStandardColor(int index, QColor color) { - QColorDialogOptions::setStandardColor(index, color); + QColorDialogOptions::setStandardColor(index, color.rgba()); } static inline void rgb2hsv(QRgb rgb, int &h, int &s, int &v) diff --git a/src/widgets/dialogs/qcolordialog.h b/src/widgets/dialogs/qcolordialog.h index cfb54a7eb9..1daead3879 100644 --- a/src/widgets/dialogs/qcolordialog.h +++ b/src/widgets/dialogs/qcolordialog.h @@ -102,12 +102,11 @@ public: // obsolete static QRgb getRgba(QRgb rgba = 0xffffffff, bool *ok = 0, QWidget *parent = 0); - // ### Qt 5: use QColor in signatures static int customCount(); - static QRgb customColor(int index); - static void setCustomColor(int index, QRgb color); - static void setStandardColor(int index, QRgb color); - + static QColor customColor(int index); + static void setCustomColor(int index, QColor color); + static QColor standardColor(int index); + static void setStandardColor(int index, QColor color); Q_SIGNALS: void currentColorChanged(const QColor &color); -- cgit v1.2.3 From 94519a441cf1ea77f1422c44a7ef8ec15171ad04 Mon Sep 17 00:00:00 2001 From: Jason McDonald Date: Wed, 11 Apr 2012 22:52:21 +1000 Subject: Address Qt 5 to-do comments related to QFileSystemModel. - QFileSystemModel::rmdir() and QFileSystemModel::remove() changed to non-const -- they don't change the object, but they do change the file system, and the Qt way is to be non-const if having side-effects on external entities. - The comment on incompatibility between entryList and QFileInfo will not be fixed as doing so is likely to break existing code. - The comment on removing the internal resolvedSymLinks variable has been removed, as the variable is still used. Task-number: QTBUG-25088 Change-Id: I20456e4d116076403d9c4d4692ee05c178a1ed17 Reviewed-by: Lars Knoll --- src/widgets/dialogs/qfilesystemmodel.cpp | 11 +++++------ src/widgets/dialogs/qfilesystemmodel.h | 4 ++-- src/widgets/dialogs/qfilesystemmodel_p.h | 1 - 3 files changed, 7 insertions(+), 9 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/dialogs/qfilesystemmodel.cpp b/src/widgets/dialogs/qfilesystemmodel.cpp index 809024ae6d..a7ae4b366b 100644 --- a/src/widgets/dialogs/qfilesystemmodel.cpp +++ b/src/widgets/dialogs/qfilesystemmodel.cpp @@ -129,7 +129,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn bool QFileSystemModel::rmdir(const QModelIndex &index) const + \fn bool QFileSystemModel::rmdir(const QModelIndex &index) Removes the directory corresponding to the model item \a index in the file system model and \b{deletes the corresponding directory from the @@ -185,7 +185,7 @@ QT_BEGIN_NAMESPACE */ /*! - \fn bool QFileSystemModel::remove(const QModelIndex &index) const + \fn bool QFileSystemModel::remove(const QModelIndex &index) Removes the model item \a index from the file system model and \b{deletes the corresponding file from the file system}, returning true if successful. If the @@ -197,7 +197,7 @@ QT_BEGIN_NAMESPACE \sa rmdir() */ -bool QFileSystemModel::remove(const QModelIndex &aindex) const +bool QFileSystemModel::remove(const QModelIndex &aindex) { //### TODO optim QString path = filePath(aindex); @@ -1653,7 +1653,7 @@ bool QFileSystemModel::event(QEvent *event) return QAbstractItemModel::event(event); } -bool QFileSystemModel::rmdir(const QModelIndex &aindex) const +bool QFileSystemModel::rmdir(const QModelIndex &aindex) { QString path = filePath(aindex); QFileSystemModelPrivate * d = const_cast(d_func()); @@ -1985,8 +1985,7 @@ bool QFileSystemModelPrivate::filtersAcceptsNode(const QFileSystemNode *node) co const bool hideDot = (filters & QDir::NoDot); const bool hideDotDot = (filters & QDir::NoDotDot); - // Note that we match the behavior of entryList and not QFileInfo on this and this - // incompatibility won't be fixed until Qt 5 at least + // Note that we match the behavior of entryList and not QFileInfo on this. bool isDot = (node->fileName == QLatin1String(".")); bool isDotDot = (node->fileName == QLatin1String("..")); if ( (hideHidden && !(isDot || isDotDot) && node->isHidden()) diff --git a/src/widgets/dialogs/qfilesystemmodel.h b/src/widgets/dialogs/qfilesystemmodel.h index 5a9139266d..875044e785 100644 --- a/src/widgets/dialogs/qfilesystemmodel.h +++ b/src/widgets/dialogs/qfilesystemmodel.h @@ -138,12 +138,12 @@ public: QDateTime lastModified(const QModelIndex &index) const; QModelIndex mkdir(const QModelIndex &parent, const QString &name); - bool rmdir(const QModelIndex &index) const; // ### Qt5: should not be const + bool rmdir(const QModelIndex &index); inline QString fileName(const QModelIndex &index) const; inline QIcon fileIcon(const QModelIndex &index) const; QFile::Permissions permissions(const QModelIndex &index) const; inline QFileInfo fileInfo(const QModelIndex &index) const; - bool remove(const QModelIndex &index) const; + bool remove(const QModelIndex &index); protected: QFileSystemModel(QFileSystemModelPrivate &, QObject *parent = 0); diff --git a/src/widgets/dialogs/qfilesystemmodel_p.h b/src/widgets/dialogs/qfilesystemmodel_p.h index 0e982140b5..3a02b91b09 100644 --- a/src/widgets/dialogs/qfilesystemmodel_p.h +++ b/src/widgets/dialogs/qfilesystemmodel_p.h @@ -315,7 +315,6 @@ public: #ifndef QT_NO_REGEXP QList nameFilters; #endif - // ### Qt 5: resolvedSymLinks goes away QHash resolvedSymLinks; QFileSystemNode root; -- cgit v1.2.3 From 03dbba9a62ea6391639c54ccc89ea75d4a872597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thorbj=C3=B8rn=20Lund=20Martsum?= Date: Fri, 16 Mar 2012 07:00:45 +0100 Subject: QLayoutItem - make controlTypes a virtual function. Just implementing the ### Qt5 suggestion about making controlTypes a virtual function. Change-Id: Ic1db47fe488f089de965438e456e9b48e0b96f32 Reviewed-by: Girish Ramakrishnan Reviewed-by: Lars Knoll --- src/widgets/kernel/qlayout.cpp | 13 +++++++++++++ src/widgets/kernel/qlayout.h | 1 + src/widgets/kernel/qlayoutitem.cpp | 16 +++++----------- src/widgets/kernel/qlayoutitem.h | 4 ++-- 4 files changed, 21 insertions(+), 13 deletions(-) (limited to 'src/widgets') diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp index 541350c35c..8c4e988411 100644 --- a/src/widgets/kernel/qlayout.cpp +++ b/src/widgets/kernel/qlayout.cpp @@ -524,6 +524,19 @@ bool QLayout::isEmpty() const return true; } +/*! + \reimp +*/ +QSizePolicy::ControlTypes QLayout::controlTypes() const +{ + if (count() == 0) + return QSizePolicy::DefaultType; + QSizePolicy::ControlTypes types; + for (int i = count() - 1; i >= 0; --i) + types |= itemAt(i)->controlTypes(); + return types; +} + /*! \reimp */ diff --git a/src/widgets/kernel/qlayout.h b/src/widgets/kernel/qlayout.h index 5524443ab1..9a13922cb1 100644 --- a/src/widgets/kernel/qlayout.h +++ b/src/widgets/kernel/qlayout.h @@ -131,6 +131,7 @@ public: virtual int indexOf(QWidget *) const; virtual int count() const = 0; bool isEmpty() const; + QSizePolicy::ControlTypes controlTypes() const; int totalHeightForWidth(int w) const; QSize totalMinimumSize() const; diff --git a/src/widgets/kernel/qlayoutitem.cpp b/src/widgets/kernel/qlayoutitem.cpp index 814b807b82..8e08f5f39f 100644 --- a/src/widgets/kernel/qlayoutitem.cpp +++ b/src/widgets/kernel/qlayoutitem.cpp @@ -414,17 +414,6 @@ int QLayoutItem::heightForWidth(int /* w */) const */ QSizePolicy::ControlTypes QLayoutItem::controlTypes() const { - // ### Qt 5: This function should probably be virtual instead - if (const QWidget *widget = const_cast(this)->widget()) { - return widget->sizePolicy().controlType(); - } else if (const QLayout *layout = const_cast(this)->layout()) { - if (layout->count() == 0) - return QSizePolicy::DefaultType; - QSizePolicy::ControlTypes types; - for (int i = layout->count() - 1; i >= 0; --i) - types |= layout->itemAt(i)->controlTypes(); - return types; - } return QSizePolicy::DefaultType; } @@ -688,6 +677,11 @@ bool QWidgetItem::isEmpty() const return wid->isHidden() || wid->isWindow(); } +QSizePolicy::ControlTypes QWidgetItem::controlTypes() const +{ + return wid->sizePolicy().controlType(); +} + /*! \class QWidgetItemV2 \internal diff --git a/src/widgets/kernel/qlayoutitem.h b/src/widgets/kernel/qlayoutitem.h index 76aae6f794..dacbf1ea68 100644 --- a/src/widgets/kernel/qlayoutitem.h +++ b/src/widgets/kernel/qlayoutitem.h @@ -83,7 +83,7 @@ public: Qt::Alignment alignment() const { return align; } void setAlignment(Qt::Alignment a); - QSizePolicy::ControlTypes controlTypes() const; + virtual QSizePolicy::ControlTypes controlTypes() const; protected: Qt::Alignment align; @@ -135,7 +135,7 @@ public: bool hasHeightForWidth() const; int heightForWidth(int) const; - + QSizePolicy::ControlTypes controlTypes() const; protected: QWidget *wid; }; -- cgit v1.2.3