diff --git a/CHANGELOG.md b/CHANGELOG.md index 37bb8d7b17..4f7e4e095b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ Bug #4480: Segfault in QuickKeysMenu when item no longer in inventory Bug #4489: Goodbye doesn't block dialogue hyperlinks Bug #4490: PositionCell on player gives "Error: tried to add local script twice" + Bug #3249: Fixed revert function not updating views properly Feature #2606: Editor: Implemented (optional) case sensitive global search Feature #3276: Editor: Search- Show number of (remaining) search results and indicate a search without any results Feature #3641: Editor: Limit FPS in 3d preview window diff --git a/apps/opencs/model/world/columnimp.hpp b/apps/opencs/model/world/columnimp.hpp index 4ad447b0a8..cd2a4c79ea 100644 --- a/apps/opencs/model/world/columnimp.hpp +++ b/apps/opencs/model/world/columnimp.hpp @@ -136,7 +136,7 @@ namespace CSMWorld struct VarTypeColumn : public Column { VarTypeColumn (ColumnBase::Display display) - : Column (Columns::ColumnId_ValueType, display) + : Column (Columns::ColumnId_ValueType, display, ColumnBase::Flag_Table | ColumnBase::Flag_Dialogue | ColumnBase::Flag_Dialogue_Refresh) {} virtual QVariant get (const Record& record) const @@ -161,7 +161,7 @@ namespace CSMWorld template struct VarValueColumn : public Column { - VarValueColumn() : Column (Columns::ColumnId_Value, ColumnBase::Display_Var) {} + VarValueColumn() : Column (Columns::ColumnId_Value, ColumnBase::Display_Var, ColumnBase::Flag_Table | ColumnBase::Flag_Dialogue | ColumnBase::Flag_Dialogue_Refresh) {} virtual QVariant get (const Record& record) const { diff --git a/apps/opencs/model/world/idtable.cpp b/apps/opencs/model/world/idtable.cpp index 3e503a80cf..cb48fc85f9 100644 --- a/apps/opencs/model/world/idtable.cpp +++ b/apps/opencs/model/world/idtable.cpp @@ -84,15 +84,28 @@ bool CSMWorld::IdTable::setData (const QModelIndex &index, const QVariant &value if (mIdCollection->getColumn (index.column()).isEditable() && role==Qt::EditRole) { mIdCollection->setData (index.row(), index.column(), value); - emit dataChanged(index, index); - // Modifying a value can also change the Modified status of a record. int stateColumn = searchColumnIndex(Columns::ColumnId_Modification); if (stateColumn != -1) { - QModelIndex stateIndex = this->index(index.row(), stateColumn); - emit dataChanged(stateIndex, stateIndex); - } + if (index.column() == stateColumn) + { + // modifying the state column can modify other values. we need to tell + // views that the whole row has changed. + + emit dataChanged(this->index(index.row(), 0), + this->index(index.row(), columnCount(index.parent()))); + + } else + { + emit dataChanged(index, index); + + // Modifying a value can also change the Modified status of a record. + QModelIndex stateIndex = this->index(index.row(), stateColumn); + emit dataChanged(stateIndex, stateIndex); + } + } else + emit dataChanged(index, index); return true; } diff --git a/apps/opencs/model/world/record.hpp b/apps/opencs/model/world/record.hpp index 0313f2e414..3362f9f963 100644 --- a/apps/opencs/model/world/record.hpp +++ b/apps/opencs/model/world/record.hpp @@ -156,4 +156,4 @@ namespace CSMWorld } } -#endif \ No newline at end of file +#endif