File indexing completed on 2024-04-28 15:39:55

0001 // SPDX-FileCopyrightText: 2004-2010 Jesper K. Pedersen <jesper.pedersen@kdab.com>
0002 // SPDX-FileCopyrightText: 2006 Tuomas Suutari <tuomas@nepnep.net>
0003 // SPDX-FileCopyrightText: 2007 Dirk Mueller <mueller@kde.org>
0004 // SPDX-FileCopyrightText: 2012 Miika Turkia <miika.turkia@gmail.com>
0005 // SPDX-FileCopyrightText: 2013-2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0006 // SPDX-FileCopyrightText: 2015-2022 Tobias Leupold <tl@stonemx.de>
0007 //
0008 // SPDX-License-Identifier: GPL-2.0-or-later
0009 
0010 #ifndef CATEGORYCOLLECTION_H
0011 #define CATEGORYCOLLECTION_H
0012 
0013 #include "Category.h"
0014 #include "CategoryPtr.h"
0015 #include "GlobalCategorySortOrder.h"
0016 #include <QList>
0017 #include <memory>
0018 
0019 namespace DB
0020 {
0021 
0022 /**
0023    \class CategoryCollection
0024    This class is the collection of categories. It is the basic anchor point to categories.
0025 */
0026 
0027 class CategoryCollection : public QObject
0028 {
0029     Q_OBJECT
0030 
0031 public:
0032     ~CategoryCollection();
0033 
0034     enum class IncludeSpecialCategories {
0035         Yes,
0036         No
0037     };
0038     CategoryPtr categoryForName(const QString &name) const;
0039     QStringList categoryNames(IncludeSpecialCategories include = IncludeSpecialCategories::Yes) const;
0040     QList<CategoryPtr> categories() const;
0041     CategoryPtr categoryForSpecial(const Category::CategoryType type) const;
0042 
0043     void addCategory(DB::CategoryPtr);
0044     void addCategory(const QString &text, const QString &icon, Category::ViewType type,
0045                      int thumbnailSize, bool show, bool positionable = false);
0046     void removeCategory(const QString &name);
0047     void rename(const QString &oldName, const QString &newName);
0048     GlobalCategorySortOrder *globalSortOrder();
0049 
0050     // FIXME(jzarl): this should be private and FileWriter should be a friend class
0051     void initIdMap();
0052 
0053 Q_SIGNALS:
0054     void categoryCollectionChanged();
0055     void categoryRemoved(const QString &categoryName);
0056     void itemRenamed(DB::Category *category, const QString &oldName, const QString &newName);
0057     void itemRemoved(DB::Category *category, const QString &name);
0058 
0059 protected Q_SLOTS:
0060     void slotItemRenamed(const QString &oldName, const QString &newName);
0061     void slotItemRemoved(const QString &item);
0062 
0063 private:
0064     friend class ImageDB;
0065     CategoryCollection();
0066 
0067     QList<DB::CategoryPtr> m_categories;
0068     QMap<DB::Category::CategoryType, DB::CategoryPtr> m_specialCategories;
0069     std::unique_ptr<GlobalCategorySortOrder> m_globalSortOrder;
0070 };
0071 
0072 }
0073 
0074 #endif /* CATEGORYCOLLECTION_H */
0075 
0076 // vi:expandtab:tabstop=4 shiftwidth=4: