From 76d58e83039e50e5b584dfd3a45d782ee4835032 Mon Sep 17 00:00:00 2001 From: Andre Hartmann Date: Fri, 19 Jan 2018 19:28:52 +0100 Subject: [PATCH] JavaScriptFilter: Add engine reset MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I80c0e1c9270c9a67aa2494eeab1ccd942bf1885e Reviewed-by: André Hartmann Reviewed-by: Eike Ziller --- .../coreplugin/locator/javascriptfilter.cpp | 34 +++++++++++++------ .../coreplugin/locator/javascriptfilter.h | 4 ++- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/src/plugins/coreplugin/locator/javascriptfilter.cpp b/src/plugins/coreplugin/locator/javascriptfilter.cpp index 02803ecf728..6255101dca0 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.cpp +++ b/src/plugins/coreplugin/locator/javascriptfilter.cpp @@ -32,6 +32,11 @@ namespace Core { namespace Internal { +enum JavaScriptAction +{ + ResetEngine = QVariant::UserType + 1 +}; + JavaScriptFilter::JavaScriptFilter() { setId("JavaScriptFilter"); @@ -48,7 +53,8 @@ void JavaScriptFilter::prepareSearch(const QString &entry) { Q_UNUSED(entry); - setupEngine(); + if (!m_engine) + setupEngine(); } QList JavaScriptFilter::matchesFor( @@ -56,13 +62,17 @@ QList JavaScriptFilter::matchesFor( { Q_UNUSED(future); - const QString result = m_engine->evaluate(entry).toString(); - const QString expression = entry + " = " + result; - QList entries; - entries.append({this, expression, QVariant()}); - entries.append({this, tr("Copy to clipboard: %1").arg(result), result}); - entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression}); + if (entry.trimmed().isEmpty()) { + entries.append({this, tr("Reset Engine"), QVariant(ResetEngine, nullptr)}); + } else { + const QString result = m_engine->evaluate(entry).toString(); + const QString expression = entry + " = " + result; + + entries.append({this, expression, QVariant()}); + entries.append({this, tr("Copy to clipboard: %1").arg(result), result}); + entries.append({this, tr("Copy to clipboard: %1").arg(expression), expression}); + } return entries; } @@ -77,6 +87,11 @@ void JavaScriptFilter::accept(Core::LocatorFilterEntry selection, QString *newTe if (selection.internalData.isNull()) return; + if (selection.internalData.userType() == ResetEngine) { + m_engine.reset(); + return; + } + QClipboard *clipboard = QGuiApplication::clipboard(); clipboard->setText(selection.internalData.toString()); } @@ -89,10 +104,7 @@ void JavaScriptFilter::refresh(QFutureInterface &future) void JavaScriptFilter::setupEngine() { - if (m_engine) - return; - - m_engine = new QJSEngine(this); + m_engine.reset(new QJSEngine); m_engine->evaluate( "function abs(x) { return Math.abs(x); }\n" "function acos(x) { return Math.acos(x); }\n" diff --git a/src/plugins/coreplugin/locator/javascriptfilter.h b/src/plugins/coreplugin/locator/javascriptfilter.h index 50f5e85c3b1..9bf3ac51949 100644 --- a/src/plugins/coreplugin/locator/javascriptfilter.h +++ b/src/plugins/coreplugin/locator/javascriptfilter.h @@ -27,6 +27,8 @@ #include +#include + QT_BEGIN_NAMESPACE class QJSEngine; QT_END_NAMESPACE @@ -51,7 +53,7 @@ public: private: void setupEngine(); - QJSEngine *m_engine = nullptr; + mutable std::unique_ptr m_engine; }; } // namespace Internal