File indexing completed on 2024-04-28 04:21:20

0001 // SPDX-FileCopyrightText: 2003-2022 The KPhotoAlbum Development Team
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #ifndef TAGGROUPSPAGE_H
0006 #define TAGGROUPSPAGE_H
0007 
0008 // Qt includes
0009 #include <QWidget>
0010 
0011 // Local includes
0012 #include <DB/ImageDB.h>
0013 #include <DB/MemberMap.h>
0014 
0015 // Qt classes
0016 class QListWidget;
0017 class QTreeWidget;
0018 class QTreeWidgetItem;
0019 class QLabel;
0020 class QListWidgetItem;
0021 
0022 namespace Settings
0023 {
0024 
0025 // Local classes
0026 class CategoriesGroupsWidget;
0027 
0028 enum CategoryEdit {
0029     Category,
0030     Add,
0031     Remove,
0032     Rename,
0033     NewName
0034 };
0035 
0036 class TagGroupsPage : public QWidget
0037 {
0038     Q_OBJECT
0039 
0040 public:
0041     explicit TagGroupsPage(QWidget *parent);
0042     void saveSettings();
0043     void loadSettings();
0044     DB::MemberMap *memberMap();
0045     QString getCategory(QTreeWidgetItem *currentItem);
0046     void processDrop(QTreeWidgetItem *draggedItem, QTreeWidgetItem *targetItem);
0047 
0048 public Q_SLOTS:
0049     void categoryChangesPending();
0050     void slotPageChange();
0051     void discardChanges();
0052 
0053 private Q_SLOTS:
0054     void slotAddGroup();
0055     void slotDeleteGroup();
0056     void slotRenameGroup();
0057     void showTreeContextMenu(QPoint point);
0058     void showMembersContextMenu(QPoint point);
0059     void slotGroupSelected(QTreeWidgetItem *item);
0060     void checkItemSelection(QListWidgetItem *);
0061     void slotRenameMember();
0062     void slotDeleteMember();
0063 
0064 private: // Functions
0065     void categoryChanged(const QString &name);
0066     void saveOldGroup();
0067     void selectMembers(const QString &group);
0068     void renameAllSubCategories(QTreeWidgetItem *categoryItem, QString oldName, QString newName);
0069     void updateCategoryTree();
0070     void addSubCategories(QTreeWidgetItem *superCategory,
0071                           const QMap<QString, QStringList> &membersForGroup,
0072                           const QStringList &allGroups);
0073     void addNewSubItem(QString &name, QTreeWidgetItem *parentItem);
0074     QTreeWidgetItem *findCategoryItem(QString category);
0075     DB::CategoryPtr getCategoryObject(QString category) const;
0076 
0077 private: // Variables
0078     DB::MemberMap m_memberMap;
0079     QListWidget *m_membersListWidget;
0080     CategoriesGroupsWidget *m_categoryTreeWidget;
0081     QString m_currentCategory;
0082     QString m_currentGroup;
0083     QString m_currentSubCategory;
0084     QString m_currentSuperCategory;
0085     QString m_selectGroupToAddTags;
0086     QAction *m_newGroupAction;
0087     QAction *m_renameAction;
0088     QAction *m_deleteAction;
0089     QAction *m_deleteMemberAction;
0090     QAction *m_renameMemberAction;
0091     QLabel *m_tagsInGroupLabel;
0092     bool m_dataChanged;
0093     QList<QMap<CategoryEdit, QString>> m_categoryChanges;
0094     QLabel *m_pendingChangesLabel;
0095 };
0096 
0097 }
0098 
0099 #endif // TAGGROUPSPAGE_H
0100 
0101 // vi:expandtab:tabstop=4 shiftwidth=4: