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 };