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: