// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QLabel; QT_END_NAMESPACE namespace Utils { class FancyLineEdit; } namespace Core { class Command; namespace Internal { struct ShortcutItem { Command *m_cmd; QList m_keys; QTreeWidgetItem *m_item; }; class ShortcutButton : public QPushButton { Q_OBJECT public: ShortcutButton(QWidget *parent = nullptr); QSize sizeHint() const override; signals: void keySequenceChanged(const QKeySequence &sequence); protected: bool eventFilter(QObject *obj, QEvent *evt) override; private: void updateText(); void handleToggleChange(bool toggleState); QString m_checkedText; QString m_uncheckedText; mutable int m_preferredWidth = -1; std::array m_key; int m_keyNum = 0; }; class ShortcutInput : public QObject { Q_OBJECT public: ShortcutInput(); ~ShortcutInput(); void addToLayout(QGridLayout *layout, int row); void setKeySequence(const QKeySequence &key); QKeySequence keySequence() const; using ConflictChecker = std::function; void setConflictChecker(const ConflictChecker &fun); signals: void changed(); void showConflictsRequested(); private: ConflictChecker m_conflictChecker; QPointer m_shortcutLabel; QPointer m_shortcutEdit; QPointer m_shortcutButton; QPointer m_warningLabel; }; class ShortcutSettings final : public IOptionsPage { public: ShortcutSettings(); }; } // namespace Internal } // namespace Core