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",
|
"filesystemfilter.ui",
|
||||||
"ilocatorfilter.cpp",
|
"ilocatorfilter.cpp",
|
||||||
"ilocatorfilter.h",
|
"ilocatorfilter.h",
|
||||||
|
"javascriptfilter.cpp",
|
||||||
|
"javascriptfilter.h",
|
||||||
"locatorconstants.h",
|
"locatorconstants.h",
|
||||||
"locatorfiltersfilter.cpp",
|
"locatorfiltersfilter.cpp",
|
||||||
"locatorfiltersfilter.h",
|
"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 "externaltoolsfilter.h"
|
||||||
#include "filesystemfilter.h"
|
#include "filesystemfilter.h"
|
||||||
|
#include "javascriptfilter.h"
|
||||||
#include "locatorconstants.h"
|
#include "locatorconstants.h"
|
||||||
#include "locatorfiltersfilter.h"
|
#include "locatorfiltersfilter.h"
|
||||||
#include "locatormanager.h"
|
#include "locatormanager.h"
|
||||||
@@ -75,11 +76,13 @@ Locator::Locator()
|
|||||||
|
|
||||||
Locator::~Locator()
|
Locator::~Locator()
|
||||||
{
|
{
|
||||||
|
m_corePlugin->removeObject(m_javaScriptFilter);
|
||||||
m_corePlugin->removeObject(m_openDocumentsFilter);
|
m_corePlugin->removeObject(m_openDocumentsFilter);
|
||||||
m_corePlugin->removeObject(m_fileSystemFilter);
|
m_corePlugin->removeObject(m_fileSystemFilter);
|
||||||
m_corePlugin->removeObject(m_executeFilter);
|
m_corePlugin->removeObject(m_executeFilter);
|
||||||
m_corePlugin->removeObject(m_settingsPage);
|
m_corePlugin->removeObject(m_settingsPage);
|
||||||
m_corePlugin->removeObject(m_externalToolsFilter);
|
m_corePlugin->removeObject(m_externalToolsFilter);
|
||||||
|
delete m_javaScriptFilter;
|
||||||
delete m_openDocumentsFilter;
|
delete m_openDocumentsFilter;
|
||||||
delete m_fileSystemFilter;
|
delete m_fileSystemFilter;
|
||||||
delete m_executeFilter;
|
delete m_executeFilter;
|
||||||
@@ -119,6 +122,9 @@ void Locator::initialize(CorePlugin *corePlugin, const QStringList &, QString *)
|
|||||||
|
|
||||||
new LocatorManager(this);
|
new LocatorManager(this);
|
||||||
|
|
||||||
|
m_javaScriptFilter = new JavaScriptFilter;
|
||||||
|
m_corePlugin->addObject(m_javaScriptFilter);
|
||||||
|
|
||||||
m_openDocumentsFilter = new OpenDocumentsFilter;
|
m_openDocumentsFilter = new OpenDocumentsFilter;
|
||||||
m_corePlugin->addObject(m_openDocumentsFilter);
|
m_corePlugin->addObject(m_openDocumentsFilter);
|
||||||
|
|
||||||
|
@@ -42,6 +42,7 @@ namespace Internal {
|
|||||||
class CorePlugin;
|
class CorePlugin;
|
||||||
class OpenDocumentsFilter;
|
class OpenDocumentsFilter;
|
||||||
class FileSystemFilter;
|
class FileSystemFilter;
|
||||||
|
class JavaScriptFilter;
|
||||||
class LocatorSettingsPage;
|
class LocatorSettingsPage;
|
||||||
class ExternalToolsFilter;
|
class ExternalToolsFilter;
|
||||||
|
|
||||||
@@ -85,6 +86,7 @@ private:
|
|||||||
QList<ILocatorFilter *> m_customFilters;
|
QList<ILocatorFilter *> m_customFilters;
|
||||||
QMap<Id, QAction *> m_filterActionMap;
|
QMap<Id, QAction *> m_filterActionMap;
|
||||||
QTimer m_refreshTimer;
|
QTimer m_refreshTimer;
|
||||||
|
JavaScriptFilter *m_javaScriptFilter = nullptr;
|
||||||
OpenDocumentsFilter *m_openDocumentsFilter = nullptr;
|
OpenDocumentsFilter *m_openDocumentsFilter = nullptr;
|
||||||
FileSystemFilter *m_fileSystemFilter = nullptr;
|
FileSystemFilter *m_fileSystemFilter = nullptr;
|
||||||
ExecuteFilter *m_executeFilter = nullptr;
|
ExecuteFilter *m_executeFilter = nullptr;
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
QT *= qml
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
$$PWD/locator.h \
|
$$PWD/locator.h \
|
||||||
$$PWD/commandlocator.h \
|
$$PWD/commandlocator.h \
|
||||||
@@ -13,7 +15,8 @@ HEADERS += \
|
|||||||
$$PWD/executefilter.h \
|
$$PWD/executefilter.h \
|
||||||
$$PWD/locatorsearchutils.h \
|
$$PWD/locatorsearchutils.h \
|
||||||
$$PWD/locatorsettingspage.h \
|
$$PWD/locatorsettingspage.h \
|
||||||
$$PWD/externaltoolsfilter.h
|
$$PWD/externaltoolsfilter.h \
|
||||||
|
$$PWD/javascriptfilter.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/locator.cpp \
|
$$PWD/locator.cpp \
|
||||||
@@ -29,7 +32,8 @@ SOURCES += \
|
|||||||
$$PWD/executefilter.cpp \
|
$$PWD/executefilter.cpp \
|
||||||
$$PWD/locatorsearchutils.cpp \
|
$$PWD/locatorsearchutils.cpp \
|
||||||
$$PWD/locatorsettingspage.cpp \
|
$$PWD/locatorsettingspage.cpp \
|
||||||
$$PWD/externaltoolsfilter.cpp
|
$$PWD/externaltoolsfilter.cpp \
|
||||||
|
$$PWD/javascriptfilter.cpp
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
$$PWD/filesystemfilter.ui \
|
$$PWD/filesystemfilter.ui \
|
||||||
|
Reference in New Issue
Block a user