diff options
Diffstat (limited to 'src/widgets/widgets/qlineedit_p.cpp')
-rw-r--r-- | src/widgets/widgets/qlineedit_p.cpp | 95 |
1 files changed, 68 insertions, 27 deletions
diff --git a/src/widgets/widgets/qlineedit_p.cpp b/src/widgets/widgets/qlineedit_p.cpp index b90ddacb7e..7da1d911ee 100644 --- a/src/widgets/widgets/qlineedit_p.cpp +++ b/src/widgets/widgets/qlineedit_p.cpp @@ -1,31 +1,37 @@ /**************************************************************************** ** -** Copyright (C) 2015 The Qt Company Ltd. -** Contact: http://www.qt.io/licensing/ +** 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:LGPL21$ +** $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 http://www.qt.io/terms-conditions. For further -** information use the contact form at http://www.qt.io/contact-us. +** 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 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** 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. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company 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 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$ ** @@ -91,7 +97,7 @@ void QLineEditPrivate::_q_completionHighlighted(const QString &newText) } else { int c = control->cursor(); QString text = control->text(); - q->setText(text.left(c) + newText.mid(c)); + q->setText(text.leftRef(c) + newText.midRef(c)); control->moveCursor(control->end(), false); #ifndef Q_OS_ANDROID const bool mark = true; @@ -393,11 +399,11 @@ void QLineEditPrivate::_q_textChanged(const QString &text) lastTextSize = newTextSize; #ifndef QT_NO_ANIMATION const bool fadeIn = newTextSize > 0; - foreach (const SideWidgetEntry &e, leadingSideWidgets) { + for (const SideWidgetEntry &e : leadingSideWidgets) { if (e.flags & SideWidgetFadeInWithText) static_cast<QLineEditIconButton *>(e.widget)->animateShow(fadeIn); } - foreach (const SideWidgetEntry &e, trailingSideWidgets) { + for (const SideWidgetEntry &e : trailingSideWidgets) { if (e.flags & SideWidgetFadeInWithText) static_cast<QLineEditIconButton *>(e.widget)->animateShow(fadeIn); } @@ -436,7 +442,7 @@ QIcon QLineEditPrivate::clearButtonIcon() const void QLineEditPrivate::setClearButtonEnabled(bool enabled) { - foreach (const SideWidgetEntry &e, trailingSideWidgets) { + for (const SideWidgetEntry &e : trailingSideWidgets) { if (e.flags & SideWidgetClearButton) { e.action->setEnabled(enabled); break; @@ -453,13 +459,13 @@ void QLineEditPrivate::positionSideWidgets() const int delta = p.margin + p.widgetWidth; QRect widgetGeometry(QPoint(p.margin, (contentRect.height() - p.widgetHeight) / 2), QSize(p.widgetWidth, p.widgetHeight)); - foreach (const SideWidgetEntry &e, leftSideWidgetList()) { + for (const SideWidgetEntry &e : leftSideWidgetList()) { e.widget->setGeometry(widgetGeometry); if (e.action->isVisible()) widgetGeometry.moveLeft(widgetGeometry.left() + delta); } widgetGeometry.moveLeft(contentRect.width() - p.widgetWidth - p.margin); - foreach (const SideWidgetEntry &e, rightSideWidgetList()) { + for (const SideWidgetEntry &e : rightSideWidgetList()) { e.widget->setGeometry(widgetGeometry); if (e.action->isVisible()) widgetGeometry.moveLeft(widgetGeometry.left() - delta); @@ -469,13 +475,17 @@ void QLineEditPrivate::positionSideWidgets() QLineEditPrivate::PositionIndexPair QLineEditPrivate::findSideWidget(const QAction *a) const { - for (int i = 0; i < leadingSideWidgets.size(); ++i) { - if (a == leadingSideWidgets.at(i).action) + int i = 0; + for (const auto &e : leadingSideWidgets) { + if (a == e.action) return PositionIndexPair(QLineEdit::LeadingPosition, i); + ++i; } - for (int i = 0; i < trailingSideWidgets.size(); ++i) { - if (a == trailingSideWidgets.at(i).action) + i = 0; + for (const auto &e : trailingSideWidgets) { + if (a == e.action) return PositionIndexPair(QLineEdit::TrailingPosition, i); + ++i; } return PositionIndexPair(QLineEdit::LeadingPosition, -1); } @@ -509,8 +519,8 @@ QWidget *QLineEditPrivate::addAction(QAction *newAction, QAction *before, QLineE PositionIndexPair positionIndex = before ? findSideWidget(before) : PositionIndexPair(position, -1); SideWidgetEntryList &list = positionIndex.first == QLineEdit::TrailingPosition ? trailingSideWidgets : leadingSideWidgets; if (positionIndex.second < 0) - positionIndex.second = list.size(); - list.insert(positionIndex.second, SideWidgetEntry(w, newAction, flags)); + positionIndex.second = int(list.size()); + list.insert(list.begin() + positionIndex.second, SideWidgetEntry(w, newAction, flags)); positionSideWidgets(); w->show(); return w; @@ -523,7 +533,8 @@ void QLineEditPrivate::removeAction(QAction *action) if (positionIndex.second == -1) return; SideWidgetEntryList &list = positionIndex.first == QLineEdit::TrailingPosition ? trailingSideWidgets : leadingSideWidgets; - SideWidgetEntry entry = list.takeAt(positionIndex.second); + SideWidgetEntry entry = list[positionIndex.second]; + list.erase(list.begin() + positionIndex.second); if (entry.flags & SideWidgetCreatedByWidgetAction) static_cast<QWidgetAction *>(entry.action)->releaseWidget(entry.widget); else @@ -534,6 +545,36 @@ void QLineEditPrivate::removeAction(QAction *action) q->update(); } +static bool isSideWidgetVisible(const QLineEditPrivate::SideWidgetEntry &e) +{ + return e.widget->isVisible(); +} + +int QLineEditPrivate::effectiveLeftTextMargin() const +{ + int result = leftTextMargin; + if (!leftSideWidgetList().empty()) { + const SideWidgetParameters p = sideWidgetParameters(); + result += (p.margin + p.widgetWidth) + * int(std::count_if(leftSideWidgetList().begin(), leftSideWidgetList().end(), + isSideWidgetVisible)); + } + return result; +} + +int QLineEditPrivate::effectiveRightTextMargin() const +{ + int result = rightTextMargin; + if (!rightSideWidgetList().empty()) { + const SideWidgetParameters p = sideWidgetParameters(); + result += (p.margin + p.widgetWidth) + * int(std::count_if(rightSideWidgetList().begin(), rightSideWidgetList().end(), + isSideWidgetVisible)); + } + return result; +} + + QT_END_NAMESPACE #include "moc_qlineedit_p.cpp" |