File indexing completed on 2025-04-27 03:58:33
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2009-07-16 0007 * Description : metadata selector. 0008 * 0009 * SPDX-FileCopyrightText: 2009-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_SELECTOR_H 0016 #define DIGIKAM_META_DATA_SELECTOR_H 0017 0018 // Qt includes 0019 0020 #include <QTreeWidgetItem> 0021 #include <QTreeWidget> 0022 #include <QStringList> 0023 0024 // Local includes 0025 0026 #include "digikam_export.h" 0027 #include "searchtextbar.h" 0028 #include "dmetadata.h" 0029 0030 namespace Digikam 0031 { 0032 0033 class MdKeyListViewItem; 0034 class MetadataSelectorView; 0035 0036 class DIGIKAM_EXPORT MetadataSelectorItem : public QTreeWidgetItem 0037 { 0038 public: 0039 0040 MetadataSelectorItem(MdKeyListViewItem* const parent, 0041 const QString& key, 0042 const QString& title, 0043 const QString& desc); 0044 ~MetadataSelectorItem() override; 0045 0046 QString key() const; 0047 QString mdKeyTitle() const; 0048 0049 private: 0050 0051 QString m_key; 0052 MdKeyListViewItem* m_parent; 0053 0054 private: 0055 0056 Q_DISABLE_COPY(MetadataSelectorItem) 0057 }; 0058 0059 // ------------------------------------------------------------------------------------ 0060 0061 class DIGIKAM_EXPORT MetadataSelector : public QTreeWidget 0062 { 0063 Q_OBJECT 0064 0065 public: 0066 0067 explicit MetadataSelector(MetadataSelectorView* const parent); 0068 ~MetadataSelector() override; 0069 0070 void setTagsMap(const DMetadata::TagsMap& map); 0071 0072 void setcheckedTagsList(const QStringList& list); 0073 QStringList checkedTagsList(); 0074 0075 void clearSelection(); 0076 void selectAll() override; 0077 0078 private: 0079 0080 MetadataSelectorView* m_parent; 0081 }; 0082 0083 // ------------------------------------------------------------------------------------ 0084 0085 class DIGIKAM_EXPORT MetadataSelectorView : public QWidget 0086 { 0087 Q_OBJECT 0088 0089 public: 0090 0091 enum ControlElement 0092 { 0093 SelectAllBtn = 0x01, 0094 ClearBtn = 0x02, 0095 DefaultBtn = 0x04, 0096 SearchBar = 0x08 0097 }; 0098 Q_DECLARE_FLAGS(ControlElements, ControlElement) 0099 0100 enum Backend 0101 { 0102 Exiv2Backend = 0, 0103 ExifToolBackend 0104 }; 0105 0106 public: 0107 0108 explicit MetadataSelectorView(QWidget* const parent, Backend be); 0109 ~MetadataSelectorView() override; 0110 0111 int itemsCount() const; 0112 0113 void setTagsMap(const DMetadata::TagsMap& map); 0114 0115 void setcheckedTagsList(const QStringList& list); 0116 0117 void setDefaultFilter(const QStringList& list); 0118 QStringList defaultFilter() const; 0119 0120 QStringList checkedTagsList() const; 0121 0122 Backend backend() const; 0123 0124 void setControlElements(ControlElements controllerMask); 0125 0126 void clearSelection(); 0127 void selectAll(); 0128 void selectDefault(); 0129 0130 private Q_SLOTS: 0131 0132 void slotSearchTextChanged(const SearchTextSettings&); 0133 void slotDeflautSelection(); 0134 void slotSelectAll(); 0135 void slotClearSelection(); 0136 0137 private: 0138 0139 void cleanUpMdKeyItem(); 0140 0141 private: 0142 0143 // Disable. 0144 MetadataSelectorView() = delete; 0145 0146 private: 0147 0148 class Private; 0149 Private* const d; 0150 }; 0151 0152 } // namespace Digikam 0153 0154 Q_DECLARE_OPERATORS_FOR_FLAGS(Digikam::MetadataSelectorView::ControlElements) 0155 0156 #endif // DIGIKAM_META_DATA_SELECTOR_H