14#include <AUI/Model/IListModel.h>
15#include <AUI/Model/IMutableListModel.h>
16#include <AUI/Common/AVector.h>
18template<
typename T,
typename Filter>
26 for (
size_t i = 0; i < mOther->listSize(); ++i) {
27 if (mFilter(mOther->listItemAt(i))) {
28 mMapping.push_back(i);
35 explicit AListModelFilter(
const _<
IListModel<T>>& other, Filter&& adapter) :
37 mFilter(std::forward<Filter>(adapter)) {
41 AUI_ASSERTX(0,
"unimplemented");
44 AUI_ASSERTX(0,
"unimplemented");
47 AUI_ASSERTX(0,
"unimplemented");
52 ~AListModelFilter()
override =
default;
54 size_t listSize()
override {
55 return mMapping.size();
59 return mOther->listItemAt(mMapping[index.getRow()]);
66 size_t prevSize = mMapping.size();
70 size_t currentSize = mMapping.size();
71 if (currentSize == prevSize) {
73 }
else if (currentSize > prevSize) {
88 auto ranges = this->rangesIncluding([&](
size_t i) {
89 return !mFilter(listItemAt(i));
93 mMapping.erase(mMapping.begin() + r.getBegin().getRow() - offset, mMapping.begin() + r.getEnd().getRow()) - offset;
94 offset += r.getEnd().getRow() - r.getBegin().getRow();
100 template <
typename Container,
typename Filter>
101 auto filter(
const _<Container>& other, Filter&& filter) -> _<AListModelFilter<typename Container::value_type, Filter>> {
102 return aui::ptr::manage(
new AListModelFilter<typename Container::value_type, Filter>(other, std::forward<Filter>(filter)));
void invalidate()
Definition AListModelFilter.h:65
void lazyInvalidate()
Performs filtering for currently unfiltered elements.
Definition AListModelFilter.h:87
Definition AListModelIndex.h:20
Definition AListModelRange.h:23
A std::vector with AUI extensions.
Definition AVector.h:39
Definition IListModel.h:23
emits< AListModelRange< T > > dataInserted
Model data was added.
Definition IListModel.h:88
emits< AListModelRange< T > > dataChanged
Model data was changed.
Definition IListModel.h:83
emits< AListModelRange< T > > dataRemoved
Model data about to remove.
Definition IListModel.h:93
An std::weak_ptr with AUI extensions.
Definition SharedPtrTypes.h:179
static decltype(auto) connect(const Signal &signal, Object *object, Function &&function)
Connects signal to the slot of the specified object.
Definition AObject.h:86
#define emit
emits the specified signal in context of this object.
Definition AObject.h:343
static _< T > manage(T *raw)
Delegates memory management of the raw pointer T* raw to the shared pointer, which is returned.
Definition SharedPtrTypes.h:424