Restore JsonWizard expander functionality

Task-number: QTCREATORBUG-13229
Change-Id: I91fd996cdbf5f3e71bdf817e9c5beebbb007681b
Reviewed-by: Tobias Hunger <tobias.hunger@theqtcompany.com>
This commit is contained in:
hjk
2014-10-22 16:22:39 +02:00
committed by Tobias Hunger
parent acf79d7fc6
commit cd53defc5d
9 changed files with 33 additions and 142 deletions

View File

@@ -63,6 +63,13 @@ public:
return expander && expander->resolveMacro(name, ret); return expander && expander->resolveMacro(name, ret);
}); });
if (found)
return true;
found = Utils::anyOf(m_extraResolvers, [name, ret] (const MacroExpander::ResolverFunction &resolver) {
return resolver(name, ret);
});
if (found) if (found)
return true; return true;
@@ -94,6 +101,7 @@ public:
QHash<QByteArray, MacroExpander::StringFunction> m_map; QHash<QByteArray, MacroExpander::StringFunction> m_map;
QHash<QByteArray, MacroExpander::PrefixFunction> m_prefixMap; QHash<QByteArray, MacroExpander::PrefixFunction> m_prefixMap;
QVector<MacroExpander::ResolverFunction> m_extraResolvers;
QMap<QByteArray, QString> m_descriptions; QMap<QByteArray, QString> m_descriptions;
QString m_displayName; QString m_displayName;
QVector<MacroExpanderProvider> m_subProviders; QVector<MacroExpanderProvider> m_subProviders;
@@ -343,6 +351,11 @@ void MacroExpander::registerFileVariables(const QByteArray &prefix,
[base]() -> QString { QString tmp = base(); return tmp.isEmpty() ? QString() : QFileInfo(tmp).baseName(); }); [base]() -> QString { QString tmp = base(); return tmp.isEmpty() ? QString() : QFileInfo(tmp).baseName(); });
} }
void MacroExpander::registerExtraResolver(const MacroExpander::ResolverFunction &value)
{
d->m_extraResolvers.append(value);
}
/*! /*!
* Returns all registered variable names. * Returns all registered variable names.
* *

View File

@@ -57,7 +57,7 @@ public:
virtual bool resolveMacro(const QString &name, QString *ret) const; virtual bool resolveMacro(const QString &name, QString *ret) const;
QString value(const QByteArray &variable, bool *found = 0) const; virtual QString value(const QByteArray &variable, bool *found = 0) const;
QString expand(const QString &stringWithVariables) const; QString expand(const QString &stringWithVariables) const;
QByteArray expand(const QByteArray &stringWithVariables) const; QByteArray expand(const QByteArray &stringWithVariables) const;
@@ -65,6 +65,7 @@ public:
QString expandProcessArgs(const QString &argsWithVariables) const; QString expandProcessArgs(const QString &argsWithVariables) const;
typedef std::function<QString(QString)> PrefixFunction; typedef std::function<QString(QString)> PrefixFunction;
typedef std::function<bool(QString, QString *)> ResolverFunction;
typedef std::function<QString()> StringFunction; typedef std::function<QString()> StringFunction;
typedef std::function<int()> IntFunction; typedef std::function<int()> IntFunction;
@@ -80,6 +81,8 @@ public:
void registerFileVariables(const QByteArray &prefix, void registerFileVariables(const QByteArray &prefix,
const QString &heading, const StringFunction &value); const QString &heading, const StringFunction &value);
void registerExtraResolver(const ResolverFunction &value);
QList<QByteArray> variables() const; QList<QByteArray> variables() const;
QString variableDescription(const QByteArray &variable) const; QString variableDescription(const QByteArray &variable) const;

View File

@@ -31,7 +31,6 @@
#include "jsonfieldpage.h" #include "jsonfieldpage.h"
#include "jsonwizard.h" #include "jsonwizard.h"
#include "jsonwizardexpander.h"
#include "jsonwizardfactory.h" #include "jsonwizardfactory.h"
#include <utils/algorithm.h> #include <utils/algorithm.h>

View File

@@ -30,7 +30,6 @@
#include "jsonwizard.h" #include "jsonwizard.h"
#include "jsonwizardexpander.h"
#include "jsonwizardgeneratorfactory.h" #include "jsonwizardgeneratorfactory.h"
#include <utils/algorithm.h> #include <utils/algorithm.h>
@@ -43,14 +42,19 @@
namespace ProjectExplorer { namespace ProjectExplorer {
JsonWizard::JsonWizard(QWidget *parent) : JsonWizard::JsonWizard(QWidget *parent) :
Utils::Wizard(parent), Utils::Wizard(parent)
m_expander(new Internal::JsonWizardExpander(this)) {
{ } m_expander.registerExtraResolver([this](const QString &name, QString *ret) -> bool {
QVariant v = value(name);
if (v.isValid())
*ret = v.toString();
return v.isValid();
});
}
JsonWizard::~JsonWizard() JsonWizard::~JsonWizard()
{ {
qDeleteAll(m_generators); qDeleteAll(m_generators);
delete m_expander;
} }
void JsonWizard::addGenerator(JsonWizardGenerator *gen) void JsonWizard::addGenerator(JsonWizardGenerator *gen)
@@ -61,9 +65,9 @@ void JsonWizard::addGenerator(JsonWizardGenerator *gen)
m_generators.append(gen); m_generators.append(gen);
} }
Utils::MacroExpander *JsonWizard::expander() const Utils::MacroExpander *JsonWizard::expander()
{ {
return m_expander; return &m_expander;
} }
void JsonWizard::resetFileList() void JsonWizard::resetFileList()
@@ -85,7 +89,7 @@ JsonWizard::GeneratorFiles JsonWizard::fileList()
if (m_files.isEmpty()) { if (m_files.isEmpty()) {
emit preGenerateFiles(); emit preGenerateFiles();
foreach (JsonWizardGenerator *gen, m_generators) { foreach (JsonWizardGenerator *gen, m_generators) {
Core::GeneratedFiles tmp = gen->fileList(m_expander, value(QStringLiteral("WizardDir")).toString(), Core::GeneratedFiles tmp = gen->fileList(&m_expander, value(QStringLiteral("WizardDir")).toString(),
targetPath, &errorMessage); targetPath, &errorMessage);
if (!errorMessage.isEmpty()) if (!errorMessage.isEmpty())
break; break;
@@ -114,7 +118,7 @@ QVariant JsonWizard::value(const QString &n) const
QVariant v = property(n.toUtf8()); QVariant v = property(n.toUtf8());
if (v.isValid()) { if (v.isValid()) {
if (v.type() == QVariant::String) if (v.type() == QVariant::String)
return m_expander->expand(v.toString()); return m_expander.expand(v.toString());
else else
return v; return v;
} }

View File

@@ -36,13 +36,10 @@
#include <coreplugin/generatedfile.h> #include <coreplugin/generatedfile.h>
#include <utils/wizard.h> #include <utils/wizard.h>
#include <utils/macroexpander.h>
namespace Utils { class MacroExpander; }
namespace ProjectExplorer { namespace ProjectExplorer {
namespace Internal { class JsonWizardExpander; }
class JsonWizardGenerator; class JsonWizardGenerator;
// Documentation inside. // Documentation inside.
@@ -71,7 +68,7 @@ public:
void addGenerator(JsonWizardGenerator *gen); void addGenerator(JsonWizardGenerator *gen);
Utils::MacroExpander *expander() const; Utils::MacroExpander *expander();
void resetFileList(); void resetFileList();
GeneratorFiles fileList(); GeneratorFiles fileList();
@@ -100,7 +97,7 @@ private:
QList<JsonWizardGenerator *> m_generators; QList<JsonWizardGenerator *> m_generators;
GeneratorFiles m_files; GeneratorFiles m_files;
Internal::JsonWizardExpander *m_expander; Utils::MacroExpander m_expander;
}; };
} // namespace ProjectExplorer } // namespace ProjectExplorer

View File

@@ -2,7 +2,6 @@ HEADERS += $$PWD/jsonfieldpage.h \
$$PWD/jsonfilepage.h \ $$PWD/jsonfilepage.h \
$$PWD/jsonsummarypage.h \ $$PWD/jsonsummarypage.h \
$$PWD/jsonwizard.h \ $$PWD/jsonwizard.h \
$$PWD/jsonwizardexpander.h \
$$PWD/jsonwizardfactory.h \ $$PWD/jsonwizardfactory.h \
$$PWD/jsonwizardfilegenerator.h \ $$PWD/jsonwizardfilegenerator.h \
$$PWD/jsonwizardgeneratorfactory.h \ $$PWD/jsonwizardgeneratorfactory.h \
@@ -13,7 +12,6 @@ SOURCES += $$PWD/jsonfieldpage.cpp \
$$PWD/jsonfilepage.cpp \ $$PWD/jsonfilepage.cpp \
$$PWD/jsonsummarypage.cpp \ $$PWD/jsonsummarypage.cpp \
$$PWD/jsonwizard.cpp \ $$PWD/jsonwizard.cpp \
$$PWD/jsonwizardexpander.cpp \
$$PWD/jsonwizardfactory.cpp \ $$PWD/jsonwizardfactory.cpp \
$$PWD/jsonwizardfilegenerator.cpp \ $$PWD/jsonwizardfilegenerator.cpp \
$$PWD/jsonwizardgeneratorfactory.cpp \ $$PWD/jsonwizardgeneratorfactory.cpp \

View File

@@ -1,65 +0,0 @@
/****************************************************************************
**
** 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://www.qt.io/licensing. For further information
** use the contact form at http://www.qt.io/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 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** 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 "jsonwizardexpander.h"
#include "jsonwizard.h"
#include <utils/macroexpander.h>
#include <utils/qtcassert.h>
#include <QVariant>
namespace ProjectExplorer {
namespace Internal {
// --------------------------------------------------------------------
// JsonWizardExpander:
// --------------------------------------------------------------------
JsonWizardExpander::JsonWizardExpander(JsonWizard *wizard) :
m_wizard(wizard)
{
QTC_CHECK(m_wizard);
}
bool JsonWizardExpander::resolveMacro(const QString &name, QString *ret) const
{
QVariant v = m_wizard->value(name);
if (v.isValid()) {
*ret = v.toString();
return true;
}
return Utils::globalMacroExpander()->resolveMacro(name, ret);
}
} // namespace Internal
} // namespace ProjectExplorer

View File

@@ -1,57 +0,0 @@
/****************************************************************************
**
** 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://www.qt.io/licensing. For further information
** use the contact form at http://www.qt.io/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 or version 3 as published by the Free
** Software Foundation and appearing in the file LICENSE.LGPLv21 and
** LICENSE.LGPLv3 included in the packaging of this file. Please review the
** following information to ensure the GNU Lesser General Public License
** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
** 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 JSONWIZARDEXPANDER_H
#define JSONWIZARDEXPANDER_H
#include <utils/macroexpander.h>
namespace ProjectExplorer {
class JsonWizard;
namespace Internal {
// Documentation inside.
class JsonWizardExpander : public Utils::MacroExpander
{
public:
explicit JsonWizardExpander(JsonWizard *wizard);
bool resolveMacro(const QString &name, QString *ret) const;
public:
JsonWizard *m_wizard;
};
} // namespace Internal
} // namespace ProjectExplorer
#endif // JSONWIZARDEXPANDER_H

View File

@@ -174,7 +174,6 @@ QtcPlugin {
"jsonfilepage.cpp", "jsonfilepage.h", "jsonfilepage.cpp", "jsonfilepage.h",
"jsonsummarypage.cpp", "jsonsummarypage.h", "jsonsummarypage.cpp", "jsonsummarypage.h",
"jsonwizard.cpp", "jsonwizard.h", "jsonwizard.cpp", "jsonwizard.h",
"jsonwizardexpander.cpp", "jsonwizardexpander.h",
"jsonwizardfactory.cpp", "jsonwizardfactory.h", "jsonwizardfactory.cpp", "jsonwizardfactory.h",
"jsonwizardfilegenerator.cpp", "jsonwizardfilegenerator.h", "jsonwizardfilegenerator.cpp", "jsonwizardfilegenerator.h",
"jsonwizardgeneratorfactory.cpp", "jsonwizardgeneratorfactory.h", "jsonwizardgeneratorfactory.cpp", "jsonwizardgeneratorfactory.h",