complete fit most & just with children rect & parent width, height

This commit is contained in:
王劲鹏
2021-03-15 15:30:17 +08:00
committed by osborn
parent 6c8c3d69bc
commit 23882e6088
14 changed files with 310 additions and 60 deletions

View File

@@ -23,6 +23,12 @@ void DoricGroupNode::blend(QJSValue jsValue) {
}
void DoricGroupNode::configChildNode() {
QQuickItem *parent = nullptr;
if (mType.isEmpty() || mType == "Stack") {
parent = mView;
} else {
parent = mView->childItems().at(0);
}
for (int idx = 0; idx < mChildViewIds.size(); idx++) {
QString id = mChildViewIds.at(idx);
QJSValue model = getSubModel(id);
@@ -53,17 +59,18 @@ void DoricGroupNode::configChildNode() {
if (newNode != nullptr) {
newNode->setId(id);
newNode->init(this);
newNode->blend(model.property("props"));
if (idx >= mChildNodes.size()) {
mChildNodes.append(newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->setParentItem(parent);
} else {
mChildNodes.insert(idx, newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->setParentItem(parent);
newNode->getNodeView()->stackBefore(
mView->childItems().at(idx));
parent->childItems().at(idx));
}
newNode->blend(model.property("props"));
}
}
} else {
@@ -80,24 +87,25 @@ void DoricGroupNode::configChildNode() {
if (position >= 0) {
// Found swap idx,position
mChildNodes.swapItemsAt(position, idx);
mView->childItems().swapItemsAt(position, idx);
parent->childItems().swapItemsAt(position, idx);
} else {
// Not found,insert
DoricViewNode *newNode = DoricViewNode::create(getContext(), type);
if (newNode != nullptr) {
newNode->setId(id);
newNode->init(this);
newNode->blend(model.property("props"));
if (idx >= mChildNodes.size()) {
mChildNodes.append(newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->setParentItem(parent);
} else {
mChildNodes.insert(idx, newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->setParentItem(parent);
newNode->getNodeView()->stackBefore(
mView->childItems().at(idx));
parent->childItems().at(idx));
}
newNode->blend(model.property("props"));
}
}
}
@@ -108,16 +116,17 @@ void DoricGroupNode::configChildNode() {
if (newNode != nullptr) {
newNode->setId(id);
newNode->init(this);
newNode->blend(model.property("props"));
if (idx >= mChildNodes.size()) {
mChildNodes.append(newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->setParentItem(parent);
} else {
mChildNodes.insert(idx, newNode);
newNode->getNodeView()->setParentItem(mView);
newNode->getNodeView()->stackBefore(mView->childItems().at(idx));
newNode->getNodeView()->setParentItem(parent);
newNode->getNodeView()->stackBefore(parent->childItems().at(idx));
}
newNode->blend(model.property("props"));
}
}
}

View File

@@ -16,7 +16,7 @@ QQuickItem *DoricHLayoutNode::build() {
void DoricHLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (name == "space") {
view->setProperty("spacing", prop.toInt());
view->childItems().at(0)->setProperty("spacing", prop.toInt());
} else if (name == "gravity") {
switch (prop.toInt()) {
case 1:

View File

@@ -16,7 +16,7 @@ QQuickItem *DoricVLayoutNode::build() {
void DoricVLayoutNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (name == "space") {
view->setProperty("spacing", prop.toInt());
view->childItems().at(0)->setProperty("spacing", prop.toInt());
} else if (name == "gravity") {
switch (prop.toInt()) {
case 1:

View File

@@ -5,34 +5,36 @@
#include "DoricViewNode.h"
void DoricViewNode::blendLayoutConfig(QJSValue jsObject) {
this->mLayoutConfig = jsObject;
QJSValue margin = jsObject.property("margin");
QJSValue widthSpec = jsObject.property("widthSpec");
QJSValue heightSpec = jsObject.property("heightSpec");
if (widthSpec.isNumber()) {
switch (widthSpec.toInt()) {
case 0:
mView->setProperty("widthSpec", 0);
break;
case 1:
qCritical() << 1;
mView->setProperty("widthSpec", 1);
break;
case 2:
qCritical() << 2;
break;
default:
qCritical() << "default";
mView->setProperty("widthSpec", 2);
break;
}
}
if (heightSpec.isNumber()) {
switch (heightSpec.toInt()) {
case 0:
mView->setProperty("heightSpec", 0);
break;
case 1:
qCritical() << 1;
mView->setProperty("heightSpec", 1);
break;
case 2:
qCritical() << 2;
break;
default:
qCritical() << "default";
mView->setProperty("heightSpec", 2);
break;
}
}
@@ -80,12 +82,30 @@ void DoricViewNode::blend(QQuickItem *view, QString name, QJSValue prop) {
if (!prop.isNumber()) {
return;
}
view->setWidth(prop.toInt());
if (this->mLayoutConfig.isUndefined()) {
view->setWidth(prop.toInt());
} else {
QJSValue widthSpec = this->mLayoutConfig.property("widthSpec");
if (widthSpec.isNumber()) {
if (widthSpec.toInt() == 0) {
view->setWidth(prop.toInt());
}
}
}
} else if (name == "height") {
if (!prop.isNumber()) {
return;
}
view->setHeight(prop.toInt());
if (this->mLayoutConfig.isUndefined()) {
view->setHeight(prop.toInt());
} else {
QJSValue heightSpec = this->mLayoutConfig.property("heightSpec");
if (heightSpec.isNumber()) {
if (heightSpec.toInt() == 0) {
view->setHeight(prop.toInt());
}
}
}
} else if (name == "backgroundColor") {
QString color = DoricUtils::doricColor(prop.toNumber()).name();
view->setProperty("color", color);
@@ -95,6 +115,8 @@ void DoricViewNode::blend(QQuickItem *view, QString name, QJSValue prop) {
view->setProperty("y", prop.toInt());
} else if (name == "corners") {
view->setProperty("radius", prop.toInt());
} else if (name == "layoutConfig") {
} else {
qCritical() << name << ": " << prop.toString();
}

View File

@@ -20,9 +20,12 @@ protected:
private:
QString mId;
QString mType;
QJSValue mLayoutConfig;
public:
QString mType;
using DoricContextHolder::DoricContextHolder;
void init(DoricSuperNode *superNode);