File indexing completed on 2024-04-28 15:26:50

0001 /*
0002     SPDX-FileCopyrightText: 2006 Peter Penz <peter.penz@gmx.at>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kurlnavigatortogglebutton_p.h"
0008 
0009 #include <KIconLoader>
0010 #include <KLocalizedString>
0011 
0012 #include <QPaintEvent>
0013 #include <QPainter>
0014 #include <QStyle>
0015 
0016 namespace KDEPrivate
0017 {
0018 static constexpr int s_iconSize = KIconLoader::SizeSmallMedium;
0019 
0020 KUrlNavigatorToggleButton::KUrlNavigatorToggleButton(KUrlNavigator *parent)
0021     : KUrlNavigatorButtonBase(parent)
0022 {
0023     setCheckable(true);
0024     connect(this, &QAbstractButton::toggled, this, &KUrlNavigatorToggleButton::updateToolTip);
0025     connect(this, &QAbstractButton::clicked, this, &KUrlNavigatorToggleButton::updateCursor);
0026 
0027 #ifndef QT_NO_ACCESSIBILITY
0028     setAccessibleName(i18n("Edit mode"));
0029 #endif
0030 
0031     updateToolTip();
0032 }
0033 
0034 KUrlNavigatorToggleButton::~KUrlNavigatorToggleButton()
0035 {
0036 }
0037 
0038 QSize KUrlNavigatorToggleButton::sizeHint() const
0039 {
0040     QSize size = KUrlNavigatorButtonBase::sizeHint();
0041     size.setWidth(qMax(s_iconSize, iconSize().width()) + 4);
0042     return size;
0043 }
0044 
0045 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0046 void KUrlNavigatorToggleButton::enterEvent(QEnterEvent *event)
0047 #else
0048 void KUrlNavigatorToggleButton::enterEvent(QEvent *event)
0049 #endif
0050 {
0051     KUrlNavigatorButtonBase::enterEvent(event);
0052     updateCursor();
0053 }
0054 
0055 void KUrlNavigatorToggleButton::leaveEvent(QEvent *event)
0056 {
0057     KUrlNavigatorButtonBase::leaveEvent(event);
0058     setCursor(Qt::ArrowCursor);
0059 }
0060 
0061 void KUrlNavigatorToggleButton::paintEvent(QPaintEvent *event)
0062 {
0063     QPainter painter(this);
0064     painter.setClipRect(event->rect());
0065 
0066     const int buttonWidth = width();
0067     const int buttonHeight = height();
0068     if (isChecked()) {
0069         drawHoverBackground(&painter);
0070 
0071         if (m_pixmap.isNull()) {
0072             m_pixmap = QIcon::fromTheme(QStringLiteral("dialog-ok")).pixmap(QSize(s_iconSize, s_iconSize).expandedTo(iconSize()));
0073         }
0074         style()->drawItemPixmap(&painter, rect(), Qt::AlignCenter, m_pixmap);
0075     } else if (isDisplayHintEnabled(EnteredHint)) {
0076         painter.setPen(Qt::NoPen);
0077         painter.setBrush(palette().color(foregroundRole()));
0078 
0079         const int verticalGap = 4;
0080         const int caretWidth = 2;
0081         const int x = (layoutDirection() == Qt::LeftToRight) ? 0 : buttonWidth - caretWidth;
0082         painter.drawRect(x, verticalGap, caretWidth, buttonHeight - 2 * verticalGap);
0083     }
0084 }
0085 
0086 void KUrlNavigatorToggleButton::updateToolTip()
0087 {
0088     if (isChecked()) {
0089         setToolTip(i18n("Click for Location Navigation"));
0090     } else {
0091         setToolTip(i18n("Click to Edit Location"));
0092     }
0093 }
0094 
0095 void KUrlNavigatorToggleButton::updateCursor()
0096 {
0097     setCursor(isChecked() ? Qt::ArrowCursor : Qt::IBeamCursor);
0098 }
0099 
0100 } // namespace KDEPrivate
0101 
0102 #include "moc_kurlnavigatortogglebutton_p.cpp"