File indexing completed on 2024-05-12 15:58:15
0001 /* 0002 * SPDX-FileCopyrightText: 2005 Cyrille Berger <cberger@cberger.net> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 * 0006 * This program is distributed in the hope that it will be useful, 0007 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0008 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 0009 * GNU General Public License for more details. 0010 * 0011 * You should have received a copy of the GNU General Public License 0012 * along with this program; if not, write to the Free Software 0013 * Foundation, Inc., 51 Franklin Street, Fifth Floor, 0014 * Boston, MA 02110-1301, USA. 0015 */ 0016 #ifndef KIS_EXIF_INFO_VISITOR_H 0017 #define KIS_EXIF_INFO_VISITOR_H 0018 0019 #include <kis_node_visitor.h> 0020 #include <kis_meta_data_store.h> 0021 #include <kis_meta_data_filter_registry_model.h> 0022 #include <kis_paint_layer.h> 0023 #include <kis_group_layer.h> 0024 0025 /** 0026 * @brief The KisExifInfoVisitor class looks for a layer with metadata. 0027 * 0028 * If there is more than one layer with metadata, the metadata provided 0029 * by the visitor is the metadata associated with the last layer that 0030 * had metadata on it. Only use the metadata if only one layer with 0031 * metadata was found. 0032 * 0033 * The metadata pointer is OWNED by the layer. 0034 * 0035 */ 0036 class KisExifInfoVisitor : public KisNodeVisitor 0037 { 0038 public: 0039 0040 KisExifInfoVisitor() { } 0041 0042 bool visit(KisNode*) override { 0043 return true; 0044 } 0045 bool visit(KisCloneLayer*) override { 0046 return true; 0047 } 0048 bool visit(KisFilterMask*) override { 0049 return true; 0050 } 0051 bool visit(KisTransformMask*) override { 0052 return true; 0053 } 0054 bool visit(KisTransparencyMask*) override { 0055 return true; 0056 } 0057 bool visit(KisSelectionMask*) override { 0058 return true; 0059 } 0060 bool visit(KisColorizeMask*) override { 0061 return true; 0062 } 0063 bool visit(KisExternalLayer*) override { 0064 return true; 0065 } 0066 bool visit(KisGeneratorLayer*) override { 0067 return true; 0068 } 0069 bool visit(KisAdjustmentLayer*) override { 0070 return true; 0071 } 0072 0073 bool visit(KisPaintLayer* layer) override { 0074 if (!layer->metaData()->empty()) { 0075 m_metaDataObjectsEncountered++; 0076 m_exifInfo = layer->metaData(); 0077 } 0078 return true; 0079 } 0080 0081 bool visit(KisGroupLayer* layer) override { 0082 dbgMetaData << "Visiting on grouplayer" << layer->name() << ""; 0083 return visitAll(layer, true); 0084 } 0085 0086 public: 0087 inline uint metaDataCount() 0088 { 0089 dbgImage << "number of layers with metadata" << m_metaDataObjectsEncountered; 0090 return m_metaDataObjectsEncountered; 0091 } 0092 0093 inline KisMetaData::Store* exifInfo() 0094 { 0095 return m_exifInfo; 0096 } 0097 private: 0098 KisMetaData::Store *m_exifInfo {0}; 0099 int m_metaDataObjectsEncountered {0}; 0100 }; 0101 0102 #endif