add confirm
This commit is contained in:
		| @@ -5,7 +5,7 @@ | ||||
| #include "DoricDemoBridge.h" | ||||
| #include "DoricPanel.h" | ||||
| #include "utils/DoricMouseAreaBridge.h" | ||||
| #include "utils/DoricDialogOnAcceptedBridge.h" | ||||
| #include "utils/DoricDialogBridge.h" | ||||
| #include "utils/DoricUtils.h" | ||||
|  | ||||
| DoricDemoBridge::DoricDemoBridge(QObject *parent) : QObject(parent) {} | ||||
| @@ -70,6 +70,6 @@ void DoricDemoBridge::navigate(QVariant route) { | ||||
|   auto context = view->engine()->rootContext(); | ||||
|   DoricMouseAreaBridge *mouseAreaBridge = new DoricMouseAreaBridge(); | ||||
|   context->setContextProperty("mouseAreaBridge", mouseAreaBridge); | ||||
|   DoricDialogOnAcceptedBridge *dialogOnAcceptedBridge = new DoricDialogOnAcceptedBridge(); | ||||
|   context->setContextProperty("dialogOnAcceptedBridge", dialogOnAcceptedBridge); | ||||
|   DoricDialogBridge *dialogBridge = new DoricDialogBridge(); | ||||
|   context->setContextProperty("dialogBridge", dialogBridge); | ||||
| } | ||||
|   | ||||
| @@ -47,7 +47,7 @@ SOURCES += \ | ||||
|         shader/DoricViewNode.cpp \ | ||||
|         utils/DoricConstant.cpp \ | ||||
|         utils/DoricContextHolder.cpp \ | ||||
|         utils/DoricDialogOnAcceptedBridge.cpp \ | ||||
|         utils/DoricDialogBridge.cpp \ | ||||
|         utils/DoricLayouts.cpp \ | ||||
|         utils/DoricMouseAreaBridge.cpp \ | ||||
|         widget/flex/FlexLayout.cpp \ | ||||
| @@ -119,7 +119,7 @@ HEADERS += \ | ||||
|     utils/DoricConstant.h \ | ||||
|     utils/DoricContextHolder.h \ | ||||
|     utils/DoricCountDownLatch.h \ | ||||
|     utils/DoricDialogOnAcceptedBridge.h \ | ||||
|     utils/DoricDialogBridge.h \ | ||||
|     utils/DoricLayouts.h \ | ||||
|     utils/DoricMouseAreaBridge.h \ | ||||
|     utils/DoricObjectFactory.h \ | ||||
|   | ||||
| @@ -15,6 +15,14 @@ public: | ||||
|     context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_RESOLVE, | ||||
|                                             params); | ||||
|   } | ||||
|  | ||||
|   static void reject(DoricContext *context, QString callbackId) { | ||||
|     QVariantList params; | ||||
|     params.append(context->getContextId()); | ||||
|     params.append(callbackId); | ||||
|     context->getDriver()->invokeDoricMethod(DoricConstant::DORIC_BRIDGE_REJECT, | ||||
|                                             params); | ||||
|   } | ||||
| }; | ||||
|  | ||||
| #endif // DORICPROMISE_H | ||||
|   | ||||
| @@ -124,6 +124,64 @@ void DoricModalPlugin::alert(QString jsValueString, QString callbackId) { | ||||
|       DoricThreadMode::UI); | ||||
| } | ||||
|  | ||||
| void DoricModalPlugin::onAccept(QString callbackId) { | ||||
| void DoricModalPlugin::confirm(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/confirm.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("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) { | ||||
|   DoricPromise::resolve(getContext(), callbackId); | ||||
| } | ||||
|  | ||||
| void DoricModalPlugin::onRejected(QString callbackId) { | ||||
|   DoricPromise::reject(getContext(), callbackId); | ||||
| } | ||||
|   | ||||
| @@ -12,7 +12,11 @@ public: | ||||
|  | ||||
|   Q_INVOKABLE void alert(QString jsValueString, QString callbackId); | ||||
|  | ||||
|   void onAccept(QString callbackId); | ||||
|   Q_INVOKABLE void confirm(QString jsValueString, QString callbackId); | ||||
|  | ||||
|   void onAccepted(QString callbackId); | ||||
|  | ||||
|   void onRejected(QString callbackId); | ||||
| }; | ||||
|  | ||||
| #endif // DORICMODALPLUGIN_H | ||||
|   | ||||
| @@ -27,6 +27,7 @@ | ||||
|  | ||||
|         <file alias="toast.qml">resources/toast.qml</file> | ||||
|         <file alias="alert.qml">resources/alert.qml</file> | ||||
|         <file alias="confirm.qml">resources/confirm.qml</file> | ||||
|  | ||||
|         <file alias="util.mjs">resources/util.mjs</file> | ||||
|         <file alias="gravity.mjs">resources/gravity.mjs</file> | ||||
|   | ||||
| @@ -29,7 +29,7 @@ Window { | ||||
|         modal: true | ||||
|  | ||||
|         onAccepted: { | ||||
|             dialogOnAcceptedBridge.onClick(pointer, plugin, callbackId) | ||||
|             dialogBridge.onAccepted(pointer, plugin, callbackId) | ||||
|         } | ||||
|  | ||||
|         onWidthChanged: { | ||||
|   | ||||
							
								
								
									
										56
									
								
								doric-Qt/doric/resources/confirm.qml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								doric-Qt/doric/resources/confirm.qml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,56 @@ | ||||
| import QtQuick 2.12 | ||||
| import QtQuick.Controls 2.12 | ||||
|  | ||||
| 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 okLabel | ||||
|     property var cancelLabel | ||||
|  | ||||
|     onTitleChanged: { | ||||
|         dialog.title = title | ||||
|     } | ||||
|  | ||||
|     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 | ||||
|  | ||||
|         onAccepted: { | ||||
|             dialogBridge.onAccepted(pointer, plugin, callbackId) | ||||
|         } | ||||
|  | ||||
|         onRejected: { | ||||
|             dialogBridge.onRejected(pointer, plugin, callbackId) | ||||
|         } | ||||
|  | ||||
|         onWidthChanged: { | ||||
|             window.width = implicitWidth | ||||
|         } | ||||
|  | ||||
|         onHeightChanged: { | ||||
|             window.height = implicitHeight | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     Component.onCompleted: { | ||||
|         dialog.open() | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								doric-Qt/doric/utils/DoricDialogBridge.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								doric-Qt/doric/utils/DoricDialogBridge.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| #include "DoricDialogBridge.h" | ||||
| #include "plugin/DoricModalPlugin.h" | ||||
|  | ||||
| #include <QQuickWindow> | ||||
|  | ||||
| DoricDialogBridge::DoricDialogBridge(QObject *parent) : QObject(parent) {} | ||||
|  | ||||
| void DoricDialogBridge::onAccepted(QString windowPointer, QString pluginPointer, | ||||
|                                    QString callbackId) { | ||||
|   { | ||||
|     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->onAccepted(callbackId); | ||||
|   } | ||||
| } | ||||
|  | ||||
| void DoricDialogBridge::onRejected(QString windowPointer, QString pluginPointer, | ||||
|                                    QString callbackId) { | ||||
|   { | ||||
|     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->onRejected(callbackId); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										20
									
								
								doric-Qt/doric/utils/DoricDialogBridge.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								doric-Qt/doric/utils/DoricDialogBridge.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| #ifndef DORICDIALOGBRIDGE_H | ||||
| #define DORICDIALOGBRIDGE_H | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| class DoricDialogBridge : public QObject { | ||||
|   Q_OBJECT | ||||
| public: | ||||
|   explicit DoricDialogBridge(QObject *parent = nullptr); | ||||
|  | ||||
|   Q_INVOKABLE | ||||
|   void onAccepted(QString windowPointer, QString pluginPointer, | ||||
|                   QString callbackId); | ||||
|  | ||||
|   Q_INVOKABLE | ||||
|   void onRejected(QString windowPointer, QString pluginPointer, | ||||
|                   QString callbackId); | ||||
| }; | ||||
|  | ||||
| #endif // DORICDIALOGBRIDGE_H | ||||
| @@ -1,23 +0,0 @@ | ||||
| #include "DoricDialogOnAcceptedBridge.h" | ||||
| #include "plugin/DoricModalPlugin.h" | ||||
|  | ||||
| #include <QQuickWindow> | ||||
|  | ||||
| DoricDialogOnAcceptedBridge::DoricDialogOnAcceptedBridge(QObject *parent) | ||||
|     : QObject(parent) {} | ||||
|  | ||||
| void DoricDialogOnAcceptedBridge::onClick(QString windowPointer, | ||||
|                                           QString pluginPointer, | ||||
|                                           QString callbackId) { | ||||
|   { | ||||
|     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->onAccept(callbackId); | ||||
|   } | ||||
| } | ||||
| @@ -1,16 +0,0 @@ | ||||
| #ifndef DORICDIALOGONACCEPTEDBRIDGE_H | ||||
| #define DORICDIALOGONACCEPTEDBRIDGE_H | ||||
|  | ||||
| #include <QObject> | ||||
|  | ||||
| class DoricDialogOnAcceptedBridge : public QObject { | ||||
|   Q_OBJECT | ||||
| public: | ||||
|   explicit DoricDialogOnAcceptedBridge(QObject *parent = nullptr); | ||||
|  | ||||
|   Q_INVOKABLE | ||||
|   void onClick(QString windowPointer, QString pluginPointer, | ||||
|                QString callbackId); | ||||
| }; | ||||
|  | ||||
| #endif // DORICDIALOGONACCEPTEDBRIDGE_H | ||||
		Reference in New Issue
	
	Block a user