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