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