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