File indexing completed on 2025-04-27 03:58:35
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2006-02-22 0007 * Description : a generic widget to display metadata 0008 * 0009 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0010 * 0011 * SPDX-License-Identifier: GPL-2.0-or-later 0012 * 0013 * ============================================================ */ 0014 0015 #ifndef DIGIKAM_META_DATA_WIDGET_H 0016 #define DIGIKAM_META_DATA_WIDGET_H 0017 0018 // Qt includes 0019 0020 #include <QWidget> 0021 #include <QString> 0022 #include <QUrl> 0023 0024 // Local includes 0025 0026 #include "dmetadata.h" 0027 #include "digikam_export.h" 0028 0029 namespace Digikam 0030 { 0031 0032 class MetadataListView; 0033 0034 class DIGIKAM_EXPORT MetadataWidget : public QWidget 0035 { 0036 Q_OBJECT 0037 0038 public: 0039 0040 enum TagFilters 0041 { 0042 NONE = 0, 0043 PHOTO, 0044 CUSTOM 0045 }; 0046 0047 public: 0048 0049 explicit MetadataWidget(QWidget* const parent, const QString& name = QString()); 0050 ~MetadataWidget() override; 0051 0052 int getMode() const; 0053 void setMode(int mode); 0054 0055 QStringList getTagsFilter() const; 0056 void setTagsFilter(const QStringList& list); 0057 0058 QString getCurrentItemKey() const; 0059 void setCurrentItemByKey(const QString& itemKey); 0060 0061 void setUserAreaWidget(QWidget* const w); 0062 0063 public: 0064 0065 virtual QString getTagTitle(const QString& key); 0066 virtual QString getTagDescription(const QString& key); 0067 0068 virtual bool loadFromData(const QString& fileName, 0069 const DMetadata& data = DMetadata()); 0070 0071 virtual bool loadFromURL(const QUrl& url) = 0; 0072 0073 Q_SIGNALS: 0074 0075 void signalSetupMetadataFilters(); 0076 0077 protected Q_SLOTS: 0078 0079 virtual void slotSaveMetadataToFile() = 0; 0080 0081 protected: 0082 0083 void enabledToolButtons(bool); 0084 void setFileName(const QString& fileName); 0085 MetadataListView* view() const; 0086 0087 bool setMetadata(const DMetadata& data = DMetadata()); 0088 DMetadata* getMetadata() const; 0089 0090 void setMetadataMap(const DMetadata::MetaDataMap& data = DMetadata::MetaDataMap()); 0091 const DMetadata::MetaDataMap& getMetadataMap(); 0092 0093 void setIfdList(const DMetadata::MetaDataMap& ifds, const QStringList& tagsFilter = QStringList()); 0094 void setIfdList(const DMetadata::MetaDataMap& ifds, const QStringList& keysFilter, 0095 const QStringList& tagsFilter); 0096 0097 QUrl saveMetadataToFile(const QString& caption, const QString& fileFilter); 0098 bool storeMetadataToFile(const QUrl& url, const QByteArray& metaData); 0099 0100 /** 0101 * Call this method in children class constructors to init signal/slots connections. 0102 */ 0103 void setup(); 0104 0105 QString metadataToText() const; 0106 0107 protected: 0108 0109 virtual void buildView(); 0110 virtual void setMetadataEmpty(); 0111 0112 virtual bool decodeMetadata() = 0; 0113 virtual QString getMetadataTitle() const = 0; 0114 0115 private Q_SLOTS: 0116 0117 void slotCopy2Clipboard(); 0118 void slotPrintMetadata(); 0119 void slotFilterChanged(QAction*); 0120 0121 private: 0122 0123 class Private; 0124 Private* const d; 0125 }; 0126 0127 } // namespace Digikam 0128 0129 #endif // DIGIKAM_META_DATA_WIDGET_H