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:
Christian Kandeler
2019-04-30 17:41:21 +02:00
parent 1333b695d4
commit 909dcaeee0
4 changed files with 31 additions and 3 deletions

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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; });

View File

@@ -71,6 +71,8 @@ public:
void updateVisibility(); void updateVisibility();
QString newKitName(const QString &sourceName) const;
signals: signals:
void kitStateChanged(); void kitStateChanged();