File indexing completed on 2025-04-27 03:57:26

0001 /* ============================================================
0002  *
0003  * This file is a part of digiKam project
0004  * https://www.digikam.org
0005  *
0006  * Date        : 2003-03-09
0007  * Description : Captions, Tags, and Rating properties editor
0008  *
0009  * SPDX-FileCopyrightText: 2003-2005 by Renchi Raju <renchi dot raju at gmail dot com>
0010  * SPDX-FileCopyrightText: 2003-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
0011  * SPDX-FileCopyrightText: 2006-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
0012  *
0013  * SPDX-License-Identifier: GPL-2.0-or-later
0014  *
0015  * ============================================================ */
0016 
0017 #ifndef DIGIKAM_ITEM_DESC_EDIT_TAB_H
0018 #define DIGIKAM_ITEM_DESC_EDIT_TAB_H
0019 
0020 // Qt includes
0021 
0022 #include <QScrollArea>
0023 #include <QPixmap>
0024 #include <QEvent>
0025 
0026 // Local includes
0027 
0028 #include "dlayoutbox.h"
0029 #include "digikam_export.h"
0030 #include "iteminfolist.h"
0031 #include "albummanager.h"
0032 #include "searchtextbar.h"
0033 #include "disjointmetadata.h"
0034 
0035 class KConfigGroup;
0036 
0037 namespace Digikam
0038 {
0039 
0040 class ItemInfo;
0041 class TaggingAction;
0042 class DisjointMetadata;
0043 class AddTagsLineEdit;
0044 
0045 class ItemDescEditTab : public DVBox
0046 {
0047     Q_OBJECT
0048 
0049 public:
0050 
0051     enum DescEditTab
0052     {
0053         DESCRIPTIONS = 0,
0054         TAGS,
0055         INFOS
0056     };
0057 
0058 public:
0059 
0060     explicit ItemDescEditTab(QWidget* const parent);
0061     ~ItemDescEditTab()                      override;
0062 
0063     void setItem(const ItemInfo& info = ItemInfo());
0064     void setItems(const ItemInfoList& infos);
0065 
0066     void readSettings(KConfigGroup& group);
0067     void writeSettings(KConfigGroup& group);
0068 
0069     bool isModified() const;
0070 
0071     void setCurrentTab(int);
0072     int  currentTab() const;
0073 
0074 Q_SIGNALS:
0075 
0076     void signalProgressMessageChanged(const QString& actionDescription);
0077     void signalProgressValueChanged(float percent);
0078     void signalProgressFinished();
0079 
0080     void signalPrevItem();
0081     void signalNextItem();
0082 
0083     void signalAskToApplyChanges(const QList<ItemInfo>& infos, DisjointMetadata* hub);
0084 
0085 protected:
0086 
0087     bool eventFilter(QObject* o, QEvent* e) override;
0088 
0089 private Q_SLOTS:
0090 
0091     void slotApplyAllChanges();
0092     void slotApplyChangesToAllVersions();
0093     void slotRevertAllChanges();
0094     void slotChangingItems();
0095     void slotModified();
0096     void slotReloadForMetadataChange();
0097 
0098     void slotImagesChanged(int albumId);
0099 
0100     void slotMoreMenu();
0101     void slotReadFromFileMetadataToDatabase();
0102     void slotWriteToFileMetadataFromDatabase();
0103 
0104     void slotAskToApplyChanges(const QList<ItemInfo>& infos, DisjointMetadata* hub);
0105 
0106     ///@{
0107     /// Description view methods (itemdescedittab_descview.cpp)
0108 
0109 public:
0110 
0111     void assignColorLabel(int colorId);
0112     void assignPickLabel(int pickId);
0113     void assignRating(int rating);
0114     void setFocusToTitlesEdit();
0115     void setFocusToCommentsEdit();
0116 
0117     void replaceColorLabel(int colorId);
0118     void replacePickLabel(int pickId);
0119     void replaceRating(int rating);
0120 
0121 private:
0122 
0123     void initDescriptionView();
0124     void updateComments();
0125     void updatePickLabel();
0126     void updateColorLabel();
0127     void updateRating();
0128     void updateDate();
0129 
0130     void resetTitleEditPlaceholderText();
0131     void resetCaptionEditPlaceholderText();
0132 
0133 private Q_SLOTS:
0134 
0135     void slotCommentChanged();
0136     void slotTitleChanged();
0137     void slotDateTimeChanged(const QDateTime& dateTime);
0138     void slotPickLabelChanged(int pickId);
0139     void slotColorLabelChanged(int colorId);
0140     void slotRatingChanged(int rating);
0141 
0142     void slotImageRatingChanged(qlonglong imageId);
0143     void slotImageDateChanged(qlonglong imageId);
0144     void slotImageCaptionChanged(qlonglong imageId);
0145 
0146     ///@}
0147 
0148     ///@{
0149     /// Tags view methods (itemdescedittab_tagsview.cpp)
0150 
0151 public:
0152 
0153     void populateTags();
0154     void setFocusToTagsView();
0155     void setFocusToNewTagEdit();
0156     void activateAssignedTagsButton();
0157 
0158     AddTagsLineEdit* getNewTagEdit() const;
0159 
0160 Q_SIGNALS:
0161 
0162     void signalTagFilterMatch(bool);
0163 
0164 private:
0165 
0166     void initTagsView();
0167     void setTagState(TAlbum* const tag, DisjointMetadataDataFields::Status status);
0168     void updateTagsView();
0169     void updateRecentTags();
0170 
0171 private Q_SLOTS:
0172 
0173     void slotTagsSearchChanged(const SearchTextSettings& settings);
0174     void slotTagStateChanged(Album* album, Qt::CheckState checkState);
0175     void slotTaggingActionActivated(const TaggingAction&);
0176     void slotImageTagsChanged(qlonglong imageId);
0177     void slotOpenTagsManager();
0178 
0179     void slotRecentTagsMenuActivated(int);
0180     void slotAssignedTagsToggled(bool);
0181     void slotUnifyPartiallyTags();
0182 
0183     ///@}
0184 
0185     ///@{
0186     /// Information view methods (itemdescedittab_infoview.cpp)
0187 
0188 private:
0189 
0190     void initInformationView();
0191     void updateTemplate();
0192 
0193 private Q_SLOTS:
0194 
0195     void slotTemplateSelected();
0196 
0197     ///@}
0198 
0199     ///@{
0200     /// Private container (itemdescedittab_p.cpp)
0201 
0202 private:
0203 
0204     class Private;
0205     Private* const d;
0206 
0207     friend class Private;
0208 
0209     ///@}
0210 };
0211 
0212 } // namespace Digikam
0213 
0214 #endif // DIGIKAM_ITEM_DESC_EDIT_TAB_H