2014-10-13 10:24:29 +02:00
|
|
|
/****************************************************************************
|
|
|
|
|
**
|
2016-01-15 14:58:39 +01:00
|
|
|
** Copyright (C) 2016 The Qt Company Ltd.
|
|
|
|
|
** Contact: https://www.qt.io/licensing/
|
2014-10-13 10:24:29 +02:00
|
|
|
**
|
|
|
|
|
** 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
|
2016-01-15 14:58:39 +01:00
|
|
|
** 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.
|
2014-10-13 10:24:29 +02:00
|
|
|
**
|
2016-01-15 14:58:39 +01:00
|
|
|
** 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.
|
2014-10-13 10:24:29 +02:00
|
|
|
**
|
|
|
|
|
****************************************************************************/
|
|
|
|
|
|
2016-03-18 07:55:01 +01:00
|
|
|
#pragma once
|
2014-10-13 10:24:29 +02:00
|
|
|
|
2014-11-05 17:35:24 +01:00
|
|
|
#include "utils_global.h"
|
2014-10-13 10:24:29 +02:00
|
|
|
|
|
|
|
|
#include <functional>
|
|
|
|
|
|
2014-10-20 23:13:13 +02:00
|
|
|
#include <QList>
|
|
|
|
|
#include <QVector>
|
|
|
|
|
#include <QCoreApplication>
|
|
|
|
|
|
2014-10-13 10:24:29 +02:00
|
|
|
namespace Utils {
|
|
|
|
|
|
2014-10-13 12:49:05 +02:00
|
|
|
namespace Internal { class MacroExpanderPrivate; }
|
|
|
|
|
|
2019-05-28 13:49:26 +02:00
|
|
|
class FilePath;
|
2014-10-20 23:13:13 +02:00
|
|
|
class MacroExpander;
|
2018-07-23 10:45:40 +02:00
|
|
|
using MacroExpanderProvider = std::function<MacroExpander *()>;
|
|
|
|
|
using MacroExpanderProviders = QVector<MacroExpanderProvider>;
|
2014-10-20 23:13:13 +02:00
|
|
|
|
2014-10-21 13:19:38 +02:00
|
|
|
class QTCREATOR_UTILS_EXPORT MacroExpander
|
2014-10-13 10:24:29 +02:00
|
|
|
{
|
2014-11-05 13:26:34 +01:00
|
|
|
Q_DECLARE_TR_FUNCTIONS(Utils::MacroExpander)
|
2014-11-05 10:36:33 +01:00
|
|
|
Q_DISABLE_COPY(MacroExpander)
|
2014-10-20 23:13:13 +02:00
|
|
|
|
2014-10-13 10:24:29 +02:00
|
|
|
public:
|
2014-10-13 12:49:05 +02:00
|
|
|
explicit MacroExpander();
|
2014-11-05 10:36:33 +01:00
|
|
|
~MacroExpander();
|
2014-10-13 10:24:29 +02:00
|
|
|
|
2014-11-05 10:36:33 +01:00
|
|
|
bool resolveMacro(const QString &name, QString *ret) const;
|
2014-10-13 10:24:29 +02:00
|
|
|
|
2018-05-07 17:33:02 +02:00
|
|
|
QString value(const QByteArray &variable, bool *found = nullptr) const;
|
2014-10-13 12:49:05 +02:00
|
|
|
|
2014-10-21 13:19:38 +02:00
|
|
|
QString expand(const QString &stringWithVariables) const;
|
2019-05-28 13:49:26 +02:00
|
|
|
FilePath expand(const FilePath &fileNameWithVariables) const;
|
2014-10-21 13:19:38 +02:00
|
|
|
QByteArray expand(const QByteArray &stringWithVariables) const;
|
2019-04-16 16:46:36 +02:00
|
|
|
QVariant expandVariant(const QVariant &v) const;
|
2014-10-21 13:19:38 +02:00
|
|
|
|
|
|
|
|
QString expandProcessArgs(const QString &argsWithVariables) const;
|
2014-10-13 12:49:05 +02:00
|
|
|
|
2018-07-23 10:45:40 +02:00
|
|
|
using PrefixFunction = std::function<QString(QString)>;
|
|
|
|
|
using ResolverFunction = std::function<bool(QString, QString *)>;
|
|
|
|
|
using StringFunction = std::function<QString()>;
|
|
|
|
|
using IntFunction = std::function<int()>;
|
2014-10-13 12:49:05 +02:00
|
|
|
|
|
|
|
|
void registerPrefix(const QByteArray &prefix,
|
ProjectExplorer: Clean up variables
Global variables with names such as "CurrentProject*", "CurrentKit*" etc
are harmful, because the term "current project" as used in Qt Creator
does not refer to the "active project", but simply stands for the
project that contains the node that is currently selected in the project
tree, which in turn may or may not correspond to the current editor
document, depending on the "sync with editor" setting. In other words,
the "current project" is almost a random value with little meaning
outside the project tree itself.
Therefore, we remove "CurrentProject*" and friends, except the ones that
are currently intentionally in use. The latter get renamed to
"CurrentDocument:Project*", so their purpose becomes clear. Their old
names are kept around for backward compatibility, but are not suggested
by the variable chooser anymore, so new usages are unlikely and we can
remove them at some point.
We also add some ActiveProject* variants that have been requested in the
past.
Also remove the "CurrentSession" prefix that was deprecated six years
ago.
Fixes: QTCREATORBUG-12724
Fixes: QTCREATORBUG-24606
Change-Id: Ibba5d0e0ce3d2beb444a5eec01fbb9b745d90a1d
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2020-09-28 16:18:44 +02:00
|
|
|
const QString &description, const PrefixFunction &value, bool visible = true);
|
2014-10-13 12:49:05 +02:00
|
|
|
|
|
|
|
|
void registerVariable(const QByteArray &variable,
|
2014-11-05 10:30:51 +01:00
|
|
|
const QString &description, const StringFunction &value,
|
|
|
|
|
bool visibleInChooser = true);
|
2014-10-13 12:49:05 +02:00
|
|
|
|
|
|
|
|
void registerIntVariable(const QByteArray &variable,
|
|
|
|
|
const QString &description, const IntFunction &value);
|
|
|
|
|
|
|
|
|
|
void registerFileVariables(const QByteArray &prefix,
|
2014-11-06 16:51:33 +01:00
|
|
|
const QString &heading, const StringFunction &value,
|
|
|
|
|
bool visibleInChooser = true);
|
2014-10-13 12:49:05 +02:00
|
|
|
|
2014-10-22 16:22:39 +02:00
|
|
|
void registerExtraResolver(const ResolverFunction &value);
|
|
|
|
|
|
2014-11-05 10:30:51 +01:00
|
|
|
QList<QByteArray> visibleVariables() const;
|
2014-10-21 13:19:38 +02:00
|
|
|
QString variableDescription(const QByteArray &variable) const;
|
2015-09-17 13:48:02 +02:00
|
|
|
bool isPrefixVariable(const QByteArray &variable) const;
|
2014-10-13 12:49:05 +02:00
|
|
|
|
2014-11-27 17:45:49 +01:00
|
|
|
MacroExpanderProviders subProviders() const;
|
2014-10-20 23:13:13 +02:00
|
|
|
|
2014-10-13 18:49:44 +02:00
|
|
|
QString displayName() const;
|
|
|
|
|
void setDisplayName(const QString &displayName);
|
|
|
|
|
|
2014-10-20 23:13:13 +02:00
|
|
|
void registerSubProvider(const MacroExpanderProvider &provider);
|
|
|
|
|
|
|
|
|
|
bool isAccumulating() const;
|
|
|
|
|
void setAccumulating(bool on);
|
|
|
|
|
|
2014-10-13 10:24:29 +02:00
|
|
|
private:
|
2014-10-21 13:19:38 +02:00
|
|
|
friend class Internal::MacroExpanderPrivate;
|
2014-10-13 12:49:05 +02:00
|
|
|
Internal::MacroExpanderPrivate *d;
|
2014-10-13 10:24:29 +02:00
|
|
|
};
|
|
|
|
|
|
2014-10-13 18:49:44 +02:00
|
|
|
QTCREATOR_UTILS_EXPORT MacroExpander *globalMacroExpander();
|
|
|
|
|
|
2014-10-13 10:24:29 +02:00
|
|
|
} // namespace Utils
|