#ifndef DORICVIEWNODE_H #define DORICVIEWNODE_H #include #include #include #include "DoricExport.h" #include "../utils/DoricContextHolder.h" #include "../utils/DoricLayouts.h" class DoricSuperNode; class DORIC_EXPORT DoricViewNode : public DoricContextHolder { protected: QQuickItem *mView; DoricLayouts *mLayouts = nullptr; virtual QQuickItem *build() = 0; void createLayouts(QQuickItem *view); DoricLayouts *getLayouts(); void setLayoutConfig(QJsonValue layoutConfig); private: QString mId; QList getIdList(); QString clickFunction; public: QString mType; DoricSuperNode *mSuperNode = nullptr; using DoricContextHolder::DoricContextHolder; void init(DoricSuperNode *superNode); static DoricViewNode *create(DoricContext *context, QString type) { bool classRegistered = context->getDriver()->getRegistry()->acquireNodeInfo(type); if (classRegistered) { QObject *node = context->getDriver()->getRegistry()->nodes.createObject(type); DoricViewNode *castNode = dynamic_cast(node); castNode->setContext(context); castNode->mType = type; return castNode; } else { qCritical() << "DoricViewNode create error: " + type; return nullptr; } } QString getId(); void setId(QString id); QString getType(); QQuickItem *getNodeView(); virtual void blend(QJsonValue jsValue); virtual void blend(QQuickItem *view, QString name, QJsonValue prop); virtual void afterBlended(QJsonValue prop); virtual void blendLayoutConfig(QJsonValue jsObject); virtual void requestLayout(); void onClick(); std::shared_ptr callJSResponse(QString funcId, QVariantList args); std::shared_ptr pureCallJSResponse(QString funcId, QVariantList args); QSizeF sizeThatFits(QSizeF size); }; #endif // DORICVIEWNODE_H