From c7e97a83e195891c758fd8175f80986d9b4f42a5 Mon Sep 17 00:00:00 2001 From: Marc Zinnschlag Date: Sun, 18 Aug 2013 17:28:04 +0200 Subject: [PATCH] automatically build column map on filter change --- apps/opencs/model/world/idtableproxymodel.cpp | 22 ++++++++++++++++--- apps/opencs/model/world/idtableproxymodel.hpp | 5 +++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/apps/opencs/model/world/idtableproxymodel.cpp b/apps/opencs/model/world/idtableproxymodel.cpp index e2c862270..4bb440ce7 100644 --- a/apps/opencs/model/world/idtableproxymodel.cpp +++ b/apps/opencs/model/world/idtableproxymodel.cpp @@ -1,11 +1,26 @@ #include "idtableproxymodel.hpp" -#include #include #include "idtable.hpp" +void CSMWorld::IdTableProxyModel::updateColumnMap() +{ + mColumnMap.clear(); + + if (mFilter) + { + std::vector columns = mFilter->getReferencedColumns(); + + const IdTable& table = dynamic_cast (*sourceModel()); + + for (std::vector::const_iterator iter (columns.begin()); iter!=columns.end(); ++iter) + mColumnMap.insert (std::make_pair (*iter, + table.searchColumnIndex (static_cast (*iter)))); + } +} + bool CSMWorld::IdTableProxyModel::filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const { @@ -13,9 +28,9 @@ bool CSMWorld::IdTableProxyModel::filterAcceptsRow (int sourceRow, const QModelI return true; std::map otherFilters; /// \todo get other filters; - std::map columns; /// \todo get columns - return mFilter->test (dynamic_cast (*sourceModel()), sourceRow, otherFilters, columns, mUserValue); + return mFilter->test ( + dynamic_cast (*sourceModel()), sourceRow, otherFilters, mColumnMap, mUserValue); } CSMWorld::IdTableProxyModel::IdTableProxyModel (QObject *parent) @@ -32,5 +47,6 @@ void CSMWorld::IdTableProxyModel::setFilter (const boost::shared_ptr +#include + #include #include "../filter/node.hpp" @@ -17,9 +19,12 @@ namespace CSMWorld boost::shared_ptr mFilter; std::string mUserValue; + std::map mColumnMap; // column ID, column index in this model (or -1) private: + void updateColumnMap(); + bool filterAcceptsRow (int sourceRow, const QModelIndex& sourceParent) const; public: