mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-10-28 17:56:37 +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