forked from qt-creator/qt-creator
CMake: Fix the config model merging data
Old user-settings used to get lost. Change-Id: I5197c3b57b12d94e7464a86261a1364dd9aca266 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -28,6 +28,7 @@
|
|||||||
#include <utils/algorithm.h>
|
#include <utils/algorithm.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
#include <QFont>
|
#include <QFont>
|
||||||
|
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager {
|
||||||
@@ -100,7 +101,7 @@ QVariant ConfigModel::data(const QModelIndex &index, int role) const
|
|||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
return item.key;
|
return item.key;
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
return item.description;
|
return item.toolTip();
|
||||||
case Qt::FontRole: {
|
case Qt::FontRole: {
|
||||||
QFont font;
|
QFont font;
|
||||||
font.setItalic(item.isCMakeChanged);
|
font.setItalic(item.isCMakeChanged);
|
||||||
@@ -127,7 +128,7 @@ QVariant ConfigModel::data(const QModelIndex &index, int role) const
|
|||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
case Qt::ToolTipRole:
|
case Qt::ToolTipRole:
|
||||||
return item.description;
|
return item.toolTip();
|
||||||
default:
|
default:
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
@@ -135,7 +136,7 @@ QVariant ConfigModel::data(const QModelIndex &index, int role) const
|
|||||||
case 2:
|
case 2:
|
||||||
switch (role) {
|
switch (role) {
|
||||||
case Qt::EditRole:
|
case Qt::EditRole:
|
||||||
return QString::fromLatin1("0");
|
return "0";
|
||||||
case Qt::DisplayRole:
|
case Qt::DisplayRole:
|
||||||
return QString::fromLatin1(item.isAdvanced ? "1" : "0");
|
return QString::fromLatin1(item.isAdvanced ? "1" : "0");
|
||||||
case Qt::CheckStateRole:
|
case Qt::CheckStateRole:
|
||||||
@@ -246,12 +247,16 @@ void ConfigModel::setConfiguration(const QList<ConfigModel::DataItem> &config)
|
|||||||
result << InternalDataItem(*newIt);
|
result << InternalDataItem(*newIt);
|
||||||
++newIt;
|
++newIt;
|
||||||
} else if (newIt->key > oldIt->key) {
|
} else if (newIt->key > oldIt->key) {
|
||||||
// skip old entry:
|
// Keep old user settings, but skip other entries:
|
||||||
|
if (oldIt->isUserChanged || oldIt->isUserNew)
|
||||||
|
result << InternalDataItem(*oldIt);
|
||||||
++oldIt;
|
++oldIt;
|
||||||
} else {
|
} else {
|
||||||
// merge old/new entry:
|
// merge old/new entry:
|
||||||
InternalDataItem item(*newIt);
|
InternalDataItem item(*newIt);
|
||||||
|
item.newValue = (newIt->value != oldIt->newValue) ? oldIt->newValue : QString();
|
||||||
item.isCMakeChanged = (oldIt->value != newIt->value);
|
item.isCMakeChanged = (oldIt->value != newIt->value);
|
||||||
|
item.isUserChanged = !item.newValue.isEmpty() && (item.newValue != item.value);
|
||||||
result << item;
|
result << item;
|
||||||
++newIt;
|
++newIt;
|
||||||
++oldIt;
|
++oldIt;
|
||||||
@@ -326,9 +331,16 @@ const ConfigModel::InternalDataItem &ConfigModel::itemAtRow(int row) const
|
|||||||
return m_configuration[row];
|
return m_configuration[row];
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigModel::InternalDataItem::InternalDataItem(const ConfigModel::DataItem &item) : DataItem(item),
|
ConfigModel::InternalDataItem::InternalDataItem(const ConfigModel::DataItem &item) : DataItem(item)
|
||||||
isUserChanged(false), isUserNew(false), isCMakeChanged(false)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
QString ConfigModel::InternalDataItem::toolTip() const
|
||||||
|
{
|
||||||
|
QStringList tooltip(description);
|
||||||
|
if (!value.isEmpty() && !newValue.isEmpty() && value != newValue)
|
||||||
|
tooltip << QCoreApplication::translate("CMakeProjectManager", "Current CMake: %1").arg(value);
|
||||||
|
return tooltip.join("<br>");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace CMakeProjectManager
|
} // namespace CMakeProjectManager
|
||||||
|
|
||||||
|
|||||||
@@ -82,9 +82,11 @@ private:
|
|||||||
InternalDataItem(const DataItem &item);
|
InternalDataItem(const DataItem &item);
|
||||||
InternalDataItem(const InternalDataItem &item) = default;
|
InternalDataItem(const InternalDataItem &item) = default;
|
||||||
|
|
||||||
bool isUserChanged;
|
QString toolTip() const;
|
||||||
bool isUserNew;
|
|
||||||
bool isCMakeChanged;
|
bool isUserChanged = false;
|
||||||
|
bool isUserNew = false;
|
||||||
|
bool isCMakeChanged = false;
|
||||||
QString newValue;
|
QString newValue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user