JavaScriptFilter: Use Acceptor for LocatorFilterEntry

Change-Id: Icceb830a391809cc760adf106e6c9e8b71dcb176
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Jarek Kobus
2023-04-11 23:12:36 +02:00
parent f98a03a28d
commit 9eb826f393
2 changed files with 24 additions and 38 deletions

View File

@@ -12,8 +12,6 @@
namespace Core { namespace Core {
namespace Internal { namespace Internal {
enum class EngineAction { Reset = 1, Abort };
JavaScriptFilter::JavaScriptFilter() JavaScriptFilter::JavaScriptFilter()
{ {
setId("JavaScriptFilter"); setId("JavaScriptFilter");
@@ -52,53 +50,46 @@ QList<LocatorFilterEntry> JavaScriptFilter::matchesFor(
QList<LocatorFilterEntry> entries; QList<LocatorFilterEntry> entries;
if (entry.trimmed().isEmpty()) { if (entry.trimmed().isEmpty()) {
LocatorFilterEntry entry{this, Tr::tr("Reset Engine")}; LocatorFilterEntry entry;
entry.internalData = QVariant::fromValue(EngineAction::Reset); entry.displayName = Tr::tr("Reset Engine");
entry.acceptor = [this] {
m_engine.reset();
return AcceptResult();
};
entries.append(entry); entries.append(entry);
} else { } else {
// Note, that evaluate may be interrupted from caller thread.
// In this case m_aborted is set to true.
const QString result = m_engine->evaluate(entry).toString(); const QString result = m_engine->evaluate(entry).toString();
if (m_aborted) { if (m_aborted) {
const QString message = entry + " = " + Tr::tr("Engine aborted after timeout."); const QString message = entry + " = " + Tr::tr("Engine aborted after timeout.");
LocatorFilterEntry entry(this, message); LocatorFilterEntry entry;
entry.internalData = QVariant::fromValue(EngineAction::Abort); entry.displayName = message;
entry.acceptor = [] { return AcceptResult(); };
entries.append(entry); entries.append(entry);
} else { } else {
const auto acceptor = [](const QString &clipboardContents) {
return [clipboardContents] {
QGuiApplication::clipboard()->setText(clipboardContents);
return AcceptResult();
};
};
const QString expression = entry + " = " + result; const QString expression = entry + " = " + result;
entries.append({this, expression}); entries.append({this, expression});
LocatorFilterEntry resultEntry(this, Tr::tr("Copy to clipboard: %1").arg(result)); LocatorFilterEntry resultEntry;
resultEntry.internalData = result; resultEntry.displayName = Tr::tr("Copy to clipboard: %1").arg(result);
resultEntry.acceptor = acceptor(result);
entries.append(resultEntry); entries.append(resultEntry);
LocatorFilterEntry expressionEntry(this, Tr::tr("Copy to clipboard: %1").arg(expression));
resultEntry.internalData = expression; LocatorFilterEntry expressionEntry;
expressionEntry.displayName = Tr::tr("Copy to clipboard: %1").arg(expression);
expressionEntry.acceptor = acceptor(expression);
entries.append(expressionEntry); entries.append(expressionEntry);
} }
} }
return entries; return entries;
} }
void JavaScriptFilter::accept(const LocatorFilterEntry &selection, QString *newText,
int *selectionStart, int *selectionLength) const
{
Q_UNUSED(newText)
Q_UNUSED(selectionStart)
Q_UNUSED(selectionLength)
if (selection.internalData.isNull())
return;
const EngineAction action = selection.internalData.value<EngineAction>();
if (action == EngineAction::Reset) {
m_engine.reset();
return;
}
if (action == EngineAction::Abort)
return;
QClipboard *clipboard = QGuiApplication::clipboard();
clipboard->setText(selection.internalData.toString());
}
void JavaScriptFilter::setupEngine() void JavaScriptFilter::setupEngine()
{ {
m_engine.reset(new QJSEngine); m_engine.reset(new QJSEngine);
@@ -130,5 +121,3 @@ void JavaScriptFilter::setupEngine()
} // namespace Internal } // namespace Internal
} // namespace Core } // namespace Core
Q_DECLARE_METATYPE(Core::Internal::EngineAction)

View File

@@ -27,9 +27,6 @@ public:
void prepareSearch(const QString &entry) override; void prepareSearch(const QString &entry) override;
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future, QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
const QString &entry) override; const QString &entry) override;
void accept(const Core::LocatorFilterEntry &selection, QString *newText,
int *selectionStart, int *selectionLength) const override;
private: private:
void setupEngine(); void setupEngine();