File indexing completed on 2024-04-28 04:21:19
0001 /* SPDX-FileCopyrightText: 2003-2020 The KPhotoAlbum Development Team 0002 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "CategoryItem.h" 0007 0008 #include <DB/CategoryCollection.h> 0009 #include <DB/ImageDB.h> 0010 #include <DB/MemberMap.h> 0011 #include <MainWindow/DirtyIndicator.h> 0012 #include <MainWindow/Window.h> 0013 #include <kpabase/SettingsData.h> 0014 0015 // Qt includes 0016 #include <QDir> 0017 0018 Settings::CategoryItem::CategoryItem(const QString &category, 0019 const QString &icon, 0020 DB::Category::ViewType type, 0021 int thumbnailSize, 0022 QListWidget *parent, 0023 bool positionable) 0024 : QListWidgetItem(category, parent) 0025 , m_categoryOrig(category) 0026 , m_iconOrig(icon) 0027 , m_positionable(positionable) 0028 , m_positionableOrig(positionable) 0029 , m_category(category) 0030 , m_icon(icon) 0031 , m_type(type) 0032 , m_typeOrig(type) 0033 , m_thumbnailSize(thumbnailSize) 0034 , m_thumbnailSizeOrig(thumbnailSize) 0035 { 0036 setFlags(flags() | Qt::ItemIsEditable); 0037 } 0038 0039 void Settings::CategoryItem::setLabel(const QString &label) 0040 { 0041 setText(label); 0042 m_category = label; 0043 } 0044 0045 void Settings::CategoryItem::submit(DB::MemberMap *memberMap) 0046 { 0047 if (m_categoryOrig.isNull()) { 0048 // New Item 0049 DB::ImageDB::instance()->categoryCollection()->addCategory(m_category, 0050 m_icon, 0051 m_type, 0052 m_thumbnailSize, 0053 true); 0054 MainWindow::DirtyIndicator::markDirty(); 0055 } else { 0056 DB::CategoryPtr category = DB::ImageDB::instance()->categoryCollection()->categoryForName(m_categoryOrig); 0057 0058 if (m_category != m_categoryOrig) { 0059 renameCategory(memberMap); 0060 } 0061 0062 if (m_positionable != m_positionableOrig) { 0063 category->setPositionable(m_positionable); 0064 } 0065 0066 if (m_icon != m_iconOrig) { 0067 category->setIconName(m_icon); 0068 } 0069 0070 if (m_type != m_typeOrig) { 0071 category->setViewType(m_type); 0072 } 0073 0074 if (m_thumbnailSize != m_thumbnailSizeOrig) { 0075 category->setThumbnailSize(m_thumbnailSize); 0076 } 0077 } 0078 0079 m_categoryOrig = m_category; 0080 m_iconOrig = m_icon; 0081 m_typeOrig = m_type; 0082 m_thumbnailSizeOrig = m_thumbnailSize; 0083 m_positionableOrig = m_positionable; 0084 } 0085 0086 void Settings::CategoryItem::removeFromDatabase() 0087 { 0088 if (!m_categoryOrig.isNull()) { 0089 // The database knows about the item. 0090 DB::ImageDB::instance()->categoryCollection()->removeCategory(m_categoryOrig); 0091 } 0092 } 0093 0094 bool Settings::CategoryItem::positionable() const 0095 { 0096 return m_positionable; 0097 } 0098 0099 void Settings::CategoryItem::setPositionable(bool positionable) 0100 { 0101 m_positionable = positionable; 0102 } 0103 0104 QString Settings::CategoryItem::icon() const 0105 { 0106 return m_icon; 0107 } 0108 0109 int Settings::CategoryItem::thumbnailSize() const 0110 { 0111 return m_thumbnailSize; 0112 } 0113 0114 DB::Category::ViewType Settings::CategoryItem::viewType() const 0115 { 0116 return m_type; 0117 } 0118 0119 void Settings::CategoryItem::setIcon(const QString &icon) 0120 { 0121 m_icon = icon; 0122 } 0123 0124 void Settings::CategoryItem::setThumbnailSize(int size) 0125 { 0126 m_thumbnailSize = size; 0127 } 0128 0129 void Settings::CategoryItem::setViewType(DB::Category::ViewType type) 0130 { 0131 m_type = type; 0132 } 0133 0134 void Settings::CategoryItem::renameCategory(DB::MemberMap *memberMap) 0135 { 0136 QDir dir(QString::fromLatin1("%1/CategoryImages").arg(Settings::SettingsData::instance()->imageDirectory())); 0137 0138 const QStringList files = dir.entryList(QStringList() 0139 << QString::fromLatin1("%1*").arg(m_categoryOrig)); 0140 0141 for (QStringList::ConstIterator fileNameIt = files.begin(); 0142 fileNameIt != files.end(); 0143 ++fileNameIt) { 0144 0145 QString newName = m_category + (*fileNameIt).mid(m_categoryOrig.length()); 0146 dir.rename(*fileNameIt, newName); 0147 } 0148 0149 // update category names for privacy-lock settings: 0150 Settings::SettingsData *settings = Settings::SettingsData::instance(); 0151 DB::ImageSearchInfo info = DB::ImageSearchInfo::loadLock(settings->currentLock()); 0152 const bool exclude = settings->lockExcludes(); 0153 0154 info.renameCategory(m_categoryOrig, m_category); 0155 settings->setCurrentLock(info.getLockData(), exclude); 0156 0157 DB::ImageDB::instance()->categoryCollection()->rename(m_categoryOrig, m_category); 0158 memberMap->renameCategory(m_categoryOrig, m_category); 0159 0160 m_categoryOrig = m_category; 0161 } 0162 0163 QString Settings::CategoryItem::originalName() const 0164 { 0165 return m_categoryOrig; 0166 } 0167 0168 void Settings::CategoryItem::markAsNewCategory() 0169 { 0170 m_categoryOrig = QString(); 0171 } 0172 0173 // vi:expandtab:tabstop=4 shiftwidth=4: 0174 0175 #include "moc_CategoryItem.cpp"