File indexing completed on 2025-03-09 03:58:41
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2003-01-23 0007 * Description : A widget to display a list of camera folders. 0008 * 0009 * SPDX-FileCopyrightText: 2003-2005 by Renchi Raju <renchi dot raju at gmail dot com> 0010 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * SPDX-License-Identifier: GPL-2.0-or-later 0013 * 0014 * ============================================================ */ 0015 0016 #include "camerafolderview.h" 0017 0018 // KDE includes 0019 0020 #include <klocalizedstring.h> 0021 0022 // Local includes 0023 0024 #include "digikam_debug.h" 0025 #include "camerafolderitem.h" 0026 0027 namespace Digikam 0028 { 0029 0030 class Q_DECL_HIDDEN CameraFolderView::Private 0031 { 0032 public: 0033 0034 explicit Private() 0035 : cameraName(QLatin1String("Camera")), 0036 virtualFolder(nullptr), 0037 rootFolder(nullptr) 0038 { 0039 } 0040 0041 QString cameraName; 0042 0043 CameraFolderItem* virtualFolder; 0044 CameraFolderItem* rootFolder; 0045 }; 0046 0047 CameraFolderView::CameraFolderView(QWidget* const parent) 0048 : QTreeWidget(parent), 0049 d(new Private) 0050 { 0051 setColumnCount(1); 0052 setRootIsDecorated(false); 0053 setUniformRowHeights(true); 0054 setAllColumnsShowFocus(true); 0055 setSelectionMode(QAbstractItemView::SingleSelection); 0056 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); 0057 setDragEnabled(false); 0058 setAcceptDrops(false); 0059 setDropIndicatorShown(false); 0060 setHeaderLabels(QStringList() << i18n("Camera Folders")); 0061 0062 connect(this, SIGNAL(itemActivated(QTreeWidgetItem*,int)), 0063 this, SLOT(slotCurrentChanged(QTreeWidgetItem*,int))); 0064 0065 connect(this, SIGNAL(itemClicked(QTreeWidgetItem*,int)), 0066 this, SLOT(slotCurrentChanged(QTreeWidgetItem*,int))); 0067 } 0068 0069 CameraFolderView::~CameraFolderView() 0070 { 0071 delete d; 0072 } 0073 0074 void CameraFolderView::addVirtualFolder(const QString& name, const QIcon& icon) 0075 { 0076 d->cameraName = name; 0077 d->virtualFolder = new CameraFolderItem(this, d->cameraName, icon); 0078 d->virtualFolder->setExpanded(true); 0079 d->virtualFolder->setSelected(false); 0080 0081 // item is not selectable. 0082 0083 d->virtualFolder->setFlags(d->virtualFolder->flags() & (int)!Qt::ItemIsSelectable); 0084 d->virtualFolder->setDisabled(false); 0085 } 0086 0087 void CameraFolderView::addRootFolder(const QString& folder, int nbItems, const QIcon &icon) 0088 { 0089 d->rootFolder = new CameraFolderItem(d->virtualFolder, folder, folder, icon); 0090 d->rootFolder->setExpanded(true); 0091 0092 if (nbItems != -1) 0093 { 0094 d->rootFolder->setCount(nbItems); 0095 } 0096 } 0097 0098 CameraFolderItem* CameraFolderView::addFolder(const QString& folder, const QString& subFolder, 0099 int nbItems, const QIcon &icon) 0100 { 0101 CameraFolderItem* const parentItem = findFolder(folder); 0102 0103 if (parentItem) 0104 { 0105 QString path(folder); 0106 0107 if (!folder.endsWith(QLatin1Char('/'))) 0108 { 0109 path += QLatin1Char('/'); 0110 } 0111 0112 path += subFolder + QLatin1Char('/'); 0113 0114 if (!findFolder(path)) 0115 { 0116 CameraFolderItem* item = new CameraFolderItem(parentItem, subFolder, path, icon); 0117 0118 qCDebug(DIGIKAM_IMPORTUI_LOG) << "Adding subfolder:" << subFolder 0119 << "Folder path:" << item->folderPath(); 0120 0121 item->setCount(nbItems); 0122 item->setExpanded(true); 0123 0124 return item; 0125 } 0126 else 0127 { 0128 return nullptr; 0129 } 0130 } 0131 else 0132 { 0133 qCWarning(DIGIKAM_IMPORTUI_LOG) << "Could not find parent for subfolder" 0134 << subFolder << "of folder" << folder; 0135 return nullptr; 0136 } 0137 } 0138 0139 CameraFolderItem* CameraFolderView::findFolder(const QString& folderPath) 0140 { 0141 QTreeWidgetItemIterator it(this); 0142 0143 while (*it) 0144 { 0145 CameraFolderItem* const lvItem = dynamic_cast<CameraFolderItem*>(*it); 0146 0147 if (lvItem && (lvItem->folderPath() == folderPath)) 0148 { 0149 return lvItem; 0150 } 0151 0152 ++it; 0153 } 0154 0155 return nullptr; 0156 } 0157 0158 void CameraFolderView::slotCurrentChanged(QTreeWidgetItem* item, int) 0159 { 0160 if (!item) 0161 { 0162 Q_EMIT signalFolderChanged(nullptr); 0163 } 0164 else 0165 { 0166 Q_EMIT signalFolderChanged(dynamic_cast<CameraFolderItem*>(item)); 0167 } 0168 } 0169 0170 CameraFolderItem* CameraFolderView::virtualFolder() const 0171 { 0172 return d->virtualFolder; 0173 } 0174 0175 CameraFolderItem* CameraFolderView::rootFolder() const 0176 { 0177 return d->rootFolder; 0178 } 0179 0180 void CameraFolderView::clear() 0181 { 0182 QTreeWidget::clear(); 0183 d->virtualFolder = nullptr; 0184 d->rootFolder = nullptr; 0185 0186 Q_EMIT signalCleared(); 0187 } 0188 0189 } // namespace Digikam 0190 0191 #include "moc_camerafolderview.cpp"