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

0001 // SPDX-FileCopyrightText: 2004-2022 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: 2008 Jan Kundrát <jkt@flaska.net>
0005 // SPDX-FileCopyrightText: 2012 Miika Turkia <miika.turkia@gmail.com>
0006 // SPDX-FileCopyrightText: 2013-2023 Johannes Zarl-Zierl <johannes@zarl-zierl.at>
0007 // SPDX-FileCopyrightText: 2015-2022 Tobias Leupold <tl@stonemx.de>
0008 //
0009 // SPDX-License-Identifier: GPL-2.0-or-later
0010 
0011 #include "CategoryCollection.h"
0012 #include "kpabase/Logging.h"
0013 
0014 #include <DB/ImageDB.h>
0015 
0016 DB::CategoryCollection::~CategoryCollection() = default;
0017 
0018 DB::CategoryPtr DB::CategoryCollection::categoryForName(const QString &name) const
0019 {
0020     for (QList<DB::CategoryPtr>::ConstIterator it = m_categories.begin(); it != m_categories.end(); ++it) {
0021         if ((*it)->name() == name)
0022             return *it;
0023     }
0024     return DB::CategoryPtr();
0025 }
0026 
0027 QStringList DB::CategoryCollection::categoryNames(IncludeSpecialCategories include) const
0028 {
0029     QStringList res;
0030     for (const auto &category : m_categories) {
0031         if (include == IncludeSpecialCategories::Yes || !category->isSpecialCategory())
0032             res.append(category->name());
0033     }
0034     return res;
0035 }
0036 
0037 QList<DB::CategoryPtr> DB::CategoryCollection::categories() const
0038 {
0039     return m_categories;
0040 }
0041 
0042 DB::CategoryPtr DB::CategoryCollection::categoryForSpecial(const Category::CategoryType type) const
0043 {
0044     return m_specialCategories[type];
0045 }
0046 
0047 void DB::CategoryCollection::addCategory(CategoryPtr category)
0048 {
0049     m_categories.append(category);
0050     if (category->isSpecialCategory()) {
0051         m_specialCategories[category->type()] = category;
0052     }
0053     connect(category.data(), &DB::Category::changed, this, &DB::CategoryCollection::categoryCollectionChanged);
0054     connect(category.data(), &DB::Category::itemRemoved, this, &DB::CategoryCollection::slotItemRemoved);
0055     connect(category.data(), &DB::Category::itemRenamed, this, &DB::CategoryCollection::slotItemRenamed);
0056     Q_EMIT categoryCollectionChanged();
0057 }
0058 
0059 void DB::CategoryCollection::addCategory(const QString &text, const QString &icon, Category::ViewType type, int thumbnailSize, bool show, bool positionable)
0060 {
0061     addCategory(DB::CategoryPtr(new DB::Category(text, icon, type, thumbnailSize, show, positionable)));
0062 }
0063 
0064 void DB::CategoryCollection::removeCategory(const QString &name)
0065 {
0066     for (QList<DB::CategoryPtr>::iterator it = m_categories.begin(); it != m_categories.end(); ++it) {
0067         if ((*it)->name() == name) {
0068             m_categories.erase(it);
0069             qCDebug(DBLog) << "CategoryCollection::removeCategory: category" << name << "removed.";
0070             Q_EMIT categoryRemoved(name);
0071             Q_EMIT categoryCollectionChanged();
0072             return;
0073         }
0074     }
0075     qCWarning(DBLog) << "CategoryCollection::removeCategory: category" << name << "does not exist!";
0076     Q_ASSERT_X(false, "removeCategory", "trying to remove non-existing category");
0077 }
0078 
0079 void DB::CategoryCollection::rename(const QString &oldName, const QString &newName)
0080 {
0081     categoryForName(oldName)->setName(newName);
0082     DB::ImageDB::instance()->renameCategory(oldName, newName);
0083     Q_EMIT categoryCollectionChanged();
0084 }
0085 
0086 DB::GlobalCategorySortOrder *DB::CategoryCollection::globalSortOrder()
0087 {
0088     return m_globalSortOrder.get();
0089 }
0090 
0091 void DB::CategoryCollection::initIdMap()
0092 {
0093     for (DB::CategoryPtr categoryPtr : qAsConst(m_categories)) {
0094         categoryPtr->initIdMap();
0095     }
0096 }
0097 
0098 void DB::CategoryCollection::slotItemRenamed(const QString &oldName, const QString &newName)
0099 {
0100     Q_EMIT itemRenamed(static_cast<Category *>(const_cast<QObject *>(sender())), oldName, newName);
0101 }
0102 
0103 void DB::CategoryCollection::slotItemRemoved(const QString &item)
0104 {
0105     Q_EMIT itemRemoved(static_cast<Category *>(const_cast<QObject *>(sender())), item);
0106 }
0107 
0108 DB::CategoryCollection::CategoryCollection()
0109     : m_globalSortOrder(new GlobalCategorySortOrder())
0110 {
0111 }
0112 
0113 #include "moc_CategoryCollection.cpp"
0114 // vi:expandtab:tabstop=4 shiftwidth=4: