function.h
Go to the documentation of this file.
1 #ifndef DNAI_MODELS_GUI_DECLARABLE_FUNCTION_H
2 #define DNAI_MODELS_GUI_DECLARABLE_FUNCTION_H
3 
4 #include <QObject>
5 #include <QAbstractListModel>
6 #include <QVariant>
7 
11 #include "dnai/models/gui/flow.h"
12 
13 namespace dnai
14 {
15  namespace models
16  {
17  class Entity;
18 
19  namespace gui
20  {
21  class EntityList;
22  namespace declarable
23  {
24  class Function : public QObject, public Entity<data::Function, Function>
25  {
26  Q_OBJECT
28  Q_PROPERTY(dnai::models::gui::EntityList *outputModels READ outputModels WRITE setOutputModels NOTIFY outputModelsChanged)
29  Q_PROPERTY(qint32 entryPointX READ entryPointX WRITE setEntryPointX)
30  Q_PROPERTY(qint32 entryPointY READ entryPointY WRITE setEntryPointY)
31 
32  public:
33  explicit Function(QObject *parent = nullptr);
34  //Implementation of ISerializable
35  void serialize(QJsonObject& obj) const override;
36  protected:
37  void _deserialize(const QJsonObject& obj) override;
38 
39  public:
40  //Implementation of IInstruction
41  const QList<models::Entity*> &inputs() const;
42  bool setInputs(const QList<models::Entity*>& inputs);
43 
44  const QList<models::Entity*> &outputs() const;
45  bool setOutputs(const QList<models::Entity*>& outputs);
46 
47  const QList<models::gui::Instruction *> &instructions() const;
48 
49  const QList<dnai::models::gui::IoLink *> &iolinks() const;
50  bool setIoLinks(const QList<dnai::models::gui::IoLink *> &);
51  void appendIoLink(dnai::models::gui::IoLink *);
52  void removeIoLink(dnai::models::gui::IoLink* link);
53  Q_INVOKABLE dnai::models::gui::IoLink *findIOLink(QUuid const &instruction, QString const &input) const;
54 
55  const QList<dnai::models::gui::FlowLink *> &flowlinks() const;
56  bool setFlowLinks(const QList<dnai::models::gui::FlowLink *> &);
57  void appendFlowLink(dnai::models::gui::FlowLink *);
58  void removeFlowLink(dnai::models::gui::FlowLink* link);
59  Q_INVOKABLE dnai::models::gui::FlowLink *findFlowLink(QUuid const &from, quint32 outPin, QUuid const &to = QUuid()) const;
60 
61  Q_INVOKABLE void addInput(models::Entity *var);
62  Q_INVOKABLE void addOutput(models::Entity *var);
63  Q_INVOKABLE void removeInput(const QString &name);
64  Q_INVOKABLE void removeOutput(const QString &name);
65 
66  Q_INVOKABLE void moveInputUp(int index);
67  Q_INVOKABLE void moveOutputUp(int index);
68 
69  Q_INVOKABLE void moveInputDown(int index);
70  Q_INVOKABLE void moveOutputDown(int index);
71 
72  EntityList *inputModels() const;
73  EntityList *outputModels() const;
74  void setInputModels(EntityList* inputs);
75  void setOutputModels(EntityList* outputs);
76 
77  void addInstruction(Instruction *instruction);
78  void removeInstruction(Instruction *instruction);
79  Instruction* getInstruction(const QUuid& uuid);
80 
81  Q_INVOKABLE quint32 getInputId(QString const &name) const;
82  Q_INVOKABLE quint32 getOutputId(QString const &name) const;
83 
84  models::Entity *getInput(QString const &name) const;
85  models::Entity *getOutput(QString const &name) const;
86 
87  models::gui::Instruction *getInstruction(quint32 uid) const;
88  models::gui::Instruction *getInstruction(const QUuid &guid) const;
89 
90  bool hasInput(QString const &name, QUuid const &type = QUuid()) const;
91  bool hasOutput(QString const &name, QUuid const &type = QUuid()) const;
92 
93  models::gui::Instruction *entryPoint() const;
94  void setEntryPoint(QUuid uid);
95 
96  qint32 entryPointX() const;
97  void setEntryPointX(qint32 x);
98 
99  qint32 entryPointY() const;
100  void setEntryPointY(qint32 y);
101 
102  signals:
103  void inputModelsChanged(dnai::models::gui::EntityList* inputs);
104  void outputModelsChanged(dnai::models::gui::EntityList* outputs);
105 
106  private:
109  QHash<QUuid, Instruction*> m_functionsHash;
110 
111  private:
112  struct EntryPoint
113  {
114  qint32 x = 0;
115  qint32 y = 0;
116  QUuid guid;
117  };
118 
120  };
121  }
122  }
123  }
124 }
125 
126 #endif //DNAI_MODELS_GUI_DECLARABLE_FUNCTION_H
EntityList * m_finputs
Definition: function.h:107
void appendIoLink(dnai::models::gui::IoLink *)
Definition: function.cpp:343
const QList< models::Entity * > & inputs() const
Definition: function.cpp:80
bool setIoLinks(const QList< dnai::models::gui::IoLink * > &)
Definition: function.cpp:335
const QList< models::gui::Instruction * > & instructions() const
Definition: function.cpp:106
bool setInputs(const QList< models::Entity * > &inputs)
Definition: function.cpp:85
Definition: instruction.h:15
void appendFlowLink(dnai::models::gui::FlowLink *)
Definition: function.cpp:382
void setEntryPointX(qint32 x)
Definition: function.cpp:315
Definition: entitylist.h:13
void _deserialize(const QJsonObject &obj) override
Implement this function in order to use deserialize(const QJsonObject &obj)
Definition: function.cpp:41
void setOutputModels(EntityList *outputs)
Definition: function.cpp:187
void removeFlowLink(dnai::models::gui::FlowLink *link)
Definition: function.cpp:388
void removeInstruction(Instruction *instruction)
Definition: function.cpp:201
Q_INVOKABLE quint32 getInputId(QString const &name) const
Definition: function.cpp:212
void setEntryPointY(qint32 y)
Definition: function.cpp:325
Q_INVOKABLE void moveInputDown(int index)
Definition: function.cpp:157
const QList< dnai::models::gui::FlowLink * > & flowlinks() const
Definition: function.cpp:369
Q_INVOKABLE void moveOutputUp(int index)
Definition: function.cpp:151
virtual int index() const override
Definition: entity.h:33
const QList< dnai::models::gui::IoLink * > & iolinks() const
Definition: function.cpp:330
Q_INVOKABLE void moveOutputDown(int index)
Definition: function.cpp:163
QUuid guid
Definition: function.h:116
EntityList * m_foutputs
Definition: function.h:108
EntryPoint m_entryPoint
Definition: function.h:119
void setEntryPoint(QUuid uid)
Definition: function.cpp:305
void outputModelsChanged(dnai::models::gui::EntityList *outputs)
Definition: moc_function.cpp:287
bool hasOutput(QString const &name, QUuid const &type=QUuid()) const
Definition: function.cpp:282
models::Entity * getOutput(QString const &name) const
Definition: function.cpp:236
Instruction * getInstruction(const QUuid &uuid)
Definition: function.cpp:207
const QList< models::Entity * > & outputs() const
Definition: function.cpp:93
Definition: api.h:13
void inputModelsChanged(dnai::models::gui::EntityList *inputs)
Definition: moc_function.cpp:280
models::Entity * getInput(QString const &name) const
Definition: function.cpp:226
Q_INVOKABLE dnai::models::gui::FlowLink * findFlowLink(QUuid const &from, quint32 outPin, QUuid const &to=QUuid()) const
Definition: function.cpp:394
void removeIoLink(dnai::models::gui::IoLink *link)
Definition: function.cpp:351
bool setFlowLinks(const QList< dnai::models::gui::FlowLink * > &)
Definition: function.cpp:374
bool setOutputs(const QList< models::Entity * > &outputs)
Definition: function.cpp:98
Q_INVOKABLE dnai::models::gui::IoLink * findIOLink(QUuid const &instruction, QString const &input) const
Definition: function.cpp:357
bool hasInput(QString const &name, QUuid const &type=QUuid()) const
Definition: function.cpp:266
models::gui::Instruction * entryPoint() const
Definition: function.cpp:298
void serialize(QJsonObject &obj) const override
Implement this function to serialize into QJsonObject.
Definition: function.cpp:23
Q_INVOKABLE void removeOutput(const QString &name)
Definition: function.cpp:139
Q_INVOKABLE void addOutput(models::Entity *var)
Definition: function.cpp:122
Q_INVOKABLE quint32 getOutputId(QString const &name) const
Definition: function.cpp:219
Q_INVOKABLE void removeInput(const QString &name)
Definition: function.cpp:133
Definition: function.h:112
Q_INVOKABLE void addInput(models::Entity *var)
Definition: function.cpp:111
void setInputModels(EntityList *inputs)
Definition: function.cpp:179
void addInstruction(Instruction *instruction)
Definition: function.cpp:195
QHash< QUuid, Instruction * > m_functionsHash
Definition: function.h:109
Q_INVOKABLE void moveInputUp(int index)
Definition: function.cpp:145