10#include <boost/optional.hpp>
41 : QSortFilterProxyModel(parent),
53 m_d->modelConnections.clear();
57 m_d->nodeModel = model;
58 setSourceModel(model);
67 return QSortFilterProxyModel::setData(index,
value, role);
72 if (!srcIndex.isValid())
return false;
80 Q_UNUSED(directParentTextFilterMatch);
84 ( nodeColorMatch && nodeTextFilterMatch )) {
90 const int numChildren = srcIndex.model()->rowCount(srcIndex);
91 for (
int i = 0; i < numChildren; i++) {
106 const QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
107 if (!index.isValid())
return false;
112 (
m_d->acceptedColorLabels.isEmpty() && !
m_d->activeTextFilter) ||
113 m_d->checkIndexAllowedRecursively(index);
120 QModelIndex srcIndex = mapToSource(index);
121 return m_d->nodeModel->nodeFromIndex(srcIndex);
128 QModelIndex srcIndex =
m_d->nodeModel->indexFromNode(node);
129 return mapFromSource(srcIndex);
140 m_d->activeTextFilter = !text.isEmpty() ? boost::make_optional(text) : boost::none;
151 m_d->pendingActiveNode = node;
152 m_d->activeNodeCompressor.start();
157 m_d->activeNode =
m_d->pendingActiveNode;
167 m_d->isUpdatingFilter =
true;
169 m_d->isUpdatingFilter =
false;
174 for (
int row = start; row <= end; row++) {
175 const QModelIndex sourceIndex = sourceModel()->index(row, 0, parent);
176 const QModelIndex mappedIndex = mapFromSource(sourceIndex);
178 if (mappedIndex.isValid()) {
186 m_d->nodeModel->setDummiesFacade(0, 0, 0, 0, 0);
187 m_d->pendingActiveNode = 0;
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void setAcceptedLabels(const QSet< int > &value)
void setNodeModel(KisNodeModel *model)
KisNodeFilterProxyModel(QObject *parent)
QModelIndex indexFromNode(KisNodeSP node) const
void setTextFilter(const QString &text)
const QScopedPointer< Private > m_d
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
~KisNodeFilterProxyModel() override
void unsetDummiesFacade()
void setActiveNode(KisNodeSP node)
void slotUpdateCurrentNodeFilter()
void sigBeforeBeginRemoveRows(const QModelIndex &parent, int start, int end)
bool setData(const QModelIndex &index, const QVariant &value, int role) override
void slotBeforeBeginRemoveRows(const QModelIndex &parent, int start, int end)
KisNodeSP nodeFromIndex(const QModelIndex &index) const
@ ActiveRole
Whether the section is the active one.
KisNodeSP nodeFromIndex(const QModelIndex &index) const
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
#define KIS_ASSERT_RECOVER(cond)
int colorLabelIndex() const
KisSignalAutoConnectionsStore modelConnections
QSet< int > acceptedColorLabels
KisSignalCompressor activeNodeCompressor
KisNodeSP pendingActiveNode
bool checkIndexAllowedRecursively(QModelIndex srcIndex)
boost::optional< QString > activeTextFilter