diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp index 411ea5436..f0f6dd513 100644 --- a/app/settings/viewsdialog/viewsmodel.cpp +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -316,6 +316,9 @@ bool Views::setData(const QModelIndex &index, const QVariant &value, int role) QVector roles; roles << role; + roles << ISCHANGEDROLE; + roles << HASCHANGEDVIEWROLE; + if (role != Qt::DisplayRole) { roles << Qt::DisplayRole; } @@ -413,6 +416,10 @@ QVariant Views::data(const QModelIndex &index, int role) const return QVariant{}; } + bool isNewView = !o_viewsTable.containsId(m_viewsTable[row].id); + QString origviewid = !isNewView ? m_viewsTable[row].id : ""; + + if (role == IDROLE) { return (m_viewsTable[row].state() == Data::View::IsCreated ? m_viewsTable[row].id : "#"); } else if (role == ISACTIVEROLE) { @@ -436,9 +443,10 @@ QVariant Views::data(const QModelIndex &index, int role) const } else if (column == ALIGNMENTCOLUMN) { return isVertical(m_viewsTable[row].edge) ? s_verticalAlignments : s_horizontalAlignments; } + } else if (role == HASCHANGEDVIEWROLE) { + return (isNewView || (m_viewsTable[row] != o_viewsTable[origviewid])); } - if (role == Qt::TextAlignmentRole && column != NAMECOLUMN){ return static_cast(Qt::AlignHCenter | Qt::AlignVCenter); } @@ -449,11 +457,15 @@ QVariant Views::data(const QModelIndex &index, int role) const return (m_viewsTable[row].state() == Data::View::IsCreated ? m_viewsTable[row].id : "#"); } else if (role == Qt::UserRole) { return m_viewsTable[row].id; + } else if (role == ISCHANGEDROLE) { + return (isNewView || (m_viewsTable[row].id != o_viewsTable[origviewid].id)); } break; case NAMECOLUMN: if (role == Qt::DisplayRole || role == Qt::UserRole || role == Qt::EditRole){ return m_viewsTable[row].name; + } else if (role == ISCHANGEDROLE) { + return (isNewView || (m_viewsTable[row].name != o_viewsTable[origviewid].name)); } break; case SCREENCOLUMN: @@ -470,6 +482,10 @@ QVariant Views::data(const QModelIndex &index, int role) const } } else if (role == Qt::UserRole) { return m_viewsTable[row].onPrimary ? QString::number(Data::Screen::ONPRIMARYID) : QString::number(m_viewsTable[row].screen); + } else if (role == ISCHANGEDROLE) { + return (isNewView + || (m_viewsTable[row].onPrimary != o_viewsTable[origviewid].onPrimary) + || (!m_viewsTable[row].onPrimary && m_viewsTable[row].screen != o_viewsTable[origviewid].screen)); } break; case EDGECOLUMN: @@ -487,6 +503,8 @@ QVariant Views::data(const QModelIndex &index, int role) const return QString("Unknown"); } else if (role == Qt::UserRole) { return QString::number(m_viewsTable[row].edge); + } else if (role == ISCHANGEDROLE) { + return (isNewView || (m_viewsTable[row].edge != o_viewsTable[origviewid].edge)); } break; case ALIGNMENTCOLUMN: @@ -508,6 +526,8 @@ QVariant Views::data(const QModelIndex &index, int role) const return QString("Unknown"); } else if (role == Qt::UserRole) { return QString::number(m_viewsTable[row].alignment); + } else if (role == ISCHANGEDROLE) { + return (isNewView || (m_viewsTable[row].alignment != o_viewsTable[origviewid].alignment)); } break; case SUBCONTAINMENTSCOLUMN: @@ -531,6 +551,8 @@ QVariant Views::data(const QModelIndex &index, int role) const } return QString(); + } else if (role == ISCHANGEDROLE) { + return (isNewView || (m_viewsTable[row].subcontainments != o_viewsTable[origviewid].subcontainments)); } }; diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h index ee5091469..12024a4c0 100644 --- a/app/settings/viewsdialog/viewsmodel.h +++ b/app/settings/viewsdialog/viewsmodel.h @@ -57,6 +57,8 @@ public: IDROLE = Qt::UserRole + 1, NAMEROLE, ISACTIVEROLE, + ISCHANGEDROLE, + HASCHANGEDVIEWROLE, CHOICESROLE, SORTINGROLE };