mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 15:09:39 +00:00
IdTableProxyModel refreshes the filter when the source model data or rows changed
This commit is contained in:
parent
ca67e4ea3a
commit
1041c3babb
3 changed files with 36 additions and 4 deletions
|
@ -50,6 +50,24 @@ QModelIndex CSMWorld::IdTableProxyModel::getModelIndex (const std::string& id, i
|
||||||
return mapFromSource (dynamic_cast<IdTableBase&> (*sourceModel()).getModelIndex (id, column));
|
return mapFromSource (dynamic_cast<IdTableBase&> (*sourceModel()).getModelIndex (id, column));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSMWorld::IdTableProxyModel::setSourceModel(QAbstractItemModel *model)
|
||||||
|
{
|
||||||
|
QSortFilterProxyModel::setSourceModel(model);
|
||||||
|
|
||||||
|
connect(sourceModel(),
|
||||||
|
SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
|
||||||
|
this,
|
||||||
|
SLOT(sourceRowsChanged(const QModelIndex &, int, int)));
|
||||||
|
connect(sourceModel(),
|
||||||
|
SIGNAL(rowsInserted(const QModelIndex &, int, int)),
|
||||||
|
this,
|
||||||
|
SLOT(sourceRowsChanged(const QModelIndex &, int, int)));
|
||||||
|
connect(sourceModel(),
|
||||||
|
SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &)),
|
||||||
|
this,
|
||||||
|
SLOT(sourceDataChanged(const QModelIndex &, const QModelIndex &)));
|
||||||
|
}
|
||||||
|
|
||||||
void CSMWorld::IdTableProxyModel::setFilter (const boost::shared_ptr<CSMFilter::Node>& filter)
|
void CSMWorld::IdTableProxyModel::setFilter (const boost::shared_ptr<CSMFilter::Node>& filter)
|
||||||
{
|
{
|
||||||
beginResetModel();
|
beginResetModel();
|
||||||
|
@ -82,3 +100,13 @@ void CSMWorld::IdTableProxyModel::refreshFilter()
|
||||||
updateColumnMap();
|
updateColumnMap();
|
||||||
invalidateFilter();
|
invalidateFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CSMWorld::IdTableProxyModel::sourceRowsChanged(const QModelIndex &/*parent*/, int /*start*/, int /*end*/)
|
||||||
|
{
|
||||||
|
refreshFilter();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSMWorld::IdTableProxyModel::sourceDataChanged(const QModelIndex &/*topLeft*/, const QModelIndex &/*bottomRight*/)
|
||||||
|
{
|
||||||
|
refreshFilter();
|
||||||
|
}
|
||||||
|
|
|
@ -37,6 +37,8 @@ namespace CSMWorld
|
||||||
|
|
||||||
virtual QModelIndex getModelIndex (const std::string& id, int column) const;
|
virtual QModelIndex getModelIndex (const std::string& id, int column) const;
|
||||||
|
|
||||||
|
virtual void setSourceModel(QAbstractItemModel *model);
|
||||||
|
|
||||||
void setFilter (const boost::shared_ptr<CSMFilter::Node>& filter);
|
void setFilter (const boost::shared_ptr<CSMFilter::Node>& filter);
|
||||||
|
|
||||||
void refreshFilter();
|
void refreshFilter();
|
||||||
|
@ -46,6 +48,12 @@ namespace CSMWorld
|
||||||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
|
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
|
||||||
|
|
||||||
virtual bool filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const;
|
virtual bool filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const;
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
void sourceRowsChanged(const QModelIndex &parent, int start, int end);
|
||||||
|
|
||||||
|
void sourceDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -674,10 +674,6 @@ void CSVWorld::Table::tableSizeUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
emit tableSizeChanged (size, deleted, modified);
|
emit tableSizeChanged (size, deleted, modified);
|
||||||
|
|
||||||
// not really related to tableSizeUpdate() but placed here for convenience rather than
|
|
||||||
// creating a bunch of extra connections & slot
|
|
||||||
mProxyModel->refreshFilter();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSVWorld::Table::selectionSizeUpdate()
|
void CSVWorld::Table::selectionSizeUpdate()
|
||||||
|
|
Loading…
Reference in a new issue