7
7
* Descritpion : tags folder view.
9
9
* Copyright (C) 2005-2006 by Joern Ahrens <joern.ahrens@kdemail.net>
10
* Copyright (C) 2006-2007 by Gilles Caulier <caulier dot gilles at gmail dot com>
10
* Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
12
12
* This program is free software; you can redistribute it
13
13
* and/or modify it under the terms of the GNU General
69
//-----------------------------------------------------------------------------
71
//-----------------------------------------------------------------------------
73
71
class TagFolderViewItem : public FolderItem
77
TagFolderViewItem(QListView *parent, TAlbum *tag);
78
TagFolderViewItem(QListViewItem *parent, TAlbum *tag);
76
TagFolderViewItem(QListView *parent, TAlbum *album);
77
TagFolderViewItem(QListViewItem *parent, TAlbum *album);
80
TAlbum* getTag() const;
79
TAlbum* album() const;
83
void setCount(int count);
88
TagFolderViewItem::TagFolderViewItem(QListView *parent, TAlbum *tag)
89
: FolderItem(parent, tag->title())
95
TagFolderViewItem::TagFolderViewItem(QListViewItem *parent, TAlbum *tag)
96
: FolderItem(parent, tag->title())
100
/* setText(0, tag->title() + QString(" (%1)")
101
.arg(AlbumManager::instance()->albumDB()->getItemNamesInAlbum(tag->id()).count()));*/
104
TAlbum* TagFolderViewItem::getTag() const
93
TagFolderViewItem::TagFolderViewItem(QListView *parent, TAlbum *album)
94
: FolderItem(parent, album->title())
101
TagFolderViewItem::TagFolderViewItem(QListViewItem *parent, TAlbum *album)
102
: FolderItem(parent, album->title())
104
setDragEnabled(true);
109
void TagFolderViewItem::refresh()
111
if (!m_album) return;
113
if (AlbumSettings::instance()->getShowFolderTreeViewItemsCount() &&
114
dynamic_cast<TagFolderViewItem*>(parent()))
117
setText(0, QString("%1 (%2)").arg(m_album->title()).arg(m_count));
120
int countRecursive = m_count;
121
AlbumIterator it(m_album);
122
while ( it.current() )
124
TagFolderViewItem *item = (TagFolderViewItem*)it.current()->extraData(listView());
126
countRecursive += item->count();
129
setText(0, QString("%1 (%2)").arg(m_album->title()).arg(countRecursive));
134
setText(0, m_album->title());
138
void TagFolderViewItem::setOpen(bool o)
140
QListViewItem::setOpen(o);
144
TAlbum* TagFolderViewItem::album() const
109
149
int TagFolderViewItem::id() const
111
return m_tag ? m_tag->id() : 0;
114
//-----------------------------------------------------------------------------
151
return m_album ? m_album->id() : 0;
154
void TagFolderViewItem::setCount(int count)
160
int TagFolderViewItem::count()
116
165
//-----------------------------------------------------------------------------
118
167
class TagFolderViewPriv
147
192
setAcceptDrops(true);
148
193
viewport()->setAcceptDrops(true);
150
// -- setup slots ---------------------------------------------------------
195
// ------------------------------------------------------------------------
197
connect(d->albumMan, SIGNAL(signalTAlbumsDirty(const QMap<int, int>&)),
198
this, SLOT(slotRefresh(const QMap<int, int>&)));
152
200
connect(d->albumMan, SIGNAL(signalAlbumAdded(Album*)),
153
201
this, SLOT(slotAlbumAdded(Album*)));
167
215
connect(d->albumMan, SIGNAL(signalTAlbumMoved(TAlbum*, TAlbum*)),
168
216
this, SLOT(slotAlbumMoved(TAlbum*, TAlbum*)));
218
// ------------------------------------------------------------------------
170
220
AlbumThumbnailLoader *loader = AlbumThumbnailLoader::instance();
172
222
connect(loader, SIGNAL(signalThumbnail(Album *, const QPixmap&)),
570
618
parent = d->albumMan->findTAlbum(0);
572
parent = item->getTag();
620
parent = item->album();
574
622
if (title.isNull())
576
if(!TagCreateDlg::tagCreate(kapp->activeWindow(), parent, title, icon))
624
if(!TagEditDlg::tagCreate(kapp->activeWindow(), parent, title, icon))
581
TAlbum* newAlbum = d->albumMan->createTAlbum(parent, title, icon, errMsg);
628
QMap<QString, QString> errMap;
629
AlbumList tList = TagEditDlg::createTAlbum(parent, title, icon, errMap);
630
TagEditDlg::showtagsListCreationError(kapp->activeWindow(), errMap);
584
KMessageBox::error(0, errMsg);
632
for (AlbumList::iterator it = tList.begin(); it != tList.end(); ++it)
587
TagFolderViewItem *item = (TagFolderViewItem*)newAlbum->extraData(this);
589
ensureItemVisible( item );
634
TagFolderViewItem* item = (TagFolderViewItem*)(*it)->extraData(this);
636
ensureItemVisible(item);
665
710
"Deleting this will also delete "
667
712
"Do you want to continue?",
668
children).arg(tag->title()),
669
i18n("Delete Tag"), KGuiItem(i18n("Delete"),
672
if(result == KMessageBox::Continue)
675
if (!d->albumMan->deleteTAlbum(tag, errMsg))
676
KMessageBox::error(0, errMsg);
713
children).arg(tag->title()));
715
if(result != KMessageBox::Continue)
720
LLongList assignedItems = d->albumMan->albumDB()->getItemIDsInTag(tag->id());
721
if (!assignedItems.isEmpty())
723
message = i18n("Tag '%1' is assigned to one item. "
724
"Do you want to continue?",
725
"Tag '%1' is assigned to %n items. "
726
"Do you want to continue?",
727
assignedItems.count()).arg(tag->title());
682
KMessageBox::warningContinueCancel(0, i18n("Delete '%1' tag?")
683
.arg(tag->title()), i18n("Delete Tag"),
684
KGuiItem(i18n("Delete"), "editdelete"));
686
if(result == KMessageBox::Continue)
689
if (!d->albumMan->deleteTAlbum(tag, errMsg))
690
KMessageBox::error(0, errMsg);
731
message = i18n("Delete '%1' tag?").arg(tag->title());
734
int result = KMessageBox::warningContinueCancel(0, message,
736
KGuiItem(i18n("Delete"),
739
if(result == KMessageBox::Continue)
742
if (!d->albumMan->deleteTAlbum(tag, errMsg))
743
KMessageBox::error(0, errMsg);
991
void TagFolderView::refresh()
993
QListViewItemIterator it(this);
997
TagFolderViewItem* item = dynamic_cast<TagFolderViewItem*>(*it);
1004
void TagFolderView::slotRefresh(const QMap<int, int>& tagsStatMap)
1006
QListViewItemIterator it(this);
1008
while (it.current())
1010
TagFolderViewItem* item = dynamic_cast<TagFolderViewItem*>(*it);
1015
int id = item->id();
1016
QMap<int, int>::const_iterator it2 = tagsStatMap.find(id);
1017
if ( it2 != tagsStatMap.end() )
1018
item->setCount(it2.data());
937
1027
} // namespace Digikam