diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2016-02-27 02:52:16 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2016-03-03 07:53:09 +0000 |
commit | 0077435897ff8c2d264110a9f4a0330754b92f0a (patch) | |
tree | 918897a0c01c908108b273b8022aea590c789189 | |
parent | fb591c73661055bf48a44b4742a2399ae8dc684a (diff) | |
download | qtbase-0077435897ff8c2d264110a9f4a0330754b92f0a.tar.gz |
QMainWindowLayout: eradicate Q_FOREACH loops: Extract Method allMyDockWidgets()
Extract a loop repeated four times in the code into a
separate function. Port to use C++11 range-for loops
and not create temporary QLists.
Saves 2.4KiB in text size on optimized GCC 5.3 Linux
AMD64 builds.
Change-Id: I7eb78ffaac33627b595e35cafb6ce0769fb760a8
Reviewed-by: Lars Knoll <lars.knoll@theqtcompany.com>
-rw-r--r-- | src/widgets/widgets/qmainwindowlayout.cpp | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp index 63a6c718bc..99c32e9acc 100644 --- a/src/widgets/widgets/qmainwindowlayout.cpp +++ b/src/widgets/widgets/qmainwindowlayout.cpp @@ -852,6 +852,25 @@ static QList<T> findChildrenHelper(const QObject *o) return result; } +#ifndef QT_NO_DOCKWIDGET +static QList<QDockWidget*> allMyDockWidgets(const QWidget *mainWindow) +{ + QList<QDockWidget*> result; + for (QObject *c : mainWindow->children()) { + if (auto *dw = qobject_cast<QDockWidget*>(c)) { + result.append(dw); + } else if (auto *gw = qobject_cast<QDockWidgetGroupWindow*>(c)) { + for (QObject *c : gw->children()) { + if (auto *dw = qobject_cast<QDockWidget*>(c)) + result.append(dw); + } + } + } + + return result; +} +#endif // QT_NO_DOCKWIDGET + //pre4.3 tests the format that was used before 4.3 bool QMainWindowLayoutState::checkFormat(QDataStream &stream) { @@ -875,9 +894,7 @@ bool QMainWindowLayoutState::checkFormat(QDataStream &stream) #ifndef QT_NO_DOCKWIDGET case QDockAreaLayout::DockWidgetStateMarker: { - QList<QDockWidget *> dockWidgets = findChildrenHelper<QDockWidget*>(mainWindow); - foreach (QDockWidgetGroupWindow *floating, findChildrenHelper<QDockWidgetGroupWindow*>(mainWindow)) - dockWidgets += findChildrenHelper<QDockWidget*>(floating); + const auto dockWidgets = allMyDockWidgets(mainWindow); if (!dockAreaLayout.restoreState(stream, dockWidgets, true /*testing*/)) { return false; } @@ -889,9 +906,7 @@ bool QMainWindowLayoutState::checkFormat(QDataStream &stream) QRect geom; stream >> geom; QDockAreaLayoutInfo info; - QList<QDockWidget *> dockWidgets = findChildrenHelper<QDockWidget*>(mainWindow); - foreach (QDockWidgetGroupWindow *floating, findChildrenHelper<QDockWidgetGroupWindow*>(mainWindow)) - dockWidgets += findChildrenHelper<QDockWidget*>(floating); + auto dockWidgets = allMyDockWidgets(mainWindow); if (!info.restoreState(stream, dockWidgets, true /* testing*/)) return false; } @@ -935,9 +950,7 @@ bool QMainWindowLayoutState::restoreState(QDataStream &_stream, #ifndef QT_NO_DOCKWIDGET case QDockAreaLayout::DockWidgetStateMarker: { - QList<QDockWidget *> dockWidgets = findChildrenHelper<QDockWidget*>(mainWindow); - foreach (QDockWidgetGroupWindow *floating, findChildrenHelper<QDockWidgetGroupWindow*>(mainWindow)) - dockWidgets += findChildrenHelper<QDockWidget*>(floating); + const auto dockWidgets = allMyDockWidgets(mainWindow); if (!dockAreaLayout.restoreState(stream, dockWidgets)) return false; @@ -961,9 +974,7 @@ bool QMainWindowLayoutState::restoreState(QDataStream &_stream, #ifndef QT_NO_TABBAR case QDockAreaLayout::FloatingDockWidgetTabMarker: { - QList<QDockWidget *> dockWidgets = findChildrenHelper<QDockWidget*>(mainWindow); - foreach (QDockWidgetGroupWindow *floating, findChildrenHelper<QDockWidgetGroupWindow*>(mainWindow)) - dockWidgets += findChildrenHelper<QDockWidget*>(floating); + auto dockWidgets = allMyDockWidgets(mainWindow); QDockWidgetGroupWindow* floatingTab = qt_mainwindow_layout(mainWindow)->createTabbedDockWindow(); *floatingTab->layoutInfo() = QDockAreaLayoutInfo(&dockAreaLayout.sep, QInternal::LeftDock, Qt::Horizontal, QTabBar::RoundedSouth, mainWindow); |