diff options
| author | Tobias Hunger <tobias.hunger@digia.com> | 2014-09-16 15:58:32 +0200 |
|---|---|---|
| committer | Tobias Hunger <tobias.hunger@digia.com> | 2014-09-18 14:38:08 +0200 |
| commit | f5d48bf39e928d643509a3c7653a54019db9bdc5 (patch) | |
| tree | 2220d762efed31dcc0f7761f1361942fdd4739c9 /src | |
| parent | e014847cdd51e94aab41c512e9fda3063972a36b (diff) | |
| download | qt-creator-f5d48bf39e928d643509a3c7653a54019db9bdc5.tar.gz | |
Core: Add a basic extension for the JsExpander
This adds a "Utils" object to the Js runtime offered by the
JsExpander that adds some useful functions.
Mostly file name mangling and finding preferred extension
from the MIME type database.
Change-Id: I907dae7f295167667ac2ae81461bbff16dc98ef4
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Diffstat (limited to 'src')
| -rw-r--r-- | src/libs/utils/fileutils.cpp | 24 | ||||
| -rw-r--r-- | src/libs/utils/fileutils.h | 1 | ||||
| -rw-r--r-- | src/plugins/coreplugin/corejsextensions.cpp | 121 | ||||
| -rw-r--r-- | src/plugins/coreplugin/corejsextensions.h | 74 | ||||
| -rw-r--r-- | src/plugins/coreplugin/coreplugin.pro | 6 | ||||
| -rw-r--r-- | src/plugins/coreplugin/coreplugin.qbs | 1 | ||||
| -rw-r--r-- | src/plugins/coreplugin/jsexpander.cpp | 7 | ||||
| -rw-r--r-- | src/plugins/projectexplorer/customtoolchain.cpp | 3 |
8 files changed, 232 insertions, 5 deletions
diff --git a/src/libs/utils/fileutils.cpp b/src/libs/utils/fileutils.cpp index 31ab9fd653..3579dc56ec 100644 --- a/src/libs/utils/fileutils.cpp +++ b/src/libs/utils/fileutils.cpp @@ -566,13 +566,33 @@ FileName FileName::parentDir() const return FileName::fromString(parent); } -/// Constructs a FileName from \a fileName -/// \a fileName is not checked for validity. +/// Constructs a FileName from \a filename +/// \a filename is not checked for validity. FileName FileName::fromString(const QString &filename) { return FileName(filename); } +/// Constructs a FileName from \a fileName. The \a defaultExtension is appended +/// to \a filename if that does not have an extension already. +/// \a fileName is not checked for validity. +FileName FileName::fromString(const QString &filename, const QString &defaultExtension) +{ + if (filename.isEmpty() || defaultExtension.isEmpty()) + return filename; + + QString rc = filename; + QFileInfo fi(filename); + // Add extension unless user specified something else + const QChar dot = QLatin1Char('.'); + if (!fi.fileName().contains(dot)) { + if (!defaultExtension.startsWith(dot)) + rc += dot; + rc += defaultExtension; + } + return rc; +} + /// Constructs a FileName from \a fileName /// \a fileName is not checked for validity. FileName FileName::fromLatin1(const QByteArray &filename) diff --git a/src/libs/utils/fileutils.h b/src/libs/utils/fileutils.h index 9215603cf3..53f61790b3 100644 --- a/src/libs/utils/fileutils.h +++ b/src/libs/utils/fileutils.h @@ -66,6 +66,7 @@ public: explicit FileName(const QFileInfo &info); QFileInfo toFileInfo() const; static FileName fromString(const QString &filename); + static FileName fromString(const QString &filename, const QString &defaultExtension); static FileName fromLatin1(const QByteArray &filename); static FileName fromUserInput(const QString &filename); QString toString() const; diff --git a/src/plugins/coreplugin/corejsextensions.cpp b/src/plugins/coreplugin/corejsextensions.cpp new file mode 100644 index 0000000000..f48eee57e0 --- /dev/null +++ b/src/plugins/coreplugin/corejsextensions.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#include "corejsextensions.h" + +#include "mimedatabase.h" + +#include <utils/fileutils.h> +#include <utils/qtcassert.h> + +#include <QDir> +#include <QTemporaryFile> +#include <QVariant> + +namespace Core { +namespace Internal { + +QString UtilsJsExtension::toNativeSeparators(const QString &in) const +{ + return QDir::toNativeSeparators(in); +} + +QString UtilsJsExtension::fromNativeSeparators(const QString &in) const +{ + return QDir::fromNativeSeparators(in); +} + +QString UtilsJsExtension::baseName(const QString &in) const +{ + QFileInfo fi(in); + return fi.baseName(); +} + +QString UtilsJsExtension::completeBaseName(const QString &in) const +{ + QFileInfo fi(in); + return fi.completeBaseName(); +} + +QString UtilsJsExtension::suffix(const QString &in) const +{ + QFileInfo fi(in); + return fi.suffix(); +} + +QString UtilsJsExtension::completeSuffix(const QString &in) const +{ + QFileInfo fi(in); + return fi.completeSuffix(); +} + +QString UtilsJsExtension::path(const QString &in) const +{ + QFileInfo fi(in); + return fi.path(); +} + +QString UtilsJsExtension::absoluteFilePath(const QString &in) const +{ + QFileInfo fi(in); + return fi.absoluteFilePath(); +} + +QString UtilsJsExtension::preferredSuffix(const QString &mimetype) const +{ + return Core::MimeDatabase::preferredSuffixByType(mimetype); +} + +QString UtilsJsExtension::fileName(const QString &path, const QString &extension) const +{ + return Utils::FileName::fromString(path, extension).toString(); +} + +QString UtilsJsExtension::mktemp(const QString &pattern) const +{ + QString tmp = pattern; + if (tmp.isEmpty()) + tmp = QStringLiteral("qt_temp.XXXXXX"); + QFileInfo fi(tmp); + if (!fi.isAbsolute()) { + QString tempPattern = QDir::tempPath(); + if (!tempPattern.endsWith(QLatin1Char('/'))) + tempPattern += QLatin1Char('/'); + tmp = tempPattern + tmp; + } + + QTemporaryFile file(tmp); + file.setAutoRemove(false); + QTC_ASSERT(file.open(), return QString()); + file.close(); + return file.fileName(); +} + +} // namespace Internal +} // namespace Core diff --git a/src/plugins/coreplugin/corejsextensions.h b/src/plugins/coreplugin/corejsextensions.h new file mode 100644 index 0000000000..f07e7a1ff4 --- /dev/null +++ b/src/plugins/coreplugin/corejsextensions.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** 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 Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +#ifndef COREJSEXTENSIONS_H +#define COREJSEXTENSIONS_H + +#include <utils/stringutils.h> + +#include <QScriptEngine> +#include <QSet> + +namespace Core { + +namespace Internal { + +class UtilsJsExtension : public QObject +{ + Q_OBJECT + +public: + UtilsJsExtension(QObject *parent = 0) : QObject(parent) { } + + // File name conversions: + Q_INVOKABLE QString toNativeSeparators(const QString &in) const; + Q_INVOKABLE QString fromNativeSeparators(const QString &in) const; + + Q_INVOKABLE QString baseName(const QString &in) const; + Q_INVOKABLE QString completeBaseName(const QString &in) const; + Q_INVOKABLE QString suffix(const QString &in) const; + Q_INVOKABLE QString completeSuffix(const QString &in) const; + Q_INVOKABLE QString path(const QString &in) const; + Q_INVOKABLE QString absoluteFilePath(const QString &in) const; + + // MimeDB: + Q_INVOKABLE QString preferredSuffix(const QString &mimetype) const; + + // Generate filename: + Q_INVOKABLE QString fileName(const QString &path, + const QString &extension) const; + + // Generate temporary file: + Q_INVOKABLE QString mktemp(const QString &pattern) const; +}; + +} // namespace Internal +} // namespace Core + +#endif // COREJSEXTENSIONS_H diff --git a/src/plugins/coreplugin/coreplugin.pro b/src/plugins/coreplugin/coreplugin.pro index 662bc50534..d1ebd95c2f 100644 --- a/src/plugins/coreplugin/coreplugin.pro +++ b/src/plugins/coreplugin/coreplugin.pro @@ -8,7 +8,8 @@ QT += help \ include(../../qtcreatorplugin.pri) include(../../shared/scriptwrapper/scriptwrapper.pri) win32-msvc*:QMAKE_CXXFLAGS += -wd4251 -wd4290 -wd4250 -SOURCES += mainwindow.cpp \ +SOURCES += corejsextensions.cpp \ + mainwindow.cpp \ editmode.cpp \ iwizardfactory.cpp \ tabpositionindicator.cpp \ @@ -102,7 +103,8 @@ SOURCES += mainwindow.cpp \ patchtool.cpp \ windowsupport.cpp -HEADERS += mainwindow.h \ +HEADERS += corejsextensions.h \ + mainwindow.h \ editmode.h \ iwizardfactory.h \ tabpositionindicator.h \ diff --git a/src/plugins/coreplugin/coreplugin.qbs b/src/plugins/coreplugin/coreplugin.qbs index d3c019bb26..9234b9f8ae 100644 --- a/src/plugins/coreplugin/coreplugin.qbs +++ b/src/plugins/coreplugin/coreplugin.qbs @@ -39,6 +39,7 @@ QtcPlugin { "core.qrc", "core_global.h", "coreconstants.h", + "corejsextensions.cpp", "corejsextensions.h", "coreplugin.cpp", "coreplugin.h", "designmode.cpp", "designmode.h", "documentmanager.cpp", "documentmanager.h", diff --git a/src/plugins/coreplugin/jsexpander.cpp b/src/plugins/coreplugin/jsexpander.cpp index 458c1696a1..4645f93d25 100644 --- a/src/plugins/coreplugin/jsexpander.cpp +++ b/src/plugins/coreplugin/jsexpander.cpp @@ -29,6 +29,7 @@ #include "jsexpander.h" +#include "corejsextensions.h" #include "variablemanager.h" #include <utils/qtcassert.h> @@ -43,7 +44,11 @@ namespace Internal { class JsExpanderPrivate { public: + JsExpanderPrivate() : m_utilsExtension(new UtilsJsExtension) { } + ~JsExpanderPrivate() { delete m_utilsExtension; } + QScriptEngine m_engine; + UtilsJsExtension *m_utilsExtension; }; } // namespace Internal @@ -98,6 +103,8 @@ JsExpander::JsExpander() return result; } }); + + registerQObjectForJs(QLatin1String("Util"), d->m_utilsExtension); } JsExpander::~JsExpander() diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp index 265b465539..e9b4561828 100644 --- a/src/plugins/projectexplorer/customtoolchain.cpp +++ b/src/plugins/projectexplorer/customtoolchain.cpp @@ -270,7 +270,8 @@ const QStringList &CustomToolChain::cxx11Flags() const void CustomToolChain::setMkspecs(const QString &specs) { - m_mkspecs = Utils::transform(specs.split(QLatin1Char(',')), &FileName::fromString); + m_mkspecs = Utils::transform(specs.split(QLatin1Char(',')), + [](QString fn) { return Utils::FileName::fromString(fn); }); } QString CustomToolChain::mkspecs() const |
