diff --git a/doric-Qt/doric/DoricPanel.cpp b/doric-Qt/doric/DoricPanel.cpp index be515669..24102b26 100644 --- a/doric-Qt/doric/DoricPanel.cpp +++ b/doric-Qt/doric/DoricPanel.cpp @@ -1,7 +1,7 @@ #include "DoricPanel.h" #include "shader/DoricRootNode.h" -DoricPanel::DoricPanel() {} +DoricPanel::DoricPanel(QQuickItem *quickItem) { mQuickItem = quickItem; } void DoricPanel::config(QString script, QString alias, QString extra) { DoricContext *context = DoricContext::create(script, alias, extra); @@ -10,6 +10,6 @@ void DoricPanel::config(QString script, QString alias, QString extra) { void DoricPanel::config(DoricContext *context) { this->mContext = context; - this->mContext->getRootNode()->setRootView(this); - this->mContext->build(width(), height()); + this->mContext->getRootNode()->setRootView(mQuickItem); + this->mContext->build(mQuickItem->width(), mQuickItem->height()); } diff --git a/doric-Qt/doric/DoricPanel.h b/doric-Qt/doric/DoricPanel.h index f914635f..7d5f47d9 100644 --- a/doric-Qt/doric/DoricPanel.h +++ b/doric-Qt/doric/DoricPanel.h @@ -5,14 +5,16 @@ #include "DoricContext.h" -class DoricPanel : public QQuickItem { +class DoricPanel { private: DoricContext *mContext; int renderedWidth = -1; int renderedHeight = -1; + QQuickItem *mQuickItem; + public: - DoricPanel(); + DoricPanel(QQuickItem *quickItem); void config(QString script, QString alias, QString extra); diff --git a/doric-Qt/doric/demo/DoricDemoBridge.cpp b/doric-Qt/doric/demo/DoricDemoBridge.cpp index a7ee3cfd..ecddd254 100644 --- a/doric-Qt/doric/demo/DoricDemoBridge.cpp +++ b/doric-Qt/doric/demo/DoricDemoBridge.cpp @@ -21,23 +21,18 @@ void DoricDemoBridge::navigate(QVariant route) { view->setHeight(800); } - DoricPanel *panel = new DoricPanel(); - panel->setParentItem(view->rootObject()); - panel->setWidth(450); - panel->setHeight(800); - panel->config(script, name, NULL); + { + QQmlComponent component(view->engine()); + const QUrl url(QStringLiteral("qrc:/doric/qml/panel.qml")); + component.loadUrl(url); + QQuickItem *quickItem = qobject_cast(component.create()); + DoricPanel *panel = new DoricPanel(quickItem); + quickItem->setWidth(450); + quickItem->setHeight(800); + quickItem->setParentItem(view->rootObject()); - QQmlEngine *engine = view->engine(); - QQmlComponent component(engine); - const QUrl empty(QStringLiteral("qrc:/doric/qml/panel.qml")); - component.loadUrl(empty); - QQuickItem *childItem = qobject_cast(component.create()); - - if (childItem == nullptr) { - qCritical() << component.errorString(); - return; + panel->config(script, name, NULL); } - childItem->setParentItem(view->rootObject()); view->show(); break; diff --git a/doric-Qt/doric/doric.pro.user b/doric-Qt/doric/doric.pro.user index 52bbe3b0..8749d384 100644 --- a/doric-Qt/doric/doric.pro.user +++ b/doric-Qt/doric/doric.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/doric-Qt/doric/resources/panel.qml b/doric-Qt/doric/resources/panel.qml index 15c79292..caceacaa 100644 --- a/doric-Qt/doric/resources/panel.qml +++ b/doric-Qt/doric/resources/panel.qml @@ -1,8 +1,5 @@ import QtQuick 2.12 import QtQuick.Controls 2.5 -Rectangle { - width: 100 - height: 100 - color: 'red' +StackView { } diff --git a/doric-Qt/doric/shader/DoricGroupNode.cpp b/doric-Qt/doric/shader/DoricGroupNode.cpp index 493f3f70..36f22924 100644 --- a/doric-Qt/doric/shader/DoricGroupNode.cpp +++ b/doric-Qt/doric/shader/DoricGroupNode.cpp @@ -1 +1,19 @@ #include "DoricGroupNode.h" + +void DoricGroupNode::blend(QQuickItem *view, QString name, QJSValue prop) { + if (name == "children") { + mChildViewIds.clear(); + if (prop.isArray()) { + qDebug() << prop.toString(); + } + } else { + DoricSuperNode::blend(view, name, prop); + } +} + +void DoricGroupNode::blend(QJSValue jsValue) { + DoricViewNode::blend(jsValue); + configChildNode(); +} + +void DoricGroupNode::configChildNode() {} diff --git a/doric-Qt/doric/shader/DoricGroupNode.h b/doric-Qt/doric/shader/DoricGroupNode.h index 13ac7fcb..6b125435 100644 --- a/doric-Qt/doric/shader/DoricGroupNode.h +++ b/doric-Qt/doric/shader/DoricGroupNode.h @@ -6,6 +6,17 @@ class DoricGroupNode : public DoricSuperNode { public: using DoricSuperNode::DoricSuperNode; + + virtual void blend(QQuickItem *view, QString name, QJSValue prop) override; + + virtual void blend(QJSValue jsValue) override; + +protected: + QList mChildNodes; + + QList mChildViewIds; + + void configChildNode(); }; #endif // DORICGROUPNODE_H diff --git a/doric-Qt/doric/shader/DoricSuperNode.cpp b/doric-Qt/doric/shader/DoricSuperNode.cpp index be0309ab..1d1f3fb4 100644 --- a/doric-Qt/doric/shader/DoricSuperNode.cpp +++ b/doric-Qt/doric/shader/DoricSuperNode.cpp @@ -1 +1,11 @@ #include "DoricSuperNode.h" + +void DoricSuperNode::blend(QQuickItem *view, QString name, QJSValue prop) { + if (name == "subviews") { + if (prop.isArray()) { + qDebug() << prop.toString(); + } + } else { + DoricViewNode::blend(view, name, prop); + } +} diff --git a/doric-Qt/doric/shader/DoricSuperNode.h b/doric-Qt/doric/shader/DoricSuperNode.h index 413617d7..e238e8ef 100644 --- a/doric-Qt/doric/shader/DoricSuperNode.h +++ b/doric-Qt/doric/shader/DoricSuperNode.h @@ -6,6 +6,8 @@ class DoricSuperNode : public DoricViewNode { protected: + virtual void blend(QQuickItem *view, QString name, QJSValue prop) override; + void blendSubLayoutConfig(DoricViewNode *viewNode); public: diff --git a/doric-Qt/doric/shader/DoricViewNode.cpp b/doric-Qt/doric/shader/DoricViewNode.cpp index 2e879e41..87590ee8 100644 --- a/doric-Qt/doric/shader/DoricViewNode.cpp +++ b/doric-Qt/doric/shader/DoricViewNode.cpp @@ -1,6 +1,8 @@ -#include "DoricViewNode.h" +#include + #include "../utils/DoricUtils.h" #include "DoricSuperNode.h" +#include "DoricViewNode.h" void DoricViewNode::blendLayoutConfig() {} @@ -19,4 +21,18 @@ QString DoricViewNode::getId() { return mId; } void DoricViewNode::setId(QString id) { mId = id; } -void DoricViewNode::blend(QJSValue jsValue) { qDebug() << jsValue.toString(); } +void DoricViewNode::blend(QJSValue jsValue) { + QJSValueIterator it(jsValue); + while (it.hasNext()) { + it.next(); + qDebug() << it.name() << ": " << it.value().toString(); + blend(mView, it.name(), it.value()); + } +} + +void DoricViewNode::blend(QQuickItem *view, QString name, QJSValue prop) { + if (name == "width") { + + } else if (name == "height") { + } +} diff --git a/doric-Qt/doric/shader/DoricViewNode.h b/doric-Qt/doric/shader/DoricViewNode.h index 28322f4f..2679de28 100644 --- a/doric-Qt/doric/shader/DoricViewNode.h +++ b/doric-Qt/doric/shader/DoricViewNode.h @@ -33,6 +33,8 @@ public: void setId(QString id); - void blend(QJSValue jsValue); + virtual void blend(QJSValue jsValue); + + virtual void blend(QQuickItem *view, QString name, QJSValue prop); }; #endif // DORICVIEWNODE_H