add prompt
This commit is contained in:
parent
abccec1321
commit
d624272089
@ -8,18 +8,26 @@
|
|||||||
|
|
||||||
class DoricPromise {
|
class DoricPromise {
|
||||||
public:
|
public:
|
||||||
static void resolve(DoricContext *context, QString callbackId) {
|
static void resolve(DoricContext *context, QString callbackId,
|
||||||
|
QVariantList args) {
|
||||||
QVariantList params;
|
QVariantList params;
|
||||||
params.append(context->getContextId());
|
params.append(context->getContextId());
|
||||||
params.append(callbackId);
|
params.append(callbackId);
|
||||||
|
|
||||||
|
foreach (QVariant arg, args) { params.append(arg); }
|
||||||
|
|
||||||
context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_RESOLVE,
|
context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_RESOLVE,
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reject(DoricContext *context, QString callbackId) {
|
static void reject(DoricContext *context, QString callbackId,
|
||||||
|
QVariantList args) {
|
||||||
QVariantList params;
|
QVariantList params;
|
||||||
params.append(context->getContextId());
|
params.append(context->getContextId());
|
||||||
params.append(callbackId);
|
params.append(callbackId);
|
||||||
|
|
||||||
|
foreach (QVariant arg, args) { params.append(arg); }
|
||||||
|
|
||||||
context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_REJECT,
|
context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_REJECT,
|
||||||
params);
|
params);
|
||||||
}
|
}
|
||||||
|
@ -180,10 +180,79 @@ void DoricModalPlugin::confirm(QString jsValueString, QString callbackId) {
|
|||||||
DoricThreadMode::UI);
|
DoricThreadMode::UI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DoricModalPlugin::prompt(QString jsValueString, QString callbackId) {
|
||||||
|
getContext()->getDriver()->asyncCall(
|
||||||
|
[this, jsValueString, callbackId] {
|
||||||
|
QJsonDocument document =
|
||||||
|
QJsonDocument::fromJson(jsValueString.toUtf8());
|
||||||
|
QJsonValue jsValue = document.object();
|
||||||
|
|
||||||
|
QJsonValue titleVal = jsValue["title"];
|
||||||
|
QJsonValue msgVal = jsValue["msg"];
|
||||||
|
QJsonValue okBtn = jsValue["okLabel"];
|
||||||
|
QJsonValue cancelBtn = jsValue["cancelLabel"];
|
||||||
|
|
||||||
|
QQmlComponent component(getContext()->getQmlEngine());
|
||||||
|
const QUrl url(QStringLiteral("qrc:/doric/qml/prompt.qml"));
|
||||||
|
component.loadUrl(url);
|
||||||
|
if (component.isError()) {
|
||||||
|
qCritical() << component.errorString();
|
||||||
|
}
|
||||||
|
QQuickWindow *window = qobject_cast<QQuickWindow *>(component.create());
|
||||||
|
window->setProperty("pointer", QString::number((qint64)window));
|
||||||
|
window->setProperty("plugin", QString::number((qint64)this));
|
||||||
|
window->setProperty("callbackId", callbackId);
|
||||||
|
|
||||||
|
window->setProperty("title", titleVal.toString());
|
||||||
|
window->setProperty("msg", msgVal.toString());
|
||||||
|
window->setProperty("okLabel", okBtn.toString());
|
||||||
|
window->setProperty("cancelLabel", cancelBtn.toString());
|
||||||
|
|
||||||
|
QQuickWindow *parentWindow =
|
||||||
|
getContext()->getRootNode()->getRootView()->window();
|
||||||
|
|
||||||
|
std::function setX = [window, parentWindow]() {
|
||||||
|
window->setProperty("x",
|
||||||
|
(parentWindow->width() - window->width()) / 2.f +
|
||||||
|
parentWindow->x());
|
||||||
|
};
|
||||||
|
std::function setY = [window, parentWindow]() {
|
||||||
|
window->setProperty("y",
|
||||||
|
(parentWindow->height() - window->height()) / 2 +
|
||||||
|
parentWindow->y());
|
||||||
|
};
|
||||||
|
// init set x
|
||||||
|
setX();
|
||||||
|
// init set y
|
||||||
|
setY();
|
||||||
|
|
||||||
|
// update x
|
||||||
|
connect(window, &QQuickWindow::widthChanged, setX);
|
||||||
|
|
||||||
|
// update y
|
||||||
|
connect(window, &QQuickWindow::heightChanged, setY);
|
||||||
|
},
|
||||||
|
DoricThreadMode::UI);
|
||||||
|
}
|
||||||
|
|
||||||
void DoricModalPlugin::onAccepted(QString callbackId) {
|
void DoricModalPlugin::onAccepted(QString callbackId) {
|
||||||
DoricPromise::resolve(getContext(), callbackId);
|
QVariantList args;
|
||||||
|
DoricPromise::resolve(getContext(), callbackId, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoricModalPlugin::onAcceptedWithInput(QString callbackId, QString input) {
|
||||||
|
QVariantList args;
|
||||||
|
args.append(input);
|
||||||
|
DoricPromise::resolve(getContext(), callbackId, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoricModalPlugin::onRejected(QString callbackId) {
|
void DoricModalPlugin::onRejected(QString callbackId) {
|
||||||
DoricPromise::reject(getContext(), callbackId);
|
QVariantList args;
|
||||||
|
DoricPromise::reject(getContext(), callbackId, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoricModalPlugin::onRejectedWithInput(QString callbackId, QString input) {
|
||||||
|
QVariantList args;
|
||||||
|
args.append(input);
|
||||||
|
DoricPromise::reject(getContext(), callbackId, args);
|
||||||
}
|
}
|
||||||
|
@ -14,9 +14,15 @@ public:
|
|||||||
|
|
||||||
Q_INVOKABLE void confirm(QString jsValueString, QString callbackId);
|
Q_INVOKABLE void confirm(QString jsValueString, QString callbackId);
|
||||||
|
|
||||||
|
Q_INVOKABLE void prompt(QString jsValueString, QString callbackId);
|
||||||
|
|
||||||
void onAccepted(QString callbackId);
|
void onAccepted(QString callbackId);
|
||||||
|
|
||||||
|
void onAcceptedWithInput(QString callbackId, QString input);
|
||||||
|
|
||||||
void onRejected(QString callbackId);
|
void onRejected(QString callbackId);
|
||||||
|
|
||||||
|
void onRejectedWithInput(QString callbackId, QString input);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DORICMODALPLUGIN_H
|
#endif // DORICMODALPLUGIN_H
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
<file alias="toast.qml">resources/toast.qml</file>
|
<file alias="toast.qml">resources/toast.qml</file>
|
||||||
<file alias="alert.qml">resources/alert.qml</file>
|
<file alias="alert.qml">resources/alert.qml</file>
|
||||||
<file alias="confirm.qml">resources/confirm.qml</file>
|
<file alias="confirm.qml">resources/confirm.qml</file>
|
||||||
|
<file alias="prompt.qml">resources/prompt.qml</file>
|
||||||
|
|
||||||
<file alias="util.mjs">resources/util.mjs</file>
|
<file alias="util.mjs">resources/util.mjs</file>
|
||||||
<file alias="gravity.mjs">resources/gravity.mjs</file>
|
<file alias="gravity.mjs">resources/gravity.mjs</file>
|
||||||
|
72
doric-Qt/doric/resources/prompt.qml
Normal file
72
doric-Qt/doric/resources/prompt.qml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import QtQuick 2.12
|
||||||
|
import QtQuick.Controls 2.12
|
||||||
|
import QtQuick.Layouts 1.15
|
||||||
|
|
||||||
|
Window {
|
||||||
|
id: window
|
||||||
|
|
||||||
|
flags: flags | Qt.WindowStaysOnTopHint | Qt.Tool | Qt.FramelessWindowHint
|
||||||
|
visible: true
|
||||||
|
modality: Qt.ApplicationModal
|
||||||
|
|
||||||
|
property var pointer
|
||||||
|
property var plugin
|
||||||
|
property var callbackId
|
||||||
|
|
||||||
|
property var title
|
||||||
|
property var msg
|
||||||
|
property var okLabel
|
||||||
|
property var cancelLabel
|
||||||
|
|
||||||
|
onTitleChanged: {
|
||||||
|
dialog.title = title
|
||||||
|
}
|
||||||
|
|
||||||
|
onMsgChanged: {
|
||||||
|
content.text = msg
|
||||||
|
}
|
||||||
|
|
||||||
|
onOkLabelChanged: {
|
||||||
|
dialog.standardButton(Dialog.Ok).text = qsTrId(okLabel)
|
||||||
|
}
|
||||||
|
|
||||||
|
onCancelLabelChanged: {
|
||||||
|
dialog.standardButton(Dialog.Cancel).text = qsTrId(cancelLabel)
|
||||||
|
}
|
||||||
|
|
||||||
|
Dialog {
|
||||||
|
id: dialog
|
||||||
|
standardButtons: Dialog.Ok | Dialog.Cancel
|
||||||
|
modal: true
|
||||||
|
contentItem: ColumnLayout {
|
||||||
|
Text {
|
||||||
|
id: content
|
||||||
|
}
|
||||||
|
|
||||||
|
TextArea {
|
||||||
|
id: input
|
||||||
|
Layout.fillWidth: true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onAccepted: {
|
||||||
|
dialogBridge.onAcceptedWithInput(pointer, plugin, callbackId, input.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
onRejected: {
|
||||||
|
dialogBridge.onRejectedWithInput(pointer, plugin, callbackId, input.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
onWidthChanged: {
|
||||||
|
window.width = implicitWidth
|
||||||
|
}
|
||||||
|
|
||||||
|
onHeightChanged: {
|
||||||
|
window.height = implicitHeight
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
dialog.open()
|
||||||
|
}
|
||||||
|
}
|
@ -34,3 +34,35 @@ void DoricDialogBridge::onRejected(QString windowPointer, QString pluginPointer,
|
|||||||
modalPlugin->onRejected(callbackId);
|
modalPlugin->onRejected(callbackId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DoricDialogBridge::onAcceptedWithInput(QString windowPointer,
|
||||||
|
QString pluginPointer,
|
||||||
|
QString callbackId, QString input) {
|
||||||
|
{
|
||||||
|
QObject *object = (QObject *)(windowPointer.toULongLong());
|
||||||
|
QQuickWindow *window = dynamic_cast<QQuickWindow *>(object);
|
||||||
|
window->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QObject *object = (QObject *)(pluginPointer.toULongLong());
|
||||||
|
DoricModalPlugin *modalPlugin = dynamic_cast<DoricModalPlugin *>(object);
|
||||||
|
modalPlugin->onAcceptedWithInput(callbackId, input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void DoricDialogBridge::onRejectedWithInput(QString windowPointer,
|
||||||
|
QString pluginPointer,
|
||||||
|
QString callbackId, QString input) {
|
||||||
|
{
|
||||||
|
QObject *object = (QObject *)(windowPointer.toULongLong());
|
||||||
|
QQuickWindow *window = dynamic_cast<QQuickWindow *>(object);
|
||||||
|
window->deleteLater();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
QObject *object = (QObject *)(pluginPointer.toULongLong());
|
||||||
|
DoricModalPlugin *modalPlugin = dynamic_cast<DoricModalPlugin *>(object);
|
||||||
|
modalPlugin->onRejectedWithInput(callbackId, input);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -12,9 +12,17 @@ public:
|
|||||||
void onAccepted(QString windowPointer, QString pluginPointer,
|
void onAccepted(QString windowPointer, QString pluginPointer,
|
||||||
QString callbackId);
|
QString callbackId);
|
||||||
|
|
||||||
|
Q_INVOKABLE
|
||||||
|
void onAcceptedWithInput(QString windowPointer, QString pluginPointer,
|
||||||
|
QString callbackId, QString input);
|
||||||
|
|
||||||
Q_INVOKABLE
|
Q_INVOKABLE
|
||||||
void onRejected(QString windowPointer, QString pluginPointer,
|
void onRejected(QString windowPointer, QString pluginPointer,
|
||||||
QString callbackId);
|
QString callbackId);
|
||||||
|
|
||||||
|
Q_INVOKABLE
|
||||||
|
void onRejectedWithInput(QString windowPointer, QString pluginPointer,
|
||||||
|
QString callbackId, QString input);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DORICDIALOGBRIDGE_H
|
#endif // DORICDIALOGBRIDGE_H
|
||||||
|
Reference in New Issue
Block a user