/ filters / anyoffilter.cpp
anyoffilter.cpp
 1  #include "anyoffilter.h"
 2  
 3  namespace qqsfpm {
 4  
 5  /*!
 6      \qmltype AnyOf
 7      \inherits Filter
 8      \inqmlmodule SortFilterProxyModel
 9      \ingroup Filters
10      \ingroup FilterContainer
11      \brief Filter container accepting rows accepted by at least one of its child filters.
12  
13      The AnyOf type is a \l Filter container that accepts rows if any of its contained (and enabled) filters accept them.
14  
15      In the following example, only the rows where the \c firstName role or the \c lastName role match the text entered in the \c nameTextField will be accepted :
16      \code
17      TextField {
18        id: nameTextField
19      }
20  
21      SortFilterProxyModel {
22        sourceModel: contactModel
23        filters: AnyOf {
24            RegExpFilter {
25                roleName: "lastName"
26                pattern: nameTextField.text
27                caseSensitivity: Qt.CaseInsensitive
28            }
29            RegExpFilter {
30                roleName: "firstName"
31                pattern: nameTextField.text
32                caseSensitivity: Qt.CaseInsensitive
33            }
34        }
35      }
36      \endcode
37      \sa FilterContainer
38  */
39  bool AnyOfFilter::filterRow(const QModelIndex& sourceIndex, const QQmlSortFilterProxyModel& proxyModel) const
40  {
41      //return true if any of the enabled filters return true
42      return std::any_of(m_filters.begin(), m_filters.end(),
43          [&sourceIndex, &proxyModel] (Filter* filter) {
44              return filter->enabled() && filter->filterAcceptsRow(sourceIndex, proxyModel);
45          }
46      );
47  }
48  
49  }