File indexing completed on 2024-05-12 04:47:03
0001 #pragma once 0002 0003 #include <QAbstractListModel> 0004 #include <QObject> 0005 0006 struct Key { 0007 Q_GADGET 0008 Q_PROPERTY(Qt::Modifier modifier MEMBER modifier) 0009 public: 0010 Qt::Key key; 0011 QString label; 0012 QString iconName; 0013 Qt::Modifier modifier; 0014 }; 0015 0016 class KeysHelper : public QAbstractListModel 0017 { 0018 Q_OBJECT 0019 Q_PROPERTY(Group group WRITE setGroup READ group NOTIFY groupChanged) 0020 Q_PROPERTY(QVariantList signalsGroup READ signalsGroup CONSTANT FINAL) 0021 0022 public: 0023 enum ROLES : uint8_t { ICON_NAME, LABEL, KEY, MODIFIER, ITEM }; 0024 Q_ENUM(ROLES) 0025 0026 enum Group : uint8_t { FN_GROUP, NANO_GROUP, CTRL_GROUP, NAV_GROUP, DEFAULT_GROUP, SIGNALS_GROUP }; 0027 Q_ENUM(Group) 0028 0029 explicit KeysHelper(QObject *parent = nullptr); 0030 int rowCount(const QModelIndex &) const override; 0031 QVariant data(const QModelIndex &index, int role) const override; 0032 0033 Group group() const; 0034 0035 QVariantList signalsGroup() const; 0036 0037 protected: 0038 QHash<int, QByteArray> roleNames() const override; 0039 0040 0041 public Q_SLOTS: 0042 void sendKey(const int &index, QObject *object); 0043 void setGroup(Group group); 0044 0045 private: 0046 void setKeys(); 0047 QVector<Key> m_keys; 0048 Group m_group = Group::DEFAULT_GROUP; 0049 0050 static QVector<Key> ctrlKeys(); 0051 static QVector<Key> fnKeys(); 0052 static QVector<Key> navKeys(); 0053 static QVector<Key> nanoKeys(); 0054 static QVector<Key> defaultKeys(); 0055 static QVector<Key> signalKeys(); 0056 0057 Q_SIGNALS: 0058 void groupChanged(); 0059 0060 };