forked from qt-creator/qt-creator
ProjectExplorer: Try harder to give new kits a unique name
Fixes: QTCREATORBUG-16203 Change-Id: Id79b5f2e84359b1ad96b95393cc7fb60a965e63e Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -38,6 +38,7 @@
|
|||||||
#include <utils/macroexpander.h>
|
#include <utils/macroexpander.h>
|
||||||
#include <utils/optional.h>
|
#include <utils/optional.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
#include <utils/stringutils.h>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
@@ -202,8 +203,7 @@ Kit *Kit::clone(bool keepName) const
|
|||||||
if (keepName)
|
if (keepName)
|
||||||
k->d->m_unexpandedDisplayName = d->m_unexpandedDisplayName;
|
k->d->m_unexpandedDisplayName = d->m_unexpandedDisplayName;
|
||||||
else
|
else
|
||||||
k->d->m_unexpandedDisplayName = QCoreApplication::translate("ProjectExplorer::Kit", "Clone of %1")
|
k->d->m_unexpandedDisplayName = newKitName(KitManager::kits());
|
||||||
.arg(d->m_unexpandedDisplayName);
|
|
||||||
k->d->m_autodetected = false;
|
k->d->m_autodetected = false;
|
||||||
k->d->m_data = d->m_data;
|
k->d->m_data = d->m_data;
|
||||||
// Do not clone m_fileSystemFriendlyName, needs to be unique
|
// Do not clone m_fileSystemFriendlyName, needs to be unique
|
||||||
@@ -674,6 +674,19 @@ MacroExpander *Kit::macroExpander() const
|
|||||||
return &d->m_macroExpander;
|
return &d->m_macroExpander;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString Kit::newKitName(const QList<Kit *> &allKits) const
|
||||||
|
{
|
||||||
|
return newKitName(unexpandedDisplayName(), allKits);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString Kit::newKitName(const QString &name, const QList<Kit *> &allKits)
|
||||||
|
{
|
||||||
|
const QString baseName = name.isEmpty()
|
||||||
|
? QCoreApplication::translate("ProjectExplorer::Kit", "Unnamed")
|
||||||
|
: QCoreApplication::translate("ProjectExplorer::Kit", "Clone of %1").arg(name);
|
||||||
|
return Utils::makeUniquelyNumbered(baseName, transform(allKits, &Kit::unexpandedDisplayName));
|
||||||
|
}
|
||||||
|
|
||||||
void Kit::kitUpdated()
|
void Kit::kitUpdated()
|
||||||
{
|
{
|
||||||
if (d->m_nestedBlockingLevel > 0) {
|
if (d->m_nestedBlockingLevel > 0) {
|
||||||
|
@@ -137,6 +137,9 @@ public:
|
|||||||
bool hasFeatures(const QSet<Core::Id> &features) const;
|
bool hasFeatures(const QSet<Core::Id> &features) const;
|
||||||
Utils::MacroExpander *macroExpander() const;
|
Utils::MacroExpander *macroExpander() const;
|
||||||
|
|
||||||
|
QString newKitName(const QList<Kit *> &allKits) const;
|
||||||
|
static QString newKitName(const QString &name, const QList<Kit *> &allKits);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setSdkProvided(bool sdkProvided);
|
void setSdkProvided(bool sdkProvided);
|
||||||
|
|
||||||
|
@@ -247,6 +247,7 @@ void KitModel::markForRemoval(Kit *k)
|
|||||||
|
|
||||||
Kit *KitModel::markForAddition(Kit *baseKit)
|
Kit *KitModel::markForAddition(Kit *baseKit)
|
||||||
{
|
{
|
||||||
|
const QString newName = newKitName(baseKit ? baseKit->unexpandedDisplayName() : QString());
|
||||||
KitNode *node = createNode(nullptr);
|
KitNode *node = createNode(nullptr);
|
||||||
m_manualRoot->appendChild(node);
|
m_manualRoot->appendChild(node);
|
||||||
Kit *k = node->widget->workingCopy();
|
Kit *k = node->widget->workingCopy();
|
||||||
@@ -255,10 +256,10 @@ Kit *KitModel::markForAddition(Kit *baseKit)
|
|||||||
k->copyFrom(baseKit);
|
k->copyFrom(baseKit);
|
||||||
k->setAutoDetected(false); // Make sure we have a manual kit!
|
k->setAutoDetected(false); // Make sure we have a manual kit!
|
||||||
k->setSdkProvided(false);
|
k->setSdkProvided(false);
|
||||||
k->setUnexpandedDisplayName(tr("Clone of %1").arg(k->unexpandedDisplayName()));
|
|
||||||
} else {
|
} else {
|
||||||
k->setup();
|
k->setup();
|
||||||
}
|
}
|
||||||
|
k->setUnexpandedDisplayName(newName);
|
||||||
|
|
||||||
if (!m_defaultNode)
|
if (!m_defaultNode)
|
||||||
setDefaultNode(node);
|
setDefaultNode(node);
|
||||||
@@ -273,6 +274,15 @@ void KitModel::updateVisibility()
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString KitModel::newKitName(const QString &sourceName) const
|
||||||
|
{
|
||||||
|
QList<Kit *> allKits;
|
||||||
|
forItemsAtLevel<2>([&allKits](const TreeItem *ti) {
|
||||||
|
allKits << static_cast<const KitNode *>(ti)->widget->workingCopy();
|
||||||
|
});
|
||||||
|
return Kit::newKitName(sourceName, allKits);
|
||||||
|
}
|
||||||
|
|
||||||
KitNode *KitModel::findWorkingCopy(Kit *k) const
|
KitNode *KitModel::findWorkingCopy(Kit *k) const
|
||||||
{
|
{
|
||||||
return findItemAtLevel<2>([k](KitNode *n) { return n->widget->workingCopy() == k; });
|
return findItemAtLevel<2>([k](KitNode *n) { return n->widget->workingCopy() == k; });
|
||||||
|
@@ -71,6 +71,8 @@ public:
|
|||||||
|
|
||||||
void updateVisibility();
|
void updateVisibility();
|
||||||
|
|
||||||
|
QString newKitName(const QString &sourceName) const;
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void kitStateChanged();
|
void kitStateChanged();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user