#include "DoricNavBarPlugin.h" #include "engine/DoricPromise.h" #include "shader/DoricViewNode.h" #include "utils/DoricUtils.h" #include #include #include void DoricNavBarPlugin::isHidden(QString jsValueString, QString callbackId) { getContext()->getDriver()->asyncCall( [this, callbackId] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { bool hidden = !(navbar->isVisible()); QVariantList args; args.append(hidden); DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setHidden(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); bool hidden = jsValue["hidden"].toBool(); getContext()->getDriver()->asyncCall( [this, callbackId, hidden] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { navbar->setVisible(!hidden); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setTitle(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); QString titleString = jsValue["title"].toString(); getContext()->getDriver()->asyncCall( [this, callbackId, titleString] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { QQuickItem *title = navbar->findChild("title"); title->setProperty("text", titleString); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setBgColor(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); QString bgColor = DoricUtils::doricColor(jsValue["color"].toInt()).name(); getContext()->getDriver()->asyncCall( [this, callbackId, bgColor] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { navbar->setProperty("color", bgColor); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setLeft(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); getContext()->getDriver()->asyncCall( [this, callbackId, jsValue] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { QString viewId = jsValue["id"].toString(); QString type = jsValue["type"].toString(); DoricViewNode *viewNode = getContext()->targetViewNode(viewId); if (viewNode == nullptr) { viewNode = DoricViewNode::create(getContext(), type); viewNode->setId(viewId); viewNode->init(nullptr); } viewNode->blend(jsValue["props"]); QQuickItem *left = navbar->findChild("left"); foreach (QQuickItem *child, left->childItems()) { child->setParentItem(nullptr); child->deleteLater(); } viewNode->getNodeView()->setParentItem(left); getContext()->addHeadNode(TYPE_LEFT, viewNode); DoricLayouts *layout = (DoricLayouts *)(viewNode->getNodeView() ->property("doricLayout") .toULongLong()); layout->apply(QSizeF(navbar->width(), navbar->height())); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setRight(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); getContext()->getDriver()->asyncCall( [this, callbackId, jsValue] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { QString viewId = jsValue["id"].toString(); QString type = jsValue["type"].toString(); DoricViewNode *viewNode = getContext()->targetViewNode(viewId); if (viewNode == nullptr) { viewNode = DoricViewNode::create(getContext(), type); viewNode->setId(viewId); viewNode->init(nullptr); } viewNode->blend(jsValue["props"]); QQuickItem *right = navbar->findChild("right"); foreach (QQuickItem *child, right->childItems()) { child->setParentItem(nullptr); child->deleteLater(); } viewNode->getNodeView()->setParentItem(right); getContext()->addHeadNode(TYPE_RIGHT, viewNode); DoricLayouts *layout = (DoricLayouts *)(viewNode->getNodeView() ->property("doricLayout") .toULongLong()); layout->apply(QSizeF(navbar->width(), navbar->height())); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); } void DoricNavBarPlugin::setCenter(QString jsValueString, QString callbackId) { QJsonDocument document = QJsonDocument::fromJson(jsValueString.toUtf8()); QJsonValue jsValue = document.object(); getContext()->getDriver()->asyncCall( [this, callbackId, jsValue] { QQuickItem *navbar = getContext() ->getQmlEngine() ->rootObjects() .at(0) ->findChild("navbar"); if (navbar != nullptr) { QString viewId = jsValue["id"].toString(); QString type = jsValue["type"].toString(); DoricViewNode *viewNode = getContext()->targetViewNode(viewId); if (viewNode == nullptr) { viewNode = DoricViewNode::create(getContext(), type); viewNode->setId(viewId); viewNode->init(nullptr); } viewNode->blend(jsValue["props"]); QQuickItem *center = navbar->findChild("center"); foreach (QQuickItem *child, center->childItems()) { child->setParentItem(nullptr); child->deleteLater(); } viewNode->getNodeView()->setParentItem(center); getContext()->addHeadNode(TYPE_CENTER, viewNode); DoricLayouts *layout = (DoricLayouts *)(viewNode->getNodeView() ->property("doricLayout") .toULongLong()); layout->apply(QSizeF(navbar->width(), navbar->height())); QVariantList args; DoricPromise::resolve(getContext(), callbackId, args); } else { QVariantList args; args.append("Not implement NavBar"); DoricPromise::reject(getContext(), callbackId, args); } }, DoricThreadMode::UI); }