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"