File indexing completed on 2023-10-01 04:05:53
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"