From 3feee0256cff0d6c8ca06bc419191ea3e97b8d2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Du=C5=A1an=20Poizl?= Date: Mon, 28 Apr 2025 17:04:45 +0200 Subject: [PATCH] New core.question script method --- batchprocessing.cpp | 39 +++++++++++++++++++++++++++++++++++++++ batchprocessing.h | 1 + scriptengine.cpp | 7 +++++++ scriptengine.h | 1 + 4 files changed, 48 insertions(+) diff --git a/batchprocessing.cpp b/batchprocessing.cpp index 4133402..7087836 100644 --- a/batchprocessing.cpp +++ b/batchprocessing.cpp @@ -272,6 +272,45 @@ QJSValue BatchProcessing::getItem(const QStringList &items, const QString &label return ok ? ret : QJSValue(); } +QJSValue BatchProcessing::question(const QString &question, const QStringList &buttons, const QString &title) +{ + QMessageBox::StandardButtons standardButtons = QMessageBox::NoButton; + if(buttons.contains("ok"))standardButtons |= QMessageBox::Ok; + if(buttons.contains("yes"))standardButtons |= QMessageBox::Yes; + if(buttons.contains("no"))standardButtons |= QMessageBox::No; + if(buttons.contains("yesall"))standardButtons |= QMessageBox::YesToAll; + if(buttons.contains("noall"))standardButtons |= QMessageBox::NoToAll; + if(buttons.contains("abort"))standardButtons |= QMessageBox::Abort; + if(buttons.contains("retry"))standardButtons |= QMessageBox::Retry; + if(buttons.contains("ignore"))standardButtons |= QMessageBox::Ignore; + if(buttons.contains("cancel"))standardButtons |= QMessageBox::Cancel; + if(buttons.contains("discard"))standardButtons |= QMessageBox::Discard; + if(buttons.contains("apply"))standardButtons |= QMessageBox::Apply; + if(buttons.contains("reset"))standardButtons |= QMessageBox::Reset; + if(standardButtons == QMessageBox::NoButton)standardButtons = QMessageBox::Ok; + + QMessageBox::StandardButton button = QMessageBox::question(this, title, question, standardButtons); + QJSValue ret; + switch(button) + { + default: + case QMessageBox::Ok: ret = "ok"; break; + case QMessageBox::Yes: ret = "yes"; break; + case QMessageBox::No: ret = "no"; break; + case QMessageBox::YesToAll: ret = "yesall"; break; + case QMessageBox::NoToAll: ret = "noall"; break; + case QMessageBox::Abort: ret = "abort"; break; + case QMessageBox::Retry: ret = "retry"; break; + case QMessageBox::Ignore: ret = "ignore"; break; + case QMessageBox::Cancel: ret = "cancel"; break; + case QMessageBox::Discard: ret = "discard"; break; + case QMessageBox::Apply: ret = "apply"; break; + case QMessageBox::Reset: ret = "reset"; break; + } + + return ret; +} + void BatchProcessing::plot(const QVariant &graph) { ChartGraph *chart = new ChartGraph(this); diff --git a/batchprocessing.h b/batchprocessing.h index b225b96..7e4d3ba 100644 --- a/batchprocessing.h +++ b/batchprocessing.h @@ -41,6 +41,7 @@ public slots: QJSValue getInt(const QString &label, int value); QJSValue getFloat(const QString &label, double value, int decimals); QJSValue getItem(const QStringList &items, const QString &label, int current); + QJSValue question(const QString &question, const QStringList &buttons, const QString &title = ""); void plot(const QVariant &graph); }; diff --git a/scriptengine.cpp b/scriptengine.cpp index e514f8e..b1b95b5 100644 --- a/scriptengine.cpp +++ b/scriptengine.cpp @@ -136,6 +136,13 @@ QJSValue ScriptEngine::getItem(const QStringList &items, const QString &label, i return ret; } +QJSValue ScriptEngine::question(const QString &question, const QStringList &buttons, const QString &title) const +{ + QJSValue ret; + QMetaObject::invokeMethod(_parent, "question", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QJSValue, ret), Q_ARG(QString, question), Q_ARG(QStringList, buttons), Q_ARG(QString, title)); + return ret; +} + void ScriptEngine::plot(const QJSValue &graph) { QVariant graphV = graph.toVariant(QJSValue::ConvertJSObjects); diff --git a/scriptengine.h b/scriptengine.h index add3199..e923876 100644 --- a/scriptengine.h +++ b/scriptengine.h @@ -47,6 +47,7 @@ public: Q_INVOKABLE QJSValue getInt(const QString &label = QString(), int value = 0); Q_INVOKABLE QJSValue getFloat(const QString &label = QString(), double value = 0, int decimals = 3) const; Q_INVOKABLE QJSValue getItem(const QStringList &items, const QString &label = "", int current = 0) const; + Q_INVOKABLE QJSValue question(const QString &question, const QStringList &buttons = {"ok"}, const QString &title = "") const; Q_INVOKABLE void plot(const QJSValue &pointsArray); Q_INVOKABLE QJSValue openFile(const QString &fileName, const QString &mode = "r"); bool convert(File *file, QString &outpath, const QString &format, const QVariantMap ¶ms, bool async);