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