File indexing completed on 2024-05-12 04:06:21

0001 /*
0002     SPDX-FileCopyrightText: 2009 Chani Armitage <chani@kde.org>
0003     SPDX-FileCopyrightText: 2010 Stefan Majewsky <majewsky@gmx.net>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef PALAPELI_MOUSEINPUTBUTTON_H
0009 #define PALAPELI_MOUSEINPUTBUTTON_H
0010 
0011 #include "../engine/trigger.h"
0012 
0013 class QLabel;
0014 #include <QPushButton>
0015 
0016 namespace Palapeli
0017 {
0018     class FlatButton;
0019 
0020     class MouseInputButton : public QPushButton
0021     {
0022         Q_OBJECT
0023         public:
0024             explicit MouseInputButton(QWidget* parent = nullptr);
0025             QSize sizeHint() const override;
0026 
0027             ///If unset, this button will not generate any wheel triggers.
0028             bool isMouseAllowed() const;
0029             void setMouseAllowed(bool mouseAllowed);
0030             ///If iunset, this button will not generate any wheel triggers.
0031             bool isWheelAllowed() const;
0032             void setWheelAllowed(bool wheelAllowed);
0033             bool isNoButtonAllowed() const;
0034             void setNoButtonAllowed(bool noButtonAllowed);
0035             bool showClearButton() const;
0036             ///If set, a call to setTrigger() will not immediately change the trigger. Instead, the triggerRequest() signal will be fired, and the new trigger will be set only after confirmTrigger() has been called.
0037             bool requiresValidation() const;
0038             void setRequiresValidation(bool requiresValidation);
0039             Palapeli::Trigger trigger() const;
0040         Q_SIGNALS:
0041             void triggerChanged(const Palapeli::Trigger& newTrigger);
0042             void triggerRequest(const Palapeli::Trigger& newTrigger);
0043         public Q_SLOTS:
0044             void captureTrigger();
0045             void clearTrigger();
0046             void confirmTrigger(const Palapeli::Trigger& trigger);
0047             void setTrigger(const Palapeli::Trigger& trigger);
0048         protected:
0049             bool event(QEvent* event) override;
0050         private:
0051             void updateAppearance();
0052             void applyTrigger(const Palapeli::Trigger& newTrigger);
0053             void showModifiers(Qt::KeyboardModifiers modifiers);
0054 
0055             QLabel* m_iconLabel;
0056             QLabel* m_mainLabel;
0057             FlatButton* m_clearButton;
0058 
0059             Palapeli::Trigger m_trigger, m_stagedTrigger; ///< m_stagedTrigger is the trigger which has been set with setTrigger(), but which is still waiting to be confirmed with confirmTrigger().
0060             bool m_mouseAllowed, m_wheelAllowed;
0061             bool m_noButtonAllowed, m_requiresValidation;
0062     };
0063 }
0064 
0065 #endif // PALAPELI_MOUSEINPUTBUTTON_H