Go to the documentation of this file.
1 #ifndef DNAI_MODELS_ENTITY_H
2 #define DNAI_MODELS_ENTITY_H
3 
6 #include "core.h"
8 #include "gui/data/entitycolum.h"
10 #include "gui/declarable/context.h"
11 
12 namespace dnai
13 {
14  namespace models
15  {
16  class Entity;
17  class Column : public QAbstractListModel, public interfaces::ASerializable<Column>
18  {
19  Q_OBJECT
20  Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
21  Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
22  Q_PROPERTY(dnai::models::Entity *parentRef READ parentRef CONSTANT)
23  Q_PROPERTY(QString listIndex READ listIndex WRITE setListIndex NOTIFY listIndexChanged)
24 
25  enum ROLES
26  {
27  ENTITIES = Qt::UserRole + 1,
28  };
29  public:
30  explicit Column(QObject *parent = nullptr) : QAbstractListModel(parent), m_target(nullptr),
31  m_parent(nullptr)
32  {
33  }
34  explicit Column(Entity * e, QObject *parent = nullptr);
35  virtual int rowCount(const QModelIndex& parent = QModelIndex()) const override;
36  QVariant data(const QModelIndex& index, int role) const override;
37  void append(Entity* e, const QModelIndex& parent = QModelIndex());
38  void remove(Entity* e, const QModelIndex& parent = QModelIndex());
39  const QString &name() const;
40  const QString &description() const;
41  void setName(const QString &name);
42  void setDescription(const QString& description);
43  QString listIndex() const;
44  void setListIndex(const QString &s);
45  Entity *parentRef() const;
46 
47  signals:
48  void descriptionChanged(const QString &desc);
49  void nameChanged(const QString &desc);
50  void listIndexChanged(const QString list);
51  private:
52  virtual QHash<int, QByteArray> roleNames() const override;
53  public:
54  void serialize(QJsonObject& obj) const override;
55  protected:
56  void _deserialize(const QJsonObject& obj) override;
57  public:
58  const gui::data::EntityColumn& datas() const;
60 
61  public:
62  const QList<Entity *> &getEntities() const;
63 
64  private:
66  QList<Entity *> m_entities;
69  };
70 
71  class Entity : public interfaces::IModel<Entity>
72  {
73  Q_OBJECT
74  Q_PROPERTY(qint32 id READ id WRITE setId NOTIFY idChanged)
75  Q_PROPERTY(qint32 containerId READ containerId WRITE setContainerId NOTIFY containerIdChanged)
76  Q_PROPERTY(QUuid guid READ guid)
77  Q_PROPERTY(bool isRoot READ isRoot WRITE setIsRoot NOTIFY isRootChanged)
78  Q_PROPERTY(int index READ id WRITE setIndex NOTIFY indexChanged)
79  Q_PROPERTY(QString listIndex READ listIndex WRITE setListIndex NOTIFY listIndexChanged)
80 
81  Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
82  Q_PROPERTY(qint32 visibility READ visibility WRITE setVisibility NOTIFY visibilityChanged)
83  Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
84  Q_PROPERTY(QObject *guiProperties READ guiProperties CONSTANT)
85 
86  Q_PROPERTY(qint32 entityType READ entityType WRITE setEntityType NOTIFY entityTypeChanged)
87  Q_PROPERTY(bool expanded READ expanded WRITE setExpanded NOTIFY expandedChanged)
88  Q_PROPERTY(dnai::models::Entity *parentRef READ parentRef CONSTANT)
89  Q_PROPERTY(QVariant listColumn READ listColumn WRITE setListColumn NOTIFY listColumnChanged)
90 
91  public:
92  explicit Entity(gcore::Entity *coremodel = nullptr, Entity *parent = nullptr, interfaces::IEntity *guimodel = nullptr, QUuid const &guid = QUuid());
93 
94  virtual ~Entity();
95  public:
96  bool isRoot() const;
97  qint32 id() const;
98  qint32 containerId() const;
99  int entityType() const;
100  const QString &name() const;
101  const QString fullName() const;
102  const QString childFullName(QString const &childName) const;
103  qint32 visibility() const;
104  int index() const;
105  QString listIndex() const;
106  const QString &description() const;
107  virtual gcore::Entity *coreModel() const;
108  virtual interfaces::IEntity *guiModel() const;
109  template<class T>
110  T *guiModel() const;
111  void setGuiModel(interfaces::IEntity *);
112  bool expanded() const;
113  Entity *parentRef() const;
114  const QMap<QUuid, Column *> &columns();
115  QUuid guid() const;
116 
117  public:
118  void setIsRoot(bool isRoot);
119  void setId(qint32 id);
120  void setContainerId(qint32 containerId) const;
121  void setEntityType(qint32 type) const;
122  void setName(const QString &) const;
123  void setVisibility(qint32 visibility) const;
124  void setIndex(int index);
125  void setListIndex(const QString &listIndex);
126  void setDescription(const QString& description);
127  virtual void setCoreModel(gcore::Entity *model);
128  void setExpanded(bool exp);
129  virtual void appendChild(Entity* child) override;
130  QObject *guiProperties() const;
131  void setListColumn(const QVariant &column);
132 
133  signals:
134  void isRootChanged(bool isroot);
135  void idChanged(qint32 id);
136  void containerIdChanged(qint32 containerId) const;
137  void entityTypeChanged(qint32 type) const;
138  void nameChanged(const QString &) const;
139  void visibilityChanged(qint32 visibility) const;
140  void indexChanged(int index) const;
141  void listIndexChanged(const QString &listIndex) const;
142  void descriptionChanged(const QString& description) const;
143  void coreModelChanged(gcore::Entity *model);
144  void entityChildrenChanged(models::Entity *e);
145  void expandedChanged(bool exp);
146  void listColumnChanged(const QVariant &var);
147 
148  //Implementation of ISerializable
149  public:
150  void serialize(QJsonObject& obj) const override;
151  void _deserialize(const QJsonObject& obj) override;
152  int columnCount() const override;
153  const QVariant &listColumn();
154  Q_INVOKABLE void addColumn(const QString &name);
155  Q_INVOKABLE int row() const override;
156 
157  public:
158  models::Entity *findByName(QString const &name) const;
159  Q_INVOKABLE quint32 findIdByName(QString const &name) const;
160  //static EntityList *m_entities;
161 
162  private:
163  gcore::Entity *m_dataCore;
164  interfaces::IEntity *m_dataGUI;
165  bool m_isRoot = false;
167  QMap<QUuid, Column *> m_columns;
168  QList<QObject *> m_columslist;
169  QVariant m_varcolumns;
170  QUuid m_guid;
171 
172  };
173 
174  using Context = dnai::models::gui::declarable::Context;
175  using EnumType = dnai::models::gui::declarable::EnumType;
176  using Function = dnai::models::gui::declarable::Function;
177  using ListType = dnai::models::gui::declarable::ListType;
178  using ObjectType = dnai::models::gui::declarable::ObjectType;
179  using Variable = dnai::models::gui::declarable::Variable;
180 
181  template <class T>
182  T* Entity::guiModel() const
183  {
184  return dynamic_cast<T *>(guiModel());
185  }
186  }
187  }
188 
189 #endif // DNAI_MODELS_ENTITY_H
qint32 visibility() const
QString listIndex() const
Allow inherited class to serialize and deserialize itself.
Definition: iserializable.h:33
interfaces::IEntity * m_dataGUI
Definition: entity.h:164
Q_INVOKABLE quint32 findIdByName(QString const &name) const
Definition: entity.cpp:373
QString listIndex() const
Entity * parentRef() const
void setGuiModel(interfaces::IEntity *)
Definition: entity.cpp:611
int index() const
void idChanged(qint32 id)
Definition: moc_entity.cpp:628
Q_INVOKABLE int row() const override
Definition: entity.cpp:355
void _deserialize(const QJsonObject &obj) override
Implement this function in order to use deserialize(const QJsonObject &obj)
Definition: entity.cpp:270
void visibilityChanged(qint32 visibility) const
Definition: moc_entity.cpp:656
ROLES
Definition: entity.h:25
void setName(const QString &) const
Definition: entity.cpp:172
Entity * child(int row) const
Definition: generictreeitem.h:35
void nameChanged(const QString &desc)
Definition: moc_entity.cpp:225
void append(Entity *e, const QModelIndex &parent=QModelIndex())
Definition: entity.cpp:547
QList< Entity * > m_entities
Definition: entity.h:66
bool expanded() const
This class allow you to create a new serializable model and allow you to use it in a tree...
Definition: imodel.h:14
QMap< QUuid, Column * > m_columns
Definition: entity.h:167
void setListColumn(const QVariant &column)
Definition: entity.cpp:241
const QString fullName() const
Definition: entity.cpp:78
void setVisibility(qint32 visibility) const
Definition: entity.cpp:180
QVariant m_entityChildren
Definition: entity.h:166
QVariant m_varcolumns
Definition: entity.h:169
gui::data::EntityColumn m_data
Definition: entity.h:67
void indexChanged(int index) const
Definition: moc_entity.cpp:663
void listIndexChanged(const QString list)
Definition: moc_entity.cpp:232
void setListIndex(const QString &listIndex)
Definition: entity.cpp:197
virtual QHash< int, QByteArray > roleNames() const override
Definition: entity.cpp:382
const QMap< QUuid, Column * > & columns()
Definition: entity.cpp:143
bool setDatas(const gui::data::EntityColumn &data)
Definition: entity.cpp:413
QList< QObject * > m_columslist
Definition: entity.h:168
const QVariant & listColumn()
void isRootChanged(bool isroot)
Definition: moc_entity.cpp:621
Definition: entity.h:17
Entity * parentRef() const
const QString & description() const
int columnCount() const override
Definition: entity.cpp:331
QUuid m_guid
Definition: entity.h:170
void setListIndex(const QString &s)
Definition: entity.cpp:598
void containerIdChanged(qint32 containerId) const
Definition: moc_entity.cpp:635
QObject * guiProperties() const
virtual void appendChild(Entity *child) override
Definition: entity.cpp:221
void setDescription(const QString &description)
Definition: entity.cpp:585
virtual gcore::Entity * coreModel() const
Definition: entity.cpp:110
const gui::data::EntityColumn & datas() const
Definition: entity.cpp:408
void setEntityType(qint32 type) const
Definition: entity.cpp:164
bool isRoot() const
Column(QObject *parent=nullptr)
Definition: entity.h:30
void nameChanged(const QString &) const
Definition: moc_entity.cpp:649
void serialize(QJsonObject &obj) const override
Implement this function to serialize into QJsonObject.
Definition: entity.cpp:389
int entityType() const
Entity * m_parent
Definition: entity.h:68
Definition: entitycolum.h:14
Entity * m_target
Definition: entity.h:65
gcore::Entity * m_dataCore
Definition: entity.h:163
void listColumnChanged(const QVariant &var)
Definition: moc_entity.cpp:705
QVariant data(const QModelIndex &index, int role) const override
Definition: entity.cpp:538
bool m_isRoot
Definition: entity.h:165
Q_INVOKABLE void addColumn(const QString &name)
Definition: entity.cpp:342
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const override
Definition: entity.cpp:532
void coreModelChanged(gcore::Entity *model)
Definition: moc_entity.cpp:684
void setDescription(const QString &description)
Definition: entity.cpp:205
void listIndexChanged(const QString &listIndex) const
Definition: moc_entity.cpp:670
void serialize(QJsonObject &obj) const override
Implement this function to serialize into QJsonObject.
Definition: entity.cpp:246
Definition: api.h:13
void descriptionChanged(const QString &desc)
Definition: moc_entity.cpp:218
void descriptionChanged(const QString &description) const
Definition: moc_entity.cpp:677
Definition: entity.h:27
void setIsRoot(bool isRoot)
Definition: entity.cpp:50
void expandedChanged(bool exp)
Definition: moc_entity.cpp:698
qint32 containerId() const
void setExpanded(bool exp)
Definition: entity.cpp:125
void entityTypeChanged(qint32 type) const
Definition: moc_entity.cpp:642
void _deserialize(const QJsonObject &obj) override
Implement this function in order to use deserialize(const QJsonObject &obj)
Definition: entity.cpp:396
const QString & name() const
void setId(qint32 id)
Definition: entity.cpp:148
models::Entity * findByName(QString const &name) const
Definition: entity.cpp:360
const QString & description() const
const QString & name() const
Definition: entity.h:71
void setName(const QString &name)
Definition: entity.cpp:577
QUuid guid() const
const QList< Entity * > & getEntities() const
Definition: entity.cpp:421
void setIndex(int index)
Definition: entity.cpp:189
void setContainerId(qint32 containerId) const
Definition: entity.cpp:156
virtual interfaces::IEntity * guiModel() const
Definition: entity.cpp:115
void entityChildrenChanged(models::Entity *e)
Definition: moc_entity.cpp:691
const QString childFullName(QString const &childName) const
Definition: entity.cpp:85
virtual void setCoreModel(gcore::Entity *model)
Definition: entity.cpp:213