forked from qt-creator/qt-creator
Locator: Allow simple calculations by using QJSEngine
Task-number: QTCREATORBUG-14380 Change-Id: I807441ce00991856b3510a6793b454eb3c6a6c30 Reviewed-by: Orgad Shaneh <orgads@gmail.com> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
committed by
Eike Ziller
parent
76c25bcd6a
commit
aaaa543a32
@@ -343,6 +343,8 @@ Project {
|
||||
"filesystemfilter.ui",
|
||||
"ilocatorfilter.cpp",
|
||||
"ilocatorfilter.h",
|
||||
"javascriptfilter.cpp",
|
||||
"javascriptfilter.h",
|
||||
"locatorconstants.h",
|
||||
"locatorfiltersfilter.cpp",
|
||||
"locatorfiltersfilter.h",
|
||||
|
123
src/plugins/coreplugin/locator/javascriptfilter.cpp
Normal file
123
src/plugins/coreplugin/locator/javascriptfilter.cpp
Normal file
@@ -0,0 +1,123 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 Andre Hartmann <aha_1980@gmx.de>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#include "javascriptfilter.h"
|
||||
|
||||
#include <QClipboard>
|
||||
#include <QGuiApplication>
|
||||
#include <QJSEngine>
|
||||
|
||||
namespace Core {
|
||||
namespace Internal {
|
||||
|
||||
JavaScriptFilter::JavaScriptFilter()
|
||||
{
|
||||
setId("JavaScriptFilter");
|
||||
setDisplayName(tr("Evaluate JavaScript"));
|
||||
setIncludedByDefault(false);
|
||||
setShortcutString("=");
|
||||
}
|
||||
|
||||
JavaScriptFilter::~JavaScriptFilter()
|
||||
{
|
||||
}
|
||||
|
||||
void JavaScriptFilter::prepareSearch(const QString &entry)
|
||||
{
|
||||
Q_UNUSED(entry);
|
||||
|
||||
setupEngine();
|
||||
}
|
||||
|
||||
QList<LocatorFilterEntry> JavaScriptFilter::matchesFor(
|
||||
QFutureInterface<Core::LocatorFilterEntry> &future, const QString &entry)
|
||||
{
|
||||
Q_UNUSED(future);
|
||||
|
||||
const QString result = m_engine->evaluate(entry).toString();
|
||||
const QString expression = entry + " = " + result;
|
||||
|
||||
QList<LocatorFilterEntry> 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});
|
||||
|
||||
return entries;
|
||||
}
|
||||
|
||||
void JavaScriptFilter::accept(Core::LocatorFilterEntry selection, QString *newText,
|
||||
int *selectionStart, int *selectionLength) const
|
||||
{
|
||||
Q_UNUSED(newText);
|
||||
Q_UNUSED(selectionStart);
|
||||
Q_UNUSED(selectionLength);
|
||||
|
||||
if (selection.internalData.isNull())
|
||||
return;
|
||||
|
||||
QClipboard *clipboard = QGuiApplication::clipboard();
|
||||
clipboard->setText(selection.internalData.toString());
|
||||
}
|
||||
|
||||
void JavaScriptFilter::refresh(QFutureInterface<void> &future)
|
||||
{
|
||||
Q_UNUSED(future);
|
||||
// Nothing to refresh
|
||||
}
|
||||
|
||||
void JavaScriptFilter::setupEngine()
|
||||
{
|
||||
if (m_engine)
|
||||
return;
|
||||
|
||||
m_engine = new QJSEngine(this);
|
||||
m_engine->evaluate(
|
||||
"function abs(x) { return Math.abs(x); }\n"
|
||||
"function acos(x) { return Math.acos(x); }\n"
|
||||
"function asin(x) { return Math.asin(x); }\n"
|
||||
"function atan(x) { return Math.atan(x); }\n"
|
||||
"function atan2(x, y) { return Math.atan2(x, y); }\n"
|
||||
"function bin(x) { return '0b' + x.toString(2); }\n"
|
||||
"function ceil(x) { return Math.ceil(x); }\n"
|
||||
"function cos(x) { return Math.cos(x); }\n"
|
||||
"function exp(x) { return Math.exp(x); }\n"
|
||||
"function e() { return Math.E; }\n"
|
||||
"function floor(x) { return Math.floor(x); }\n"
|
||||
"function hex(x) { return '0x' + x.toString(16); }\n"
|
||||
"function log(x) { return Math.log(x); }\n"
|
||||
"function max(x, y) { return Math.max(x, y); }\n"
|
||||
"function min(x, y) { return Math.min(x, y); }\n"
|
||||
"function oct(x) { return '0' + x.toString(8); }\n"
|
||||
"function pi() { return Math.PI; }\n"
|
||||
"function pow(x, y) { return Math.pow(x, y); }\n"
|
||||
"function random() { return Math.random(); }\n"
|
||||
"function round(x) { return Math.round(x); }\n"
|
||||
"function sin(x) { return Math.sin(x); }\n"
|
||||
"function sqrt(x) { return Math.sqrt(x); }\n"
|
||||
"function tan(x) { return Math.tan(x); }\n");
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Core
|
58
src/plugins/coreplugin/locator/javascriptfilter.h
Normal file
58
src/plugins/coreplugin/locator/javascriptfilter.h
Normal file
@@ -0,0 +1,58 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2018 Andre Hartmann <aha_1980@gmx.de>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <coreplugin/locator/ilocatorfilter.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QJSEngine;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace Core {
|
||||
namespace Internal {
|
||||
|
||||
class JavaScriptFilter : public Core::ILocatorFilter
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
JavaScriptFilter();
|
||||
~JavaScriptFilter();
|
||||
|
||||
virtual void prepareSearch(const QString &entry) override;
|
||||
QList<Core::LocatorFilterEntry> matchesFor(QFutureInterface<Core::LocatorFilterEntry> &future,
|
||||
const QString &entry) override;
|
||||
void accept(Core::LocatorFilterEntry selection, QString *newText,
|
||||
int *selectionStart, int *selectionLength) const override;
|
||||
void refresh(QFutureInterface<void> &future) override;
|
||||
|
||||
private:
|
||||
void setupEngine();
|
||||
|
||||
QJSEngine *m_engine = nullptr;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
} // namespace Core
|
@@ -27,6 +27,7 @@
|
||||
|
||||
#include "externaltoolsfilter.h"
|
||||
#include "filesystemfilter.h"
|
||||
#include "javascriptfilter.h"
|
||||
#include "locatorconstants.h"
|
||||
#include "locatorfiltersfilter.h"
|
||||
#include "locatormanager.h"
|
||||
@@ -75,11 +76,13 @@ Locator::Locator()
|
||||
|
||||
Locator::~Locator()
|
||||
{
|
||||
m_corePlugin->removeObject(m_javaScriptFilter);
|
||||
m_corePlugin->removeObject(m_openDocumentsFilter);
|
||||
m_corePlugin->removeObject(m_fileSystemFilter);
|
||||
m_corePlugin->removeObject(m_executeFilter);
|
||||
m_corePlugin->removeObject(m_settingsPage);
|
||||
m_corePlugin->removeObject(m_externalToolsFilter);
|
||||
delete m_javaScriptFilter;
|
||||
delete m_openDocumentsFilter;
|
||||
delete m_fileSystemFilter;
|
||||
delete m_executeFilter;
|
||||
@@ -119,6 +122,9 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
|
||||
|
||||
new LocatorManager(this);
|
||||
|
||||
m_javaScriptFilter = new JavaScriptFilter;
|
||||
m_corePlugin->addObject(m_javaScriptFilter);
|
||||
|
||||
m_openDocumentsFilter = new OpenDocumentsFilter;
|
||||
m_corePlugin->addObject(m_openDocumentsFilter);
|
||||
|
||||
|
@@ -42,6 +42,7 @@ namespace Internal {
|
||||
class CorePlugin;
|
||||
class OpenDocumentsFilter;
|
||||
class FileSystemFilter;
|
||||
class JavaScriptFilter;
|
||||
class LocatorSettingsPage;
|
||||
class ExternalToolsFilter;
|
||||
|
||||
@@ -85,6 +86,7 @@ private:
|
||||
QList<ILocatorFilter *> m_customFilters;
|
||||
QMap<Id, QAction *> m_filterActionMap;
|
||||
QTimer m_refreshTimer;
|
||||
JavaScriptFilter *m_javaScriptFilter = nullptr;
|
||||
OpenDocumentsFilter *m_openDocumentsFilter = nullptr;
|
||||
FileSystemFilter *m_fileSystemFilter = nullptr;
|
||||
ExecuteFilter *m_executeFilter = nullptr;
|
||||
|
@@ -1,3 +1,5 @@
|
||||
QT *= qml
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/locator.h \
|
||||
$$PWD/commandlocator.h \
|
||||
@@ -13,7 +15,8 @@ HEADERS += \
|
||||
$$PWD/executefilter.h \
|
||||
$$PWD/locatorsearchutils.h \
|
||||
$$PWD/locatorsettingspage.h \
|
||||
$$PWD/externaltoolsfilter.h
|
||||
$$PWD/externaltoolsfilter.h \
|
||||
$$PWD/javascriptfilter.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/locator.cpp \
|
||||
@@ -29,7 +32,8 @@ SOURCES += \
|
||||
$$PWD/executefilter.cpp \
|
||||
$$PWD/locatorsearchutils.cpp \
|
||||
$$PWD/locatorsettingspage.cpp \
|
||||
$$PWD/externaltoolsfilter.cpp
|
||||
$$PWD/externaltoolsfilter.cpp \
|
||||
$$PWD/javascriptfilter.cpp
|
||||
|
||||
FORMS += \
|
||||
$$PWD/filesystemfilter.ui \
|
||||
|
Reference in New Issue
Block a user