complete fit most & just with children rect & parent width, height
This commit is contained in:
@@ -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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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:
|
||||
|
@@ -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:
|
||||
|
@@ -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();
|
||||
}
|
||||
|
@@ -20,9 +20,12 @@ protected:
|
||||
|
||||
private:
|
||||
QString mId;
|
||||
QString mType;
|
||||
|
||||
QJSValue mLayoutConfig;
|
||||
|
||||
public:
|
||||
QString mType;
|
||||
|
||||
using DoricContextHolder::DoricContextHolder;
|
||||
|
||||
void init(DoricSuperNode *superNode);
|
||||
|
Reference in New Issue
Block a user