File: propertyfilter.cpp

package info (click to toggle)
gammaray 3.1.0%2Bds-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 24,796 kB
  • sloc: cpp: 109,174; ansic: 2,156; sh: 336; python: 274; yacc: 90; lex: 82; xml: 61; makefile: 28; javascript: 9; ruby: 5
file content (73 lines) | stat: -rw-r--r-- 2,190 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
  propertyfilter.cpp

  This file is part of GammaRay, the Qt application inspection and manipulation tool.

  SPDX-FileCopyrightText: 2015 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
  Author: Anton Kreuzkamp <anton.kreukamp@kdab.com>

  SPDX-License-Identifier: GPL-2.0-or-later

  Contact KDAB at <info@kdab.com> for commercial licensing options.
*/

#include "propertyfilter.h"
#include <QVector>

using namespace GammaRay;

Q_GLOBAL_STATIC(QVector<PropertyFilter>, s_propertyFilters)

GammaRay::PropertyFilter::PropertyFilter(
    const QString &className,
    const QString &name,
    const QString &typeName,
    PropertyData::AccessFlags accessFlags,
    PropertyModel::PropertyFlags propertyFlags)
    : m_name(name)
    , m_typeName(typeName)
    , m_className(className)
    , m_accessFlags(accessFlags)
    , m_propertyFlags(propertyFlags)
{
}

GammaRay::PropertyFilter GammaRay::PropertyFilter::classAndPropertyName(const QString &className,
                                                                        const QString &propertyName)
{
    return PropertyFilter(className, propertyName);
}

bool GammaRay::PropertyFilter::matches(const GammaRay::PropertyData &prop) const
{
    if (!m_className.isEmpty() && prop.className() != m_className) {
        return false;
    }
    if (!m_name.isEmpty() && prop.name() != m_name) {
        return false;
    }
    if (!m_typeName.isEmpty() && prop.typeName() != m_typeName) {
        return false;
    }
    if (m_accessFlags && (prop.accessFlags() & m_accessFlags) == m_accessFlags) {
        return false;
    }
    if (m_propertyFlags && (prop.propertyFlags() & m_propertyFlags) == m_propertyFlags) {
        return false;
    }
    return true;
}

bool GammaRay::PropertyFilters::matches(const GammaRay::PropertyData &prop)
{
    return std::any_of(s_propertyFilters()->begin(),
                       s_propertyFilters()->end(),
                       [&prop](const PropertyFilter &filter) {
                           return filter.matches(prop);
                       });
}

void PropertyFilters::registerFilter(const PropertyFilter &filter)
{
    s_propertyFilters()->push_back(filter);
}