1/*
2 SPDX-FileCopyrightText: 2006 Peter Penz <peter.penz@gmx.at>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7#include "kurlnavigatortogglebutton_p.h"
8
9#include <KIconLoader>
10#include <KLocalizedString>
11
12#include <QPaintEvent>
13#include <QPainter>
14#include <QStyle>
15
16namespace KDEPrivate
17{
18static constexpr int s_iconSize = KIconLoader::SizeSmall;
19
20KUrlNavigatorToggleButton::KUrlNavigatorToggleButton(KUrlNavigator *parent)
21 : KUrlNavigatorButtonBase(parent)
22{
23 setCheckable(true);
24 connect(sender: this, signal: &QAbstractButton::toggled, context: this, slot: &KUrlNavigatorToggleButton::updateToolTip);
25 connect(sender: this, signal: &QAbstractButton::clicked, context: this, slot: &KUrlNavigatorToggleButton::updateCursor);
26
27#ifndef QT_NO_ACCESSIBILITY
28 setAccessibleName(i18n("Edit mode"));
29#endif
30
31 updateToolTip();
32}
33
34KUrlNavigatorToggleButton::~KUrlNavigatorToggleButton()
35{
36}
37
38QSize KUrlNavigatorToggleButton::sizeHint() const
39{
40 QSize size = KUrlNavigatorButtonBase::sizeHint();
41 size.setWidth(qMax(a: s_iconSize, b: iconSize().width()) + 4);
42 return size;
43}
44
45void KUrlNavigatorToggleButton::enterEvent(QEnterEvent *event)
46{
47 KUrlNavigatorButtonBase::enterEvent(event);
48 updateCursor();
49}
50
51void KUrlNavigatorToggleButton::leaveEvent(QEvent *event)
52{
53 KUrlNavigatorButtonBase::leaveEvent(event);
54 setCursor(Qt::ArrowCursor);
55}
56
57void KUrlNavigatorToggleButton::paintEvent(QPaintEvent *event)
58{
59 QPainter painter(this);
60 painter.setClipRect(event->rect());
61
62 // Draws the dialog-ok icon if checked, open-for-editing when unchecked
63 const QSize tickIconSize = QSize(s_iconSize, s_iconSize).expandedTo(otherSize: iconSize());
64 if (isChecked()) {
65 drawHoverBackground(painter: &painter);
66 m_pixmap = QIcon::fromTheme(QStringLiteral("dialog-ok")).pixmap(size: tickIconSize, devicePixelRatio: devicePixelRatioF());
67 style()->drawItemPixmap(painter: &painter, rect: rect(), alignment: Qt::AlignCenter, pixmap: m_pixmap);
68 } else {
69 const bool isHighlighted = isDisplayHintEnabled(hint: EnteredHint) || isDisplayHintEnabled(hint: DraggedHint) || isDisplayHintEnabled(hint: PopupActiveHint);
70 if (isHighlighted) {
71 m_pixmap = QIcon::fromTheme(QStringLiteral("open-for-editing")).pixmap(size: tickIconSize, devicePixelRatio: devicePixelRatioF());
72 style()->drawItemPixmap(painter: &painter, rect: rect(), alignment: Qt::AlignRight | Qt::AlignVCenter, pixmap: m_pixmap);
73 }
74 }
75}
76
77void KUrlNavigatorToggleButton::updateToolTip()
78{
79 if (isChecked()) {
80 setToolTip(i18n("Click for Location Navigation"));
81 } else {
82 setToolTip(i18n("Click to Edit Location"));
83 }
84}
85
86void KUrlNavigatorToggleButton::updateCursor()
87{
88 setCursor(isChecked() ? Qt::ArrowCursor : Qt::IBeamCursor);
89}
90
91} // namespace KDEPrivate
92
93#include "moc_kurlnavigatortogglebutton_p.cpp"
94

source code of kio/src/filewidgets/kurlnavigatortogglebutton.cpp