CMakePM: Refactor "Initial Parameters" as a tab bar item

Now we have "Initial Configuration" and "Current Configuration"
as tab bar buttons.

This way the UI can be shared between the two configuration states.

Task-number: QTCREATORBUG-26869
Change-Id: I8206032a2a5ac076629865057816edb99706f2ff
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Cristian Adam
2021-12-28 21:42:29 +01:00
parent 6ece15f587
commit a0836a29c7
12 changed files with 457 additions and 122 deletions

View File

@@ -52,6 +52,14 @@ QVariant ConfigModel::data(const QModelIndex &idx, int role) const
}) != nullptr;
return hasNormalChildren ? "0" : "1";
}
if (role == ItemIsInitialRole && item->childCount() > 0) {
const bool hasInitialChildren = item->findAnyChild([](const Utils::TreeItem *ti) {
if (auto cmti = dynamic_cast<const Internal::ConfigModelTreeItem*>(ti))
return cmti->dataItem->isInitial;
return false;
}) != nullptr;
return hasInitialChildren ? "1" : "0";
}
return Utils::TreeModel<>::data(idx, role);
}
@@ -59,7 +67,7 @@ ConfigModel::~ConfigModel() = default;
void ConfigModel::appendConfiguration(const QString &key,
const QString &value,
const ConfigModel::DataItem::Type type,
const ConfigModel::DataItem::Type type, bool isInitial,
const QString &description,
const QStringList &values)
{
@@ -67,6 +75,7 @@ void ConfigModel::appendConfiguration(const QString &key,
item.key = key;
item.type = type;
item.value = value;
item.isInitial = isInitial;
item.description = description;
item.values = values;
@@ -74,7 +83,8 @@ void ConfigModel::appendConfiguration(const QString &key,
internalItem.isUserNew = true;
if (m_kitConfiguration.contains(key))
internalItem.kitValue = m_kitConfiguration.value(key);
internalItem.kitValue = isInitial ? m_kitConfiguration.value(key).first
: m_kitConfiguration.value(key).second;
m_configuration.append(internalItem);
setConfiguration(m_configuration);
@@ -85,13 +95,14 @@ void ConfigModel::setConfiguration(const QList<DataItem> &config)
setConfiguration(Utils::transform(config, [](const DataItem &di) { return InternalDataItem(di); }));
}
void ConfigModel::setConfigurationFromKit(const QHash<QString, QString> &kitConfig)
void ConfigModel::setConfigurationFromKit(const KitConfiguration &kitConfig)
{
m_kitConfiguration = kitConfig;
for (InternalDataItem &i : m_configuration) {
if (m_kitConfiguration.contains(i.key))
i.kitValue = m_kitConfiguration.value(i.key);
i.kitValue = i.isInitial ? m_kitConfiguration.value(i.key).first
: m_kitConfiguration.value(i.key).second;
}
setConfiguration(m_configuration);
}
@@ -101,24 +112,36 @@ void ConfigModel::flush()
setConfiguration(QList<InternalDataItem>());
}
void ConfigModel::resetAllChanges()
void ConfigModel::resetAllChanges(bool initialParameters)
{
const QList<InternalDataItem> tmp
QList<InternalDataItem> notNew
= Utils::filtered(m_configuration,
[](const InternalDataItem &i) { return !i.isUserNew; });
setConfiguration(Utils::transform(tmp, [](const InternalDataItem &i) {
notNew = Utils::transform(notNew, [](const InternalDataItem &i) {
InternalDataItem ni(i);
ni.newValue.clear();
ni.isUserChanged = false;
ni.isUnset = false;
return ni;
});
// add the changes from the other list, which shouldn't get reset
notNew.append(Utils::filtered(m_configuration, [initialParameters](const InternalDataItem &i) {
return !(initialParameters ? i.isInitial : !i.isInitial) && i.isUserNew;
}));
setConfiguration(notNew);
}
bool ConfigModel::hasChanges() const
bool ConfigModel::hasChanges(bool initialParameters) const
{
return Utils::contains(m_configuration, [](const InternalDataItem &i) {
const QList<InternalDataItem> filtered
= Utils::filtered(m_configuration, [initialParameters](const InternalDataItem &i) {
return initialParameters ? i.isInitial : !i.isInitial;
});
return Utils::contains(filtered, [initialParameters](const InternalDataItem &i) {
return i.isUserChanged || i.isUserNew || i.isUnset;
});
}
@@ -177,6 +200,7 @@ ConfigModel::DataItem ConfigModel::dataItemFromIndex(const QModelIndex &idx)
di.type = cmti->dataItem->type;
di.isHidden = cmti->dataItem->isHidden;
di.isAdvanced = cmti->dataItem->isAdvanced;
di.isInitial = cmti->dataItem->isInitial;
di.inCMakeCache = cmti->dataItem->inCMakeCache;
di.value = cmti->dataItem->currentValue();
di.description = cmti->dataItem->description;
@@ -232,6 +256,19 @@ void ConfigModel::setBatchEditConfiguration(const CMakeConfig &config)
generateTree();
}
void ConfigModel::setInitialParametersConfiguration(const CMakeConfig &config)
{
for (const auto &c: config) {
DataItem di(c);
InternalDataItem i(di);
i.inCMakeCache = true;
i.isInitial = true;
i.newValue = di.value;
m_configuration.append(i);
}
generateTree();
}
void ConfigModel::setConfiguration(const QList<ConfigModel::InternalDataItem> &config)
{
QList<InternalDataItem> tmp = config;
@@ -331,8 +368,14 @@ QVariant ConfigModelTreeItem::data(int column, int role) const
}
// Leaf node:
if (role == ConfigModel::ItemIsAdvancedRole)
if (role == ConfigModel::ItemIsAdvancedRole) {
if (dataItem->isInitial)
return "2";
return dataItem->isAdvanced ? "1" : "0";
}
if (role == ConfigModel::ItemIsInitialRole) {
return dataItem->isInitial ? "1" : "0";
}
switch (column) {
case 0: