project.h
Go to the documentation of this file.
1 #ifndef PROJECT_H
2 #define PROJECT_H
3 
4 #include "models/entitytree.h"
5 #include "interfaces/iproject.h"
6 #include "models/ml/mlproject.h"
7 
8 namespace dnai {
9 struct Count {
10  int contexts = 0;
11  int classes = 0;
12  int nodes = 0;
13  int functions = 0;
14  int variables = 0;
15  int inputs = 0;
16  int outputs = 0;
17  int flows = 0;
18 };
19 }
20 
21 namespace dnai {
23  {
24  Q_OBJECT
26  Q_PROPERTY(int childCount READ childCount CONSTANT)
27  Q_PROPERTY(bool saved READ saved WRITE setSaved NOTIFY savedChanged)
28  Q_PROPERTY(dnai::models::ml::MlProject * mlData READ mlData CONSTANT)
29 
30  public:
31  Project();
32  Project(const QString &filename);
33  ~Project();
34  const QJsonObject &jsonData() const override;
35 
36  // ISerializable implementation
37  void serialize(QJsonObject& obj) const override;
38  void _deserialize(const QJsonObject& obj) override;
39  public:
40  models::Entity *selectedEntity() const;
41  void setSelectedEntity(models::Entity *entity);
42  void setSaved(bool);
43 
44  signals:
45  void selectedEntityChanged(models::Entity *entity);
46  void entityAdded(models::Entity *entity);
47  void entityRemoved(models::Entity *entity);
48  void savedChanged(bool saveState);
49 
50  public:
51  Q_INVOKABLE void save() override;
52  bool saved() const;
53  void load(const QString& path) override;
54  void loadFromJson(const QJsonObject& obj);
55  void close() override;
56  const QString& version() const override;
57  void setVersion(const QString& version) override;
58  const QString& name() const override;
59  void setName(const QString& name) override;
60  const QString& description() const override;
61  void setDescription(const QString& name) override;
62  const QString& fileName() const override;
63  void setFileName(const QString& name) override;
64  void foreachEntity(const std::function<void(models::Entity*)> &func) const;
65  int childCount() const;
66  models::Entity &getRoot() const;
67  models::ml::MlProject *mlData();
68 
69  public:
70  models::ml::MlProject &MlData();
71 
72  public:
73  Q_INVOKABLE int expandedRows(const QModelIndex& parent) const;
74  Q_INVOKABLE int expandedRows() const;
75 
76  private:
77  QModelIndex getIndexOf(models::Entity *e) const;
78  models::Column *getColumnOf(models::Entity *e);
79 
80  public slots:
81  void removeEntity(dnai::models::Entity *entity);
82  void addEntity(dnai::models::Entity *entity);
83 
84  public:
85  Q_INVOKABLE void addEntityColumnUid(quint32 parentId, QString const &name, QString const &listIndex);
86  Q_INVOKABLE QString generateUniqueChildName(dnai::models::Entity *parent) const;
87 
88  private:
89  template<class T>
90  T _foreachEntity(models::Entity* root, const std::function<T(models::Entity*)> &func) const;
91 
92  private:
93  QFile* m_file;
95  models::Entity* m_selectedEntity{};
96  QString m_filename;
97  QString m_description;
98  QJsonObject m_data;
99  QString m_version;
101  QMap<QString, QString> m_entityColumnUid;
103  bool m_save = true;
104  };
105 
106  // class Project: public models::Common
107  // {
108  // public:
109  // Project(qint32 uid, QString const& name, QString const& description, QFile& file);
110  // Project(const QString &, const QString &, QFile &);
111  // virtual ~Project();
112 
113  // typedef bool (* searchFunc)(models::Common *, QString const &);
114  // typedef bool (* searchFunctionsFunc)(models::Function *, QString const &);
115 
116  // public:
117  // void save();
118 
119  // private:
120 
121  // QVector<models::Common*> m_index;
122  // QVector<models::Function*> m_functions_index;
123 
124  // models::Context const *m_main;
125 
126  // Count count;
127 
128  // public:
129  // QFile &file() const;
130  // const models::Context *main() const;
131  // QJsonObject data() const;
132  //static QJsonObject loadProjectData(const QString &);
133 
134 
135  // private:
136  // models::Variable *unserializeVariable(const QJsonObject &, QObject *);
137  // models::Input *unserializeInput(const QJsonObject &, QObject *);
138  // models::Output *unserializeOutput(const QJsonObject &, QObject *);
139  // models::Flow *unserializeFlow(const QJsonObject &, QObject *);
140  // models::Function *unserializeFunction(const QJsonObject &, QObject *);
141  // models::Class *unserializeClass(const QJsonObject &, QObject *);
142  // models::Context *unserializeContext(const QJsonObject &, QObject *);
143  // models::Node *unserializeNode(const QJsonObject &, QObject *);
144  // static inline QVector2D unserializePosition(const QJsonObject &);
145 
146 
147  // // IModel interface
148  // public:
149  // virtual void serialize(QJsonObject &) const;
150  // virtual void declare() const;
151 
152  // public:
153  // void unserialize(const QJsonObject &);
154  // QVector<models::Common*> search(QString const &, searchFunc = defaultSearchFunc);
155  // QVector<models::Function*> searchFunctions(QString const &, searchFunctionsFunc = defaultSearchFunctionsFunc);
156 
157  // private:
158  // static bool defaultSearchFunc(models::Common *, QString const &);
159  // static bool defaultSearchFunctionsFunc(models::Function *, QString const &);
160  // };
161  }
162 
163 #endif // PROJECT_H
models::ml::MlProject m_mlData
Definition: project.h:102
void savedChanged(bool saveState)
Definition: moc_project.cpp:328
int functions
Definition: project.h:13
Q_INVOKABLE void addEntityColumnUid(quint32 parentId, QString const &name, QString const &listIndex)
Definition: project.cpp:384
void setFileName(const QString &name) override
Definition: project.cpp:193
void serialize(QJsonObject &obj) const override
Implement this function to serialize into QJsonObject.
Definition: project.cpp:71
int classes
Definition: project.h:11
models::Entity & getRoot() const
Definition: project.cpp:396
Allow inherited class to serialize and deserialize itself.
Definition: iserializable.h:33
QString m_description
Definition: project.h:97
void setVersion(const QString &version) override
Definition: project.cpp:159
QModelIndex parent(const QModelIndex &child) const override
Definition: entitytree.cpp:33
void entityAdded(models::Entity *entity)
Definition: moc_project.cpp:314
void removeEntity(dnai::models::Entity *entity)
Definition: project.cpp:306
void addEntity(dnai::models::Entity *entity)
Definition: project.cpp:340
models::Entity * m_rootEntity
Definition: project.h:100
int contexts
Definition: project.h:10
models::Entity * m_selectedEntity
Definition: project.h:95
models::ml::MlProject & MlData()
Definition: project.cpp:406
int childCount() const
Definition: mlproject.h:11
models::Column * getColumnOf(models::Entity *e)
Definition: project.cpp:289
void setName(const QString &name) override
Definition: project.cpp:171
void loadFromJson(const QJsonObject &obj)
Definition: project.cpp:144
bool m_save
Definition: project.h:103
Definition: entitytree.h:12
QMap< QString, QString > m_entityColumnUid
Definition: project.h:101
void setSaved(bool)
Definition: project.cpp:102
int nodes
Definition: project.h:12
void selectedEntityChanged(models::Entity *entity)
Definition: moc_project.cpp:307
void load(const QString &path) override
Definition: project.cpp:111
QString m_filename
Definition: project.h:96
bool saved() const
Definition: project.h:22
const QJsonObject & jsonData() const override
Definition: project.cpp:411
const QString & fileName() const override
Definition: project.cpp:188
const QString & description() const override
Definition: project.cpp:176
const QString & name() const override
Definition: project.cpp:166
models::Entity * selectedEntity() const
Definition: project.h:9
QString m_version
Definition: project.h:99
int flows
Definition: project.h:17
int outputs
Definition: project.h:16
int variables
Definition: project.h:14
QFile * m_file
Definition: project.h:93
const QString & version() const override
Definition: project.cpp:154
Q_INVOKABLE void save() override
Definition: project.cpp:55
Definition: api.h:13
void setDescription(const QString &name) override
Definition: project.cpp:181
void entityRemoved(models::Entity *entity)
Definition: moc_project.cpp:321
QJsonObject m_data
Definition: project.h:98
QModelIndex getIndexOf(models::Entity *e) const
Definition: project.cpp:278
Count count
Definition: project.h:94
T _foreachEntity(models::Entity *root, const std::function< T(models::Entity *)> &func) const
Q_INVOKABLE QString generateUniqueChildName(dnai::models::Entity *parent) const
Definition: project.cpp:377
void close() override
Definition: project.cpp:150
Definition: entity.h:71
void _deserialize(const QJsonObject &obj) override
Implement this function in order to use deserialize(const QJsonObject &obj)
Definition: project.cpp:77
void foreachEntity(const std::function< void(models::Entity *)> &func) const
Definition: project.cpp:230
Definition: iproject.h:12
models::ml::MlProject * mlData()
int inputs
Definition: project.h:15
Q_INVOKABLE int expandedRows() const
Project::expandedRows Count the expanded rows of the entire project in the tree view.
Definition: project.cpp:273
void setSelectedEntity(models::Entity *entity)
Definition: project.cpp:94