handle input on text change & padding

This commit is contained in:
王劲鹏
2021-05-27 10:56:58 +08:00
committed by osborn
parent 143e52ab63
commit 2782552b41
11 changed files with 108 additions and 0 deletions

View File

@@ -32,7 +32,35 @@ void DoricInputNode::blend(QQuickItem *view, QString name, QJsonValue prop) {
view->setProperty("placeholderText", prop.toString());
} else if (name == "textAlignment") {
view->setProperty("textAlignment", prop.toInt());
} else if (name == "onTextChange") {
this->onTextChangeId = prop.toString();
} else if (name == "onFocusChange") {
this->onFocusChangeId = prop.toString();
} else if (name == "padding") {
DoricViewNode::blend(view, name, prop);
view->setProperty("leftPadding", prop["left"].toDouble());
view->setProperty("rightPadding", prop["right"].toDouble());
view->setProperty("topPadding", prop["top"].toDouble());
view->setProperty("bottomPadding", prop["bottom"].toDouble());
} else {
DoricViewNode::blend(view, name, prop);
}
}
QSizeF DoricInputNode::sizeThatFits(QSizeF size) {
DoricLayouts *layout =
(DoricLayouts *)mView->property("doricLayout").toULongLong();
QSizeF ret = DoricViewNode::sizeThatFits(size);
return QSizeF(
ret.width() - layout->getPaddingLeft() - layout->getPaddingRight(),
ret.height() - layout->getPaddingTop() - layout->getPaddingBottom());
}
void DoricInputNode::onTextChange(QString text) {
if (!onTextChangeId.isEmpty()) {
QVariantList args;
args.append(text);
callJSResponse(onTextChangeId, args);
}
}

View File

@@ -6,12 +6,20 @@
#include "DoricViewNode.h"
class DORIC_EXPORT DoricInputNode : public DoricViewNode {
private:
QString onTextChangeId;
QString onFocusChangeId;
public:
using DoricViewNode::DoricViewNode;
QQuickItem *build() override;
virtual void blend(QQuickItem *view, QString name, QJsonValue prop) override;
QSizeF sizeThatFits(QSizeF size);
void onTextChange(QString text);
};
#endif // DORICINPUTNODE_H

View File

@@ -242,3 +242,8 @@ void DoricViewNode::onClick() {
QVariantList args;
callJSResponse(clickFunction, args);
}
QSizeF DoricViewNode::sizeThatFits(QSizeF size) {
return QSizeF(qMin(size.width(), mView->width()),
qMin(size.height(), mView->height()));
}

View File

@@ -84,5 +84,7 @@ public:
std::shared_ptr<DoricAsyncResult> pureCallJSResponse(QString funcId,
QVariantList args);
QSizeF sizeThatFits(QSizeF size);
};
#endif // DORICVIEWNODE_H