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/optional.h>
|
||||
#include <utils/qtcassert.h>
|
||||
#include <utils/stringutils.h>
|
||||
|
||||
#include <QApplication>
|
||||
#include <QFileInfo>
|
||||
@@ -202,8 +203,7 @@ Kit *Kit::clone(bool keepName) const
|
||||
if (keepName)
|
||||
k->d->m_unexpandedDisplayName = d->m_unexpandedDisplayName;
|
||||
else
|
||||
k->d->m_unexpandedDisplayName = QCoreApplication::translate("ProjectExplorer::Kit", "Clone of %1")
|
||||
.arg(d->m_unexpandedDisplayName);
|
||||
k->d->m_unexpandedDisplayName = newKitName(KitManager::kits());
|
||||
k->d->m_autodetected = false;
|
||||
k->d->m_data = d->m_data;
|
||||
// Do not clone m_fileSystemFriendlyName, needs to be unique
|
||||
@@ -674,6 +674,19 @@ MacroExpander *Kit::macroExpander() const
|
||||
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()
|
||||
{
|
||||
if (d->m_nestedBlockingLevel > 0) {
|
||||
|
@@ -137,6 +137,9 @@ public:
|
||||
bool hasFeatures(const QSet<Core::Id> &features) const;
|
||||
Utils::MacroExpander *macroExpander() const;
|
||||
|
||||
QString newKitName(const QList<Kit *> &allKits) const;
|
||||
static QString newKitName(const QString &name, const QList<Kit *> &allKits);
|
||||
|
||||
private:
|
||||
void setSdkProvided(bool sdkProvided);
|
||||
|
||||
|
@@ -247,6 +247,7 @@ void KitModel::markForRemoval(Kit *k)
|
||||
|
||||
Kit *KitModel::markForAddition(Kit *baseKit)
|
||||
{
|
||||
const QString newName = newKitName(baseKit ? baseKit->unexpandedDisplayName() : QString());
|
||||
KitNode *node = createNode(nullptr);
|
||||
m_manualRoot->appendChild(node);
|
||||
Kit *k = node->widget->workingCopy();
|
||||
@@ -255,10 +256,10 @@ Kit *KitModel::markForAddition(Kit *baseKit)
|
||||
k->copyFrom(baseKit);
|
||||
k->setAutoDetected(false); // Make sure we have a manual kit!
|
||||
k->setSdkProvided(false);
|
||||
k->setUnexpandedDisplayName(tr("Clone of %1").arg(k->unexpandedDisplayName()));
|
||||
} else {
|
||||
k->setup();
|
||||
}
|
||||
k->setUnexpandedDisplayName(newName);
|
||||
|
||||
if (!m_defaultNode)
|
||||
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
|
||||
{
|
||||
return findItemAtLevel<2>([k](KitNode *n) { return n->widget->workingCopy() == k; });
|
||||
|
@@ -71,6 +71,8 @@ public:
|
||||
|
||||
void updateVisibility();
|
||||
|
||||
QString newKitName(const QString &sourceName) const;
|
||||
|
||||
signals:
|
||||
void kitStateChanged();
|
||||
|
||||
|
Reference in New Issue
Block a user