contextMenuModel.h
Go to the documentation of this file.
1 #ifndef DNAI_MODELS_CONTEXT_MENU_MODEL_H
2 #define DNAI_MODELS_CONTEXT_MENU_MODEL_H
3 #include <QAbstractItemModel>
4 #include <QHash>
5 #include <QStringList>
6 #include "generictreeitem.h"
7 #include "core.h"
8 
9 namespace dnai
10 {
11  namespace models
12  {
13  class Entity;
14  class ContextMenuItem : public GenericTreeItem<ContextMenuItem>
15  {
16  Q_OBJECT
17  Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
18  Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
20  Q_PROPERTY(QString nodeName READ nodeName WRITE setNodeName NOTIFY nodeNameChanged)
21  Q_PROPERTY(int type READ type WRITE setType NOTIFY typeChanged)
22  Q_PROPERTY(QList<qint32> construction READ construction WRITE setConstruction NOTIFY constructionChanged)
23  Q_PROPERTY(int flowIn READ flowIn WRITE setFlowIn NOTIFY flowInChanged)
24  Q_PROPERTY(int flowOut READ flowOut WRITE setFlowOut NOTIFY flowOutChanged)
25  Q_PROPERTY(int inputSize READ inputSize NOTIFY inputSizeChanged)
26  Q_PROPERTY(int outputSize READ outputSize NOTIFY outputSizeChanged)
27  Q_PROPERTY(QStringList inputNames READ inputNames NOTIFY inputNamesChanged)
28  Q_PROPERTY(QStringList outputNames READ outputNames NOTIFY outputNamesChanged)
29 
30  public:
31  ContextMenuItem(ContextMenuItem *parent = nullptr);
32 
33  public:
34  const QString &name() const;
35  const QString &description() const;
36  const QMap<QString, QString> &inputs() const;
37  const QMap<QString, QString> &inputsDisplayNames() const;
38  int inputSize() const;
39  const QMap<QString, QString> &outputs() const;
40  const QMap<QString, QString> &outputsDisplayNames() const;
41  int outputSize() const;
42  int instructionId() const;
43  const QString &nodeName() const;
44  int columnCount() const override;
45  int type() const;
46  QList<qint32> const &construction() const;
47  int flowIn() const;
48  int flowOut() const;
49  QStringList inputNames() const;
50  QStringList outputNames() const;
51  Q_INVOKABLE QString getInput(QString name) const;
52  Q_INVOKABLE QString getOutput(QString name) const;
53  Q_INVOKABLE QString getInputDisplayName(QString name) const;
54  Q_INVOKABLE QString getOutputDisplayName(QString name) const;
55  QString fullPath() const;
56 
57  public:
58  void setName(const QString &);
59  void setDescription(const QString &);
60  void setInstructionId(int);
61  void setNodeName(const QString &name);
62  void setType(int t);
63  void setConstruction(QList<qint32> const &value);
64  void setFlowIn(int value);
65  void setFlowOut(int value);
66  void addInput(const QString &name, const QString &type, const QString &displayName);
67  void addInputs(const QMap<QString, QString> &inputs, const QMap<QString, QString> &displayNames);
68  void addOutput(const QString &name, const QString &type, const QString &displayName);
69  void addOutputs(const QMap<QString, QString> &outputs, const QMap<QString, QString> &displayNames);
70 
71  signals:
72  void nameChanged(const QString &);
73  void descriptionChanged(const QString &);
74  void instructionIdChanged(int);
75  void nodeNameChanged(const QString &name);
76  void typeChanged(int t);
77  void constructionChanged(QList<qint32> const &value);
78  void flowInChanged(int value);
79  void flowOutChanged(int value);
80  void inputSizeChanged(int value);
81  void outputSizeChanged(int value);
82  void inputNamesChanged(const QStringList &value);
83  void outputNamesChanged(const QStringList &value);
84 
85  private:
86  QString m_name;
87  QString m_descrition;
88  int m_instructionId = -1;
89  QString m_nodeName;
90  int m_type = -1;
91  QList<qint32> m_construction;
92  int m_flowIn = 0;
93  int m_flowOut = 0;
94 
95  QMap<QString, QString> m_inputs;
96  QMap<QString, QString> m_inputDisplayNames;
97 
98  QMap<QString, QString> m_outputs;
99  QMap<QString, QString> m_outputDisplayNames;
100  };
101  class ContextMenuModel : public QAbstractItemModel
102  {
103  Q_OBJECT
104  public:
105  enum ROLES
106  {
107  NAME = Qt::UserRole + 1,
114  TYPE
115  };
116 
117  public:
118  explicit ContextMenuModel(QObject *parent = nullptr);
119  explicit ContextMenuModel(const QJsonObject &doc, QObject *parent = nullptr);
120 
121  QModelIndex index(int row, int column, const QModelIndex& parent) const override;
122  QModelIndex parent(const QModelIndex& child) const override;
123  ContextMenuItem* getItem(const QModelIndex& index) const;
124  int rowCount(const QModelIndex& parent) const override;
125  int columnCount(const QModelIndex& parent) const override;
126  QVariant data(const QModelIndex& index, int role) const override;
127  QHash<int, QByteArray> roleNames() const override;
128 
129  const QHash<QString, ContextMenuItem*> &instructions() const;
130 
131  private:
132  void appendVariable(Entity *entity);
133  void appendEnumeration(Entity *entity);
134  void appendParameter(Entity *entity);
135  void appendReturn(Entity *entity);
136  void appendObject(Entity *entity);
137  void appendList(Entity *entity);
138  void appendFunction(Entity *entity);
139 
140  private:
141  void addItem(ContextMenuItem *item, ContextMenuItem *parent, models::Entity *related = nullptr);
142  void addItems(models::Entity *related);
143  void removeItem(QString const &fullPath);
144  void clearItems(models::Entity *related);
145  void refreshItems(models::Entity *related);
146 
147  public:
148  void setup();
149 
150  public slots:
151  void onEntityDeclared(dnai::models::Entity *declared);
152  void onEntityRemoved(dnai::models::Entity *removed);
153  void onEntityRenamed(dnai::models::Entity *entity, QString name, QString newname);
154  void onEnumValueSet(dnai::models::Entity *enumeration, QString name, QString value);
155  void onEnumValueRemoved(dnai::models::Entity *enumeration, QString name);
156  void onObjectAttributeAdded(models::Entity *obj, QString name, models::Entity *type, VISIBILITY visi);
157  void onObjectAttributeRenamed(models::Entity *obj, QString name, QString newName);
158  void onObjectAttributeRemoved(models::Entity *obj, QString name);
159  void onListTypeSet(dnai::models::Entity *lst, dnai::models::Entity *type);
160  void onParameterSet(dnai::models::Entity *func, QString param);
161  void onReturnSet(dnai::models::Entity *func, QString ret);
162  void onVariableTypeSet(dnai::models::Entity *var, dnai::models::Entity *type);
163 
164  private:
165  void parseJsonDocument(const QJsonObject &json);
166  void parseJsonObj(ContextMenuItem* parent, const QJsonObject& js);
168 
174 
176 
177  QHash<QString, ContextMenuItem*> m_hash;
178 
179  private:
180  QHash<models::Entity *, QList<QString>> m_entity_items;
181  QHash<QString, models::Entity *> m_items_entity;
182  };
183  }
184 }
185 
186 #endif //DNAI_MODELS_CONTEXT_MENU_MODEL_H
ContextMenuItem * m_variables
Definition: contextMenuModel.h:172
void setNodeName(const QString &name)
Definition: contextmenumodel.cpp:69
void inputSizeChanged(int value)
Definition: moc_contextMenuModel.cpp:452
int m_instructionId
Definition: contextMenuModel.h:88
void addInput(const QString &name, const QString &type, const QString &displayName)
Definition: contextmenumodel.cpp:177
bool m_functionRebuilding
Definition: contextMenuModel.h:175
int m_type
Definition: contextMenuModel.h:90
ContextMenuItem * m_root
Definition: contextMenuModel.h:167
ContextMenuItem * child(int row) const
Definition: generictreeitem.h:35
QString m_name
Definition: contextMenuModel.h:86
Definition: contextMenuModel.h:109
Definition: generictreeitem.h:14
Q_INVOKABLE QString getOutputDisplayName(QString name) const
Definition: contextmenumodel.cpp:167
void addOutputs(const QMap< QString, QString > &outputs, const QMap< QString, QString > &displayNames)
Definition: contextmenumodel.cpp:201
const QString & name() const
const QMap< QString, QString > & outputs() const
Definition: contextmenumodel.cpp:44
const QMap< QString, QString > & inputs() const
Definition: contextmenumodel.cpp:29
Definition: contextMenuModel.h:101
void setFlowIn(int value)
Definition: contextmenumodel.cpp:209
const QMap< QString, QString > & outputsDisplayNames() const
Definition: contextmenumodel.cpp:49
QMap< QString, QString > m_outputs
Definition: contextMenuModel.h:98
Q_INVOKABLE QString getInputDisplayName(QString name) const
Definition: contextmenumodel.cpp:162
void constructionChanged(QList< qint32 > const &value)
Definition: moc_contextMenuModel.cpp:431
int m_flowOut
Definition: contextMenuModel.h:93
ContextMenuItem * m_functions
Definition: contextMenuModel.h:169
Definition: contextMenuModel.h:112
void nodeNameChanged(const QString &name)
Definition: moc_contextMenuModel.cpp:417
void setType(int t)
Definition: contextmenumodel.cpp:77
QList< qint32 > m_construction
Definition: contextMenuModel.h:91
void setInstructionId(int)
Definition: contextmenumodel.cpp:109
int m_flowIn
Definition: contextMenuModel.h:92
QString m_nodeName
Definition: contextMenuModel.h:89
void inputNamesChanged(const QStringList &value)
Definition: moc_contextMenuModel.cpp:466
QString fullPath() const
Definition: contextmenumodel.cpp:172
void typeChanged(int t)
Definition: moc_contextMenuModel.cpp:424
ROLES
Definition: contextMenuModel.h:105
const QString & description() const
int columnCount() const override
Definition: contextmenumodel.cpp:117
ContextMenuItem * m_classes
Definition: contextMenuModel.h:171
QHash< models::Entity *, QList< QString > > m_entity_items
Definition: contextMenuModel.h:180
void outputNamesChanged(const QStringList &value)
Definition: moc_contextMenuModel.cpp:473
ContextMenuItem * m_enumerations
Definition: contextMenuModel.h:173
void nameChanged(const QString &)
Definition: moc_contextMenuModel.cpp:396
void descriptionChanged(const QString &)
Definition: moc_contextMenuModel.cpp:403
QMap< QString, QString > m_outputDisplayNames
Definition: contextMenuModel.h:99
ContextMenuItem * m_lists
Definition: contextMenuModel.h:170
virtual int row() const
Definition: generictreeitem.h:40
void setConstruction(QList< qint32 > const &value)
Definition: contextmenumodel.cpp:85
Definition: contextMenuModel.h:113
Definition: api.h:13
const QMap< QString, QString > & inputsDisplayNames() const
Definition: contextmenumodel.cpp:34
QList< qint32 > const & construction() const
Definition: contextMenuModel.h:110
void setDescription(const QString &)
Definition: contextmenumodel.cpp:101
void flowInChanged(int value)
Definition: moc_contextMenuModel.cpp:438
const QString & nodeName() const
QHash< QString, ContextMenuItem * > m_hash
Definition: contextMenuModel.h:177
void addOutput(const QString &name, const QString &type, const QString &displayName)
Definition: contextmenumodel.cpp:193
void flowOutChanged(int value)
Definition: moc_contextMenuModel.cpp:445
Definition: contextMenuModel.h:108
QString m_descrition
Definition: contextMenuModel.h:87
void instructionIdChanged(int)
Definition: moc_contextMenuModel.cpp:410
QMap< QString, QString > m_inputs
Definition: contextMenuModel.h:95
Definition: contextMenuModel.h:111
void outputSizeChanged(int value)
Definition: moc_contextMenuModel.cpp:459
Definition: entity.h:71
QHash< QString, models::Entity * > m_items_entity
Definition: contextMenuModel.h:181
Q_INVOKABLE QString getInput(QString name) const
Definition: contextmenumodel.cpp:152
Definition: contextMenuModel.h:14
QStringList inputNames() const
void setName(const QString &)
Definition: contextmenumodel.cpp:93
void setFlowOut(int value)
Definition: contextmenumodel.cpp:217
QStringList outputNames() const
Q_INVOKABLE QString getOutput(QString name) const
Definition: contextmenumodel.cpp:157
void addInputs(const QMap< QString, QString > &inputs, const QMap< QString, QString > &displayNames)
Definition: contextmenumodel.cpp:185
QMap< QString, QString > m_inputDisplayNames
Definition: contextMenuModel.h:96