diff -r 68443f5be176 -r 44679e468ba9 src/model.h --- a/src/model.h Sat Oct 05 23:47:03 2019 +0300 +++ b/src/model.h Sun Nov 03 12:17:41 2019 +0200 @@ -1,10 +1,16 @@ #pragma once +#include #include #include "main.h" #include "header.h" #include "objecttypes/modelobject.h" -class Model : public QObject +enum class HeaderProperty +{ + Name +}; + +class Model : public QAbstractListModel { Q_OBJECT public: @@ -13,16 +19,21 @@ Model(const Model&) = delete; int size() const; EditContext edit(); + int rowCount(const QModelIndex&) const override; + QVariant data(const QModelIndex& index, int role) const override; + QVariant getHeaderProperty(const HeaderProperty property); + const QString& getName() const; signals: void objectAdded(modelobjects::Id id, int position); private: + using ModelObjectPointer = std::unique_ptr; template T* append(Args&&... args); + void append(ModelObjectPointer&& object); template T* insert(int position, Args&&... args); bool modified = false; QString path; - using ModelObjectPointer = std::unique_ptr; LDHeader header; std::vector body; std::map objectsById; @@ -31,19 +42,23 @@ template T* Model::append(Args&&... args) { + emit layoutAboutToBeChanged(); this->body.push_back(std::make_unique(args...)); T* pointer = static_cast(this->body.back().get()); this->objectsById[pointer->id] = pointer; emit objectAdded(pointer->id, this->body.size() - 1); + emit layoutChanged(); return pointer; } template T* Model::insert(int position, Args&&... args) { + emit layoutAboutToBeChanged(); this->body.insert(position, std::make_unique(args...)); T* pointer = static_cast(this->body[position]); this->objectsById[pointer->id] = pointer; emit objectAdded(pointer->id, position); + emit layoutChanged(); return pointer; }