diff options
Diffstat (limited to 'src/widgets/widgets/qtoolbarlayout.cpp')
-rw-r--r-- | src/widgets/widgets/qtoolbarlayout.cpp | 118 |
1 files changed, 42 insertions, 76 deletions
diff --git a/src/widgets/widgets/qtoolbarlayout.cpp b/src/widgets/widgets/qtoolbarlayout.cpp index 03368fd5c2..cc842e2657 100644 --- a/src/widgets/widgets/qtoolbarlayout.cpp +++ b/src/widgets/widgets/qtoolbarlayout.cpp @@ -1,41 +1,5 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtWidgets module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only #include <qapplication.h> #include <qaction.h> @@ -48,7 +12,7 @@ #include <qmenu.h> #include <qdebug.h> #include <qmath.h> -#ifdef Q_OS_OSX +#ifdef Q_OS_MACOS #include <qpa/qplatformnativeinterface.h> #endif @@ -69,13 +33,13 @@ extern QMainWindowLayout *qt_mainwindow_layout(const QMainWindow *window); */ QToolBarItem::QToolBarItem(QWidget *widget) - : QWidgetItem(widget), action(0), customWidget(false) + : QWidgetItem(widget), action(nullptr), customWidget(false) { } bool QToolBarItem::isEmpty() const { - return action == 0 || !action->isVisible(); + return action == nullptr || !action->isVisible(); } /****************************************************************************** @@ -84,7 +48,7 @@ bool QToolBarItem::isEmpty() const QToolBarLayout::QToolBarLayout(QWidget *parent) : QLayout(parent), expanded(false), animating(false), dirty(true), - expanding(false), empty(true), expandFlag(false), popupMenu(0) + expanding(false), empty(true), expandFlag(false), popupMenu(nullptr) { QToolBar *tb = qobject_cast<QToolBar*>(parent); if (!tb) @@ -132,15 +96,15 @@ bool QToolBarLayout::hasExpandFlag() const void QToolBarLayout::setUsePopupMenu(bool set) { - if (!dirty && ((popupMenu == 0) == set)) + if (!dirty && ((popupMenu == nullptr) == set)) invalidate(); if (!set) { QObject::connect(extension, SIGNAL(clicked(bool)), this, SLOT(setExpanded(bool)), Qt::UniqueConnection); extension->setPopupMode(QToolButton::DelayedPopup); - extension->setMenu(0); + extension->setMenu(nullptr); delete popupMenu; - popupMenu = 0; + popupMenu = nullptr; } else { QObject::disconnect(extension, SIGNAL(clicked(bool)), this, SLOT(setExpanded(bool))); @@ -168,22 +132,22 @@ void QToolBarLayout::addItem(QLayoutItem*) QLayoutItem *QToolBarLayout::itemAt(int index) const { - if (index < 0 || index >= items.count()) - return 0; + if (index < 0 || index >= items.size()) + return nullptr; return items.at(index); } QLayoutItem *QToolBarLayout::takeAt(int index) { - if (index < 0 || index >= items.count()) - return 0; + if (index < 0 || index >= items.size()) + return nullptr; QToolBarItem *item = items.takeAt(index); if (popupMenu) popupMenu->removeAction(item->action); QWidgetAction *widgetAction = qobject_cast<QWidgetAction*>(item->action); - if (widgetAction != 0 && item->customWidget) { + if (widgetAction != nullptr && item->customWidget) { widgetAction->releaseWidget(item->widget()); } else { // destroy the QToolButton/QToolBarSeparator @@ -198,7 +162,7 @@ QLayoutItem *QToolBarLayout::takeAt(int index) void QToolBarLayout::insertAction(int index, QAction *action) { index = qMax(0, index); - index = qMin(items.count(), index); + index = qMin(items.size(), index); QToolBarItem *item = createItem(action); if (item) { @@ -207,9 +171,9 @@ void QToolBarLayout::insertAction(int index, QAction *action) } } -int QToolBarLayout::indexOf(const QGuiAction *action) const +int QToolBarLayout::indexOf(const QAction *action) const { - for (int i = 0; i < items.count(); ++i) { + for (int i = 0; i < items.size(); ++i) { if (items.at(i)->action == action) return i; } @@ -218,7 +182,7 @@ int QToolBarLayout::indexOf(const QGuiAction *action) const int QToolBarLayout::count() const { - return items.count(); + return items.size(); } bool QToolBarLayout::isEmpty() const @@ -251,7 +215,7 @@ bool QToolBarLayout::movable() const if (!tb) return false; QMainWindow *win = qobject_cast<QMainWindow*>(tb->parentWidget()); - return tb->isMovable() && win != 0; + return tb->isMovable() && win != nullptr; } void QToolBarLayout::updateGeomArray() const @@ -282,10 +246,10 @@ void QToolBarLayout::updateGeomArray() const that->expanding = false; that->empty = false; - QVector<QLayoutStruct> a(items.count() + 1); // + 1 for the stretch + QList<QLayoutStruct> a(items.size() + 1); // + 1 for the stretch int count = 0; - for (int i = 0; i < items.count(); ++i) { + for (int i = 0; i < items.size(); ++i) { QToolBarItem *item = items.at(i); QSize max = item->maximumSize(); @@ -332,7 +296,7 @@ void QToolBarLayout::updateGeomArray() const rpick(o, that->minSize) += handleExtent; that->minSize += QSize(pick(Qt::Horizontal, margins), pick(Qt::Vertical, margins)); - if (items.count() > 1) + if (items.size() > 1) rpick(o, that->minSize) += spacing + extensionExtent; rpick(o, that->hint) += handleExtent; @@ -343,12 +307,12 @@ void QToolBarLayout::updateGeomArray() const static bool defaultWidgetAction(QToolBarItem *item) { QWidgetAction *a = qobject_cast<QWidgetAction*>(item->action); - return a != 0 && a->defaultWidget() == item->widget(); + return a != nullptr && a->defaultWidget() == item->widget(); } void QToolBarLayout::updateMacBorderMetrics() { -#ifdef Q_OS_OSX +#ifdef Q_OS_MACOS QToolBar *tb = qobject_cast<QToolBar*>(parentWidget()); if (!tb) return; @@ -360,6 +324,8 @@ void QToolBarLayout::updateMacBorderMetrics() return; QPlatformNativeInterface *nativeInterface = QApplication::platformNativeInterface(); + if (!nativeInterface) + return; // Not Cocoa platform plugin. QPlatformNativeInterface::NativeResourceForIntegrationFunction function = nativeInterface->nativeResourceFunctionForIntegration("registerContentBorderArea"); if (!function) @@ -458,15 +424,15 @@ bool QToolBarLayout::layoutActions(const QSize &size) if (space <= 0) return false; // nothing to do. - if(popupMenu) + if (popupMenu) popupMenu->clear(); bool ranOutOfSpace = false; int rows = 0; int rowPos = perp(o, rect.topLeft()) + perp(o, QSize(margins.top(), margins.left())); int i = 0; - while (i < items.count()) { - QVector<QLayoutStruct> a = geomArray; + while (i < items.size()) { + QList<QLayoutStruct> a = geomArray; int start = i; int size = 0; @@ -475,7 +441,7 @@ bool QToolBarLayout::layoutActions(const QSize &size) int count = 0; int maximumSize = 0; bool expansiveRow = false; - for (; i < items.count(); ++i) { + for (; i < items.size(); ++i) { if (a[i].empty) continue; @@ -546,7 +512,7 @@ bool QToolBarLayout::layoutActions(const QSize &size) } if (!expanded) { - for (int j = i; j < items.count(); ++j) { + for (int j = i; j < items.size(); ++j) { QToolBarItem *item = items.at(j); if (!item->widget()->isHidden()) hideWidgets << item->widget(); @@ -568,12 +534,12 @@ bool QToolBarLayout::layoutActions(const QSize &size) // widgets into the menu. If only custom widget actions are chopped off, the popup menu // is empty. So we show the little extension button to show something is chopped off, // but we make it disabled. - extension->setEnabled(popupMenu == 0 || !extensionMenuContainsOnlyWidgetActions); + extension->setEnabled(popupMenu == nullptr || !extensionMenuContainsOnlyWidgetActions); // we have to do the show/hide here, because it triggers more calls to setGeometry :( - for (int i = 0; i < showWidgets.count(); ++i) + for (int i = 0; i < showWidgets.size(); ++i) showWidgets.at(i)->show(); - for (int i = 0; i < hideWidgets.count(); ++i) + for (int i = 0; i < hideWidgets.size(); ++i) hideWidgets.at(i)->hide(); return ranOutOfSpace; @@ -600,7 +566,7 @@ QSize QToolBarLayout::expandedSize(const QSize &size) const int total_w = 0; int count = 0; - for (int x = 0; x < items.count(); ++x) { + for (int x = 0; x < items.size(); ++x) { if (!geomArray[x].empty) { total_w += (count == 0 ? 0 : spacing) + geomArray[x].minimumSize; ++count; @@ -615,18 +581,18 @@ QSize QToolBarLayout::expandedSize(const QSize &size) const ++rows; // we want to expand to at least two rows int space = total_w/rows + spacing + extensionExtent; space = qMax(space, min_w - pick(o, margins) - handleExtent); - if (win != 0) + if (win != nullptr) space = qMin(space, pick(o, win->size()) - pick(o, margins) - handleExtent); int w = 0; int h = 0; int i = 0; - while (i < items.count()) { + while (i < items.size()) { int count = 0; int size = 0; int prev = -1; int rowHeight = 0; - for (; i < items.count(); ++i) { + for (; i < items.size(); ++i) { if (geomArray[i].empty) continue; @@ -651,7 +617,7 @@ QSize QToolBarLayout::expandedSize(const QSize &size) const w += pick(Qt::Horizontal, margins) + handleExtent + spacing + extensionExtent; w = qMax(w, min_w); - if (win != 0) + if (win != nullptr) w = qMin(w, pick(o, win->size())); h += pick(Qt::Vertical, margins) - spacing; //there is no spacing before the first row @@ -710,14 +676,14 @@ QToolBarItem *QToolBarLayout::createItem(QAction *action) { bool customWidget = false; bool standardButtonWidget = false; - QWidget *widget = 0; + QWidget *widget = nullptr; QToolBar *tb = qobject_cast<QToolBar*>(parentWidget()); if (!tb) - return (QToolBarItem *)0; + return (QToolBarItem *)nullptr; if (QWidgetAction *widgetAction = qobject_cast<QWidgetAction *>(action)) { widget = widgetAction->requestWidget(tb); - if (widget != 0) { + if (widget != nullptr) { widget->setAttribute(Qt::WA_LayoutUsesWidgetRect); customWidget = true; } |