You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
244 lines
8.6 KiB
244 lines
8.6 KiB
/* ============================================================
|
|
* File : gpfileitemcontainer.cpp
|
|
* Author: Renchi Raju <renchi@pooh.tam.uiuc.edu>
|
|
* Date : 2003-02-21
|
|
* Description :
|
|
*
|
|
* Copyright 2003 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
|
|
|
|
* This program is free software; you can redistribute it
|
|
* and/or modify it under the terms of the GNU General
|
|
* Public License as published by the Free Software Foundation;
|
|
* either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* ============================================================ */
|
|
|
|
// TQt
|
|
#include <tqstring.h>
|
|
// KDE
|
|
#include <kdebug.h>
|
|
// Local
|
|
#include "camerafolderview.h"
|
|
#include "camerafolderitem.h"
|
|
#include "cameraiconview.h"
|
|
#include "cameraiconitem.h"
|
|
#include "gpfileitemcontainer.h"
|
|
|
|
namespace KIPIKameraKlientPlugin
|
|
{
|
|
|
|
GPFileItemContainer::GPFileItemContainer(TQObject *parent, CameraFolderView *folderView, CameraIconView *iconView) : TQObject(parent) {
|
|
folderView_ = folderView;
|
|
iconView_ = iconView;
|
|
folderDict_.setAutoDelete(true);
|
|
connect(folderView_, TQT_SIGNAL(signalCleared()), this, TQT_SLOT(slotFolderViewCleared()));
|
|
connect(iconView_, TQT_SIGNAL(signalCleared()), this, TQT_SLOT(slotIconViewCleared()));
|
|
}
|
|
|
|
GPFileItemContainer::~GPFileItemContainer() {
|
|
|
|
}
|
|
|
|
void GPFileItemContainer::addVirtualFolder(const TQString& title) {
|
|
folderView_->addVirtualFolder(title);
|
|
}
|
|
|
|
void GPFileItemContainer::addRootFolder(const TQString& folder) {
|
|
folderView_->addRootFolder(folder);
|
|
GPFolder *item = new GPFolder;
|
|
item->viewItem = folderView_->rootFolder();
|
|
item->viewItem->setCount(0);
|
|
folderDict_.insert(folder, item);
|
|
}
|
|
|
|
void GPFileItemContainer::addFolder(const TQString& folder, const TQString& subfolder) {
|
|
TQString path(folder);
|
|
if (!path.endsWith("/")) {
|
|
path += "/";
|
|
}
|
|
path += subfolder;
|
|
kdDebug() << "GPFileItemContainer: Adding folder " << path << endl;
|
|
if (!folderDict_.find(path)) {
|
|
GPFolder *item = new GPFolder;
|
|
folderDict_.insert(path, item);
|
|
item->viewItem = folderView_->addFolder(folder, subfolder);
|
|
if (item->viewItem) {
|
|
item->viewItem->setCount(0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void GPFileItemContainer::addFiles(const TQString& folder, const GPFileItemInfoList& infoList) {
|
|
GPFolder *folderItem = folderDict_.find(folder);
|
|
if (!folderItem) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't find Folder in Dict: " << folder << endl;
|
|
return;
|
|
}
|
|
GPFileDict* fileDict = folderItem->fileDict;
|
|
GPFileItemInfoList::const_iterator it;
|
|
for (it = infoList.begin(); it != infoList.end(); ++it) {
|
|
GPFileItemInfo *fileInfo = fileDict->find((*it).name);
|
|
if (!fileInfo) {
|
|
// Hmm... Totally New file
|
|
fileInfo = new GPFileItemInfo((*it));
|
|
fileDict->insert((*it).name, fileInfo);
|
|
// Update the count for the correspong folderviewitem
|
|
if (folderItem->viewItem)
|
|
folderItem->viewItem->changeCount(1);
|
|
// Also update the count of the virtual folder
|
|
if (folderView_->virtualFolder())
|
|
folderView_->virtualFolder()->changeCount(1);
|
|
}
|
|
// Have to check here: as when changing thumbnailsize, we cannot cancel the controller and so might end up having two items of the same type in the iconview
|
|
if (!fileInfo->viewItem) {
|
|
CameraIconItem *iconItem = iconView_->addItem(fileInfo);
|
|
fileInfo->viewItem = iconItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Files to be added to the virtual folder
|
|
void GPFileItemContainer::addFiles(const GPFileItemInfoList& infoList) {
|
|
if (!folderView_->virtualFolder()) {
|
|
kdWarning() << "GPFileItemContainer: " << "Virtual Folder not created yet" << endl;
|
|
return;
|
|
}
|
|
GPFileItemInfoList::const_iterator it;
|
|
for (it = infoList.begin(); it != infoList.end(); ++it) {
|
|
GPFileItemInfo info(*it);
|
|
|
|
GPFolder *folderItem = folderDict_.find(info.folder);
|
|
if (!folderItem) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't find Folder in Dict: " << info.folder << endl;
|
|
continue;
|
|
}
|
|
GPFileDict* fileDict = folderItem->fileDict;
|
|
GPFileItemInfo *fileInfo = fileDict->find((*it).name);
|
|
if (!fileInfo) {
|
|
// Hmm... Totally New file
|
|
fileInfo = new GPFileItemInfo(info);
|
|
fileDict->insert((*it).name, fileInfo);
|
|
// Update the count for the correspong folderviewitem
|
|
if (folderItem->viewItem)
|
|
folderItem->viewItem->changeCount(1);
|
|
// Also update the count of the virtual folder
|
|
if (folderView_->virtualFolder())
|
|
folderView_->virtualFolder()->changeCount(1);
|
|
}
|
|
if (!fileInfo->viewItem) {
|
|
CameraIconItem *iconItem = iconView_->addItem(fileInfo);
|
|
fileInfo->viewItem = iconItem;
|
|
}
|
|
}
|
|
}
|
|
|
|
void GPFileItemContainer::addFile(const TQString& folder, const GPFileItemInfo& info) {
|
|
GPFolder *folderItem = folderDict_.find(folder);
|
|
if (!folderItem) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't find Folder in Dict: " << folder << endl;
|
|
return;
|
|
}
|
|
GPFileDict* fileDict = folderItem->fileDict;
|
|
GPFileItemInfo *fileInfo = fileDict->find(info.name);
|
|
if (!fileInfo) {
|
|
// Hmm... Totally New file
|
|
fileInfo = new GPFileItemInfo(info);
|
|
fileDict->insert(info.name, fileInfo);
|
|
// Update the count for the correspong folderviewitem
|
|
if (folderItem->viewItem) {
|
|
folderItem->viewItem->changeCount(1);
|
|
}
|
|
// Also update the count of the virtual folder
|
|
if (folderView_->virtualFolder()) {
|
|
folderView_->virtualFolder()->changeCount(1);
|
|
}
|
|
}
|
|
if (!fileInfo->viewItem) {
|
|
CameraIconItem *iconItem = iconView_->addItem(fileInfo);
|
|
fileInfo->viewItem = iconItem;
|
|
}
|
|
}
|
|
|
|
void GPFileItemContainer::delFile(const TQString& folder, const TQString& name) {
|
|
GPFolder *folderItem = folderDict_.find(folder);
|
|
if (!folderItem) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't find Folder in Dict: " << folder << endl;
|
|
return;
|
|
}
|
|
GPFileDict* fileDict = folderItem->fileDict;
|
|
GPFileItemInfo* fileInfo = fileDict->find(name);
|
|
if (!fileInfo) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't File Item to Delete in Dict: " << name << endl;
|
|
return;
|
|
}
|
|
if (fileInfo->viewItem) {
|
|
CameraIconItem *iconItem = (CameraIconItem*) fileInfo->viewItem;
|
|
delete iconItem;
|
|
}
|
|
fileDict->remove(name);
|
|
// Update the count for the correspong folderviewitem
|
|
if (folderItem->viewItem) {
|
|
folderItem->viewItem->changeCount(-1);
|
|
}
|
|
// Also update the count of the virtual folder
|
|
if (folderView_->virtualFolder()) {
|
|
folderView_->virtualFolder()->changeCount(-1);
|
|
}
|
|
}
|
|
|
|
CameraIconItem* GPFileItemContainer::findItem(const TQString& folder, const TQString& name) {
|
|
GPFolder *folderItem = folderDict_.find(folder);
|
|
if (!folderItem) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't find Folder in Dict: " << folder << endl;
|
|
return 0;
|
|
}
|
|
GPFileDict* fileDict = folderItem->fileDict;
|
|
GPFileItemInfo* fileInfo = fileDict->find(name);
|
|
if (!fileInfo) {
|
|
kdWarning() << "GPFileItemContainer: " << "Couldn't File Item to Delete in Dict: " << name << endl;
|
|
return 0;
|
|
}
|
|
return (CameraIconItem*) fileInfo->viewItem;
|
|
}
|
|
|
|
TQPtrList<GPFileItemInfo> GPFileItemContainer::allFiles() {
|
|
TQPtrList<GPFileItemInfo> ptrList;
|
|
GPFolderDictIterator it(folderDict_);
|
|
for (; it.current(); ++it) {
|
|
GPFolder* folderItem = it.current();
|
|
GPFileDictIterator iter(*(folderItem->fileDict));
|
|
for (; iter.current(); ++iter) {
|
|
ptrList.append(iter.current());
|
|
}
|
|
}
|
|
return ptrList;
|
|
}
|
|
|
|
void GPFileItemContainer::slotFolderViewCleared() {
|
|
folderDict_.clear();
|
|
}
|
|
|
|
void GPFileItemContainer::slotIconViewCleared() {
|
|
// Uh Oh... expensive process
|
|
// Zero out all the view items
|
|
GPFolderDictIterator it(folderDict_);
|
|
for (; it.current(); ++it) {
|
|
GPFolder* folderItem = it.current();
|
|
GPFileDictIterator iter(*(folderItem->fileDict));
|
|
for (; iter.current(); ++iter) {
|
|
GPFileItemInfo *fileInfo = iter.current();
|
|
fileInfo->viewItem = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
} // NameSpace KIPIKameraKlientPlugin
|
|
|
|
#include "gpfileitemcontainer.moc"
|