File indexing completed on 2024-11-03 09:56:29

0001 /*
0002     SPDX-FileCopyrightText: 2006-2010 Peter Penz <peter.penz@gmx.at>
0003     SPDX-FileCopyrightText: 2006 Aaron J. Seigo <aseigo@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KURLNAVIGATORBUTTONBASE_P_H
0009 #define KURLNAVIGATORBUTTONBASE_P_H
0010 
0011 #include <QColor>
0012 #include <QPushButton>
0013 
0014 class QUrl;
0015 class QEvent;
0016 
0017 class KUrlNavigator;
0018 
0019 namespace KDEPrivate
0020 {
0021 /**
0022  * @brief Base class for buttons of the URL navigator.
0023  *
0024  * Buttons of the URL navigator offer an active/inactive
0025  * state and custom display hints.
0026  */
0027 class KUrlNavigatorButtonBase : public QPushButton
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     explicit KUrlNavigatorButtonBase(KUrlNavigator *parent);
0033     ~KUrlNavigatorButtonBase() override;
0034 
0035     /**
0036      * When having several URL navigator instances, it is important
0037      * to provide a visual difference to indicate which URL navigator
0038      * is active (usecase: split view in Dolphin). The activation state
0039      * is independent from the focus or hover state.
0040      * Per default the URL navigator button is marked as active.
0041      */
0042     void setActive(bool active);
0043     bool isActive() const;
0044 
0045 protected:
0046     enum DisplayHint {
0047         EnteredHint = 1,
0048         DraggedHint = 2,
0049         PopupActiveHint = 4,
0050     };
0051 
0052     enum { BorderWidth = 2 };
0053 
0054     void setDisplayHintEnabled(DisplayHint hint, bool enable);
0055     bool isDisplayHintEnabled(DisplayHint hint) const;
0056 
0057     void focusInEvent(QFocusEvent *event) override;
0058     void focusOutEvent(QFocusEvent *event) override;
0059 
0060 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
0061     void enterEvent(QEnterEvent *event) override;
0062 #else
0063     void enterEvent(QEvent *event) override;
0064 #endif
0065 
0066     void leaveEvent(QEvent *event) override;
0067 
0068     void drawHoverBackground(QPainter *painter);
0069 
0070     /** Returns the foreground color by respecting the current display hint. */
0071     QColor foregroundColor() const;
0072 
0073 private Q_SLOTS:
0074     /** Invokes setActive(true). */
0075     void activate();
0076 
0077 private:
0078     bool m_active;
0079     int m_displayHint;
0080 };
0081 
0082 } // namespace KDEPrivate
0083 
0084 #endif