File indexing completed on 2024-05-12 15:58:13

0001 /*
0002  *  SPDX-FileCopyrightText: 2007 Boudewijn Rempt <boud@valdyas.org>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #ifndef KIS_COUNT_VISITOR
0007 #define KIS_COUNT_VISITOR
0008 
0009 #include "kritaimage_export.h"
0010 
0011 #include <KoProperties.h>
0012 
0013 #include "kis_node_visitor.h"
0014 
0015 #include "kis_node.h"
0016 #include "kis_paint_layer.h"
0017 #include "kis_group_layer.h"
0018 #include "kis_adjustment_layer.h"
0019 #include "kis_external_layer_iface.h"
0020 #include "kis_clone_layer.h"
0021 #include "kis_filter_mask.h"
0022 #include "kis_transform_mask.h"
0023 #include "kis_transparency_mask.h"
0024 #include "kis_selection_mask.h"
0025 #include "lazybrush/kis_colorize_mask.h"
0026 #include "generator/kis_generator_layer.h"
0027 /**
0028  * The count visitor traverses the node stack for nodes that conform
0029  * to certain properties. You can set the types of nodes to count and
0030  * add a list of properties to check. The children of nodes that are
0031  * not counted will be checked and counted if they conform to the
0032  * requirements.
0033  */
0034 class KRITAIMAGE_EXPORT KisCountVisitor : public KisNodeVisitor
0035 {
0036 public:
0037 
0038     using KisNodeVisitor::visit;
0039 
0040     KisCountVisitor(const QStringList & nodeTypes, const KoProperties & properties)
0041         : m_nodeTypes(nodeTypes)
0042         , m_properties(properties)
0043         , m_count(0) {
0044     }
0045 
0046     quint32 count() {
0047         return m_count;
0048     }
0049 
0050     bool visit(KisNode* node) override {
0051         return check(node);
0052     }
0053 
0054     bool visit(KisPaintLayer *layer) override {
0055         return check(layer);
0056     }
0057 
0058     bool visit(KisGroupLayer *layer) override {
0059         return check(layer);
0060     }
0061 
0062 
0063     bool visit(KisAdjustmentLayer *layer) override {
0064         return check(layer);
0065     }
0066 
0067 
0068     bool visit(KisExternalLayer *layer) override {
0069         return check(layer);
0070     }
0071 
0072 
0073     bool visit(KisCloneLayer *layer) override {
0074         return check(layer);
0075     }
0076 
0077 
0078     bool visit(KisFilterMask *mask) override {
0079         return check(mask);
0080     }
0081 
0082     bool visit(KisTransformMask *mask) override {
0083         return check(mask);
0084     }
0085 
0086     bool visit(KisTransparencyMask *mask) override {
0087         return check(mask);
0088     }
0089 
0090 
0091     bool visit(KisGeneratorLayer * layer) override {
0092         return check(layer);
0093     }
0094 
0095     bool visit(KisSelectionMask* mask) override {
0096         return check(mask);
0097     }
0098 
0099     bool visit(KisColorizeMask* mask) override {
0100         return check(mask);
0101     }
0102 
0103 private:
0104 
0105     bool inList(KisNode* node);
0106     bool check(KisNode * node);
0107 
0108     const QStringList m_nodeTypes;
0109     const KoProperties m_properties;
0110     quint32 m_count;
0111 };
0112 #endif