summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2014-09-16 15:58:32 +0200
committerTobias Hunger <tobias.hunger@digia.com>2014-09-18 14:38:08 +0200
commitf5d48bf39e928d643509a3c7653a54019db9bdc5 (patch)
tree2220d762efed31dcc0f7761f1361942fdd4739c9 /src
parente014847cdd51e94aab41c512e9fda3063972a36b (diff)
downloadqt-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.cpp24
-rw-r--r--src/libs/utils/fileutils.h1
-rw-r--r--src/plugins/coreplugin/corejsextensions.cpp121
-rw-r--r--src/plugins/coreplugin/corejsextensions.h74
-rw-r--r--src/plugins/coreplugin/coreplugin.pro6
-rw-r--r--src/plugins/coreplugin/coreplugin.qbs1
-rw-r--r--src/plugins/coreplugin/jsexpander.cpp7
-rw-r--r--src/plugins/projectexplorer/customtoolchain.cpp3
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