#ifndef QQuickDetailsViewRow_h__ #define QQuickDetailsViewRow_h__ #include #include #include #include #include #include "QPropertyHandle.h" #include "IPropertyTypeCustomization.h" #include "QQuickDetailsViewModel.h" #include "export.hpp" class DIAGRAM_DESIGNER_PUBLIC IDetailsViewRow { friend class QQuickDetailsViewModel; public: ~IDetailsViewRow() {}; void setName(QString inName); virtual QString name(); virtual void setupItem(QQuickItem* inParent){} virtual void attachChildren() {} virtual void addChild(QSharedPointer inChild); void clear(); QQuickDetailsViewModel* model(); QModelIndex modelIndex() const { return mModelIndex; } void setModelIndex(const QModelIndex& index) { mModelIndex = index; } int rowNumber() const { if (!mParent) return -1; return mParent->mChildren.indexOf(const_cast(this)); } void invalidateChildren(); protected: QString mName; QQuickDetailsViewModel* mModel = nullptr; QModelIndex mModelIndex; IDetailsViewRow* mParent = nullptr; QList> mChildren; }; class DIAGRAM_DESIGNER_PUBLIC QDetailsViewRow_Property : public IDetailsViewRow { public: QDetailsViewRow_Property(QPropertyHandle* inHandle); ~QDetailsViewRow_Property(); void setHandle(QPropertyHandle* inHandle); void setupItem(QQuickItem* inParent) override; void attachChildren() override; protected: QPropertyHandle* mHandle = nullptr; QMetaObject::Connection mStructureChangedConnection; QSharedPointer mPropertyTypeCustomization; }; class DIAGRAM_DESIGNER_PUBLIC QDetailsViewRow_Custom : public IDetailsViewRow { public: QDetailsViewRow_Custom(std::function inRowCreator); protected: QString name() override { return "Custom"; } void setupItem(QQuickItem* inParent) override; private: std::function mRowCreator; }; #endif // QQuickDetailsViewRow_h__