diff options
author | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-08-17 19:55:41 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> | 2015-08-17 19:55:41 +0200 |
commit | 5a039bf53e88a727cc52bfedb21796ebfade01a1 (patch) | |
tree | abce106bf1cb1042dcacd249152a11343caa0313 /src/widgets | |
parent | dbcf5730ac2d4f61f872e50126d3ce73e3f6031e (diff) | |
parent | 89302b8b88b2bfa9581bb15c1caa052cb6d76988 (diff) |
Merge dev into 5.6
Change-Id: I061f2513ef58f696e75b11928d89aaaf059659a3
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/dialogs/qcolordialog.cpp | 51 | ||||
-rw-r--r-- | src/widgets/widgets/qdockarealayout.cpp | 47 | ||||
-rw-r--r-- | src/widgets/widgets/qdockarealayout_p.h | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qmainwindow.cpp | 29 | ||||
-rw-r--r-- | src/widgets/widgets/qmainwindow.h | 3 |
5 files changed, 81 insertions, 50 deletions
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp index 914ee8ec9c..2ebbaaee10 100644 --- a/src/widgets/dialogs/qcolordialog.cpp +++ b/src/widgets/dialogs/qcolordialog.cpp @@ -159,23 +159,6 @@ public: QWindow dummyTransparentWindow; #endif -#ifdef Q_DEAD_CODE_FROM_QT4_MAC - void openCocoaColorPanel(const QColor &initial, - QWidget *parent, const QString &title, QColorDialog::ColorDialogOptions options); - void closeCocoaColorPanel(); - void releaseCocoaColorPanelDelegate(); - void setCocoaPanelColor(const QColor &color); - - inline void done(int result) { q_func()->done(result); } - inline QColorDialog *colorDialog() { return q_func(); } - - void *delegate; - - static bool sharedColorPanelAvailable; - - void _q_macRunNativeAppModalPanel(); - void mac_nativeDialogModalHelp(); -#endif private: virtual void initHelper(QPlatformDialogHelper *h) Q_DECL_OVERRIDE; virtual void helperPrepareShow(QPlatformDialogHelper *h) Q_DECL_OVERRIDE; @@ -1731,9 +1714,6 @@ void QColorDialogPrivate::init(const QColor &initial) if (!nativeDialogInUse) initWidgets(); -#ifdef Q_DEAD_CODE_FROM_QT4_MAC - delegate = 0; -#endif #ifdef Q_OS_WIN32 dummyTransparentWindow.resize(1, 1); dummyTransparentWindow.setFlags(Qt::Tool | Qt::FramelessWindowHint); @@ -2135,11 +2115,6 @@ QColorDialog::ColorDialogOptions QColorDialog::options() const \sa color, colorSelected() */ -#ifdef Q_DEAD_CODE_FROM_QT4_MAC -// can only have one Cocoa color panel active -bool QColorDialogPrivate::sharedColorPanelAvailable = true; -#endif - /*! \fn void QColorDialog::colorSelected(const QColor &color); @@ -2166,23 +2141,6 @@ void QColorDialog::setVisible(bool visible) if (visible) d->selectedQColor = QColor(); -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) - if (visible) { - if (d->delegate || (QColorDialogPrivate::sharedColorPanelAvailable && - !(testAttribute(Qt::WA_DontShowOnScreen) || (d->opts & DontUseNativeDialog)))){ - d->openCocoaColorPanel(currentColor(), parentWidget(), windowTitle(), options()); - QColorDialogPrivate::sharedColorPanelAvailable = false; - setAttribute(Qt::WA_DontShowOnScreen); - } - setWindowFlags(windowModality() == Qt::WindowModal ? Qt::Sheet : DefaultWindowFlags); - } else { - if (d->delegate) { - d->closeCocoaColorPanel(); - setAttribute(Qt::WA_DontShowOnScreen, false); - } - } -#else - if (d->nativeDialogInUse) { d->setNativeDialogVisible(visible); // Set WA_DontShowOnScreen so that QDialog::setVisible(visible) below @@ -2191,7 +2149,6 @@ void QColorDialog::setVisible(bool visible) } else { setAttribute(Qt::WA_DontShowOnScreen, false); } -#endif QDialog::setVisible(visible); } @@ -2267,13 +2224,7 @@ QRgb QColorDialog::getRgba(QRgb initial, bool *ok, QWidget *parent) QColorDialog::~QColorDialog() { -#if defined(Q_DEAD_CODE_FROM_QT4_MAC) - Q_D(QColorDialog); - if (d->delegate) { - d->releaseCocoaColorPanelDelegate(); - QColorDialogPrivate::sharedColorPanelAvailable = true; - } -#endif + } /*! diff --git a/src/widgets/widgets/qdockarealayout.cpp b/src/widgets/widgets/qdockarealayout.cpp index c61984a457..0a00086138 100644 --- a/src/widgets/widgets/qdockarealayout.cpp +++ b/src/widgets/widgets/qdockarealayout.cpp @@ -3101,6 +3101,53 @@ void QDockAreaLayout::tabifyDockWidget(QDockWidget *first, QDockWidget *second) remove(index); } +void QDockAreaLayout::resizeDocks(const QList<QDockWidget *> &docks, + const QList<int> &sizes, Qt::Orientation o) +{ + if (docks.count() != sizes.count()) { + qWarning("QMainWidget::resizeDocks: size of the lists are not the same"); + return; + } + int count = docks.count(); + fallbackToSizeHints = false; + for (int i = 0; i < count; ++i) { + QList<int> path = indexOf(docks[i]); + if (path.isEmpty()) { + qWarning("QMainWidget::resizeDocks: one QDockWidget is not part of the layout"); + continue; + } + int size = sizes[i]; + if (size <= 0) { + qWarning("QMainWidget::resizeDocks: all sizes need to be larger than 0"); + size = 1; + } + + while (path.size() > 1) { + QDockAreaLayoutInfo *info = this->info(path); + if (!info->tabbed && info->o == o) { + info->item_list[path.last()].size = size; + int totalSize = 0; + foreach (const QDockAreaLayoutItem &item, info->item_list) { + if (!item.skip()) { + if (totalSize != 0) + totalSize += sep; + totalSize += item.size == -1 ? pick(o, item.sizeHint()) : item.size; + } + } + size = totalSize; + } + path.removeLast(); + } + + const int dockNum = path.first(); + Q_ASSERT(dockNum < QInternal::DockCount); + QRect &r = this->docks[dockNum].rect; + QSize s = r.size(); + rpick(o, s) = size; + r.setSize(s); + } +} + void QDockAreaLayout::splitDockWidget(QDockWidget *after, QDockWidget *dockWidget, Qt::Orientation orientation) diff --git a/src/widgets/widgets/qdockarealayout_p.h b/src/widgets/widgets/qdockarealayout_p.h index 93b005f64f..5d352f0124 100644 --- a/src/widgets/widgets/qdockarealayout_p.h +++ b/src/widgets/widgets/qdockarealayout_p.h @@ -268,6 +268,7 @@ public: void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget, Qt::Orientation orientation); void tabifyDockWidget(QDockWidget *first, QDockWidget *second); + void resizeDocks(const QList<QDockWidget *> &docks, const QList<int> &sizes, Qt::Orientation o); void apply(bool animate); diff --git a/src/widgets/widgets/qmainwindow.cpp b/src/widgets/widgets/qmainwindow.cpp index 5d53e7def4..ff4bb3cc98 100644 --- a/src/widgets/widgets/qmainwindow.cpp +++ b/src/widgets/widgets/qmainwindow.cpp @@ -1237,6 +1237,35 @@ void QMainWindow::removeDockWidget(QDockWidget *dockwidget) Qt::DockWidgetArea QMainWindow::dockWidgetArea(QDockWidget *dockwidget) const { return d_func()->layout->dockWidgetArea(dockwidget); } + +/*! + \since 5.6 + Resizes the dock widgets in the list \a docks to the corresponding size in + pixels from the list \a sizes. If \a orientation is Qt::Horizontal, adjusts + the width, otherwise adjusts the height of the dock widgets. + The sizes will be adjusted such that the maximum and the minimum sizes are + respected and the QMainWindow itself will not be resized. + Any additional/missing space is distributed amongst the widgets according + to the relative weight of the sizes. + + Example: + \code + resizeDocks({blueWidget, yellowWidget}, {20 , 40}, Qt::Horizontal); + \endcode + If the blue and the yellow widget are nested on the same level they will be + resized such that the yellowWidget is twice as big as the blueWidget + + If some widgets are grouped in tabs, only one widget per group should be + specified. Widgets not in the list might be changed to repect the constraints. +*/ +void QMainWindow::resizeDocks(const QList<QDockWidget *> &docks, + const QList<int> &sizes, Qt::Orientation orientation) +{ + d_func()->layout->layoutState.dockAreaLayout.resizeDocks(docks, sizes, orientation); + d_func()->layout->invalidate(); +} + + #endif // QT_NO_DOCKWIDGET /*! diff --git a/src/widgets/widgets/qmainwindow.h b/src/widgets/widgets/qmainwindow.h index ab6ee22748..70d78a7904 100644 --- a/src/widgets/widgets/qmainwindow.h +++ b/src/widgets/widgets/qmainwindow.h @@ -165,6 +165,9 @@ public: bool restoreDockWidget(QDockWidget *dockwidget); Qt::DockWidgetArea dockWidgetArea(QDockWidget *dockwidget) const; + + void resizeDocks(const QList<QDockWidget *> &docks, + const QList<int> &sizes, Qt::Orientation orientation); #endif // QT_NO_DOCKWIDGET QByteArray saveState(int version = 0) const; |