4
4
* http://www.digikam.org
7
* Description : a view for date albums.
7
* Description : a folder view for date albums.
9
9
* Copyright (C) 2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
10
* Copyright (C) 2006-2008 by Gilles Caulier <caulier dot gilles at gmail dot com>
11
12
* This program is free software; you can redistribute it
12
13
* and/or modify it under the terms of the GNU General
49
#include "albummanager.h"
50
51
#include "albumsettings.h"
53
#include "folderview.h"
51
54
#include "monthwidget.h"
52
#include "folderitem.h"
53
#include "folderview.h"
54
55
#include "datefolderview.h"
55
56
#include "datefolderview.moc"
61
class DateFolderItem : public FolderItem
66
DateFolderItem(QListView* parent, DAlbum* album);
67
DateFolderItem(QListViewItem* parent, DAlbum* album);
73
int compare(QListViewItem *i, int, bool) const;
77
DAlbum* album() const;
91
DateFolderItem::DateFolderItem(QListView* parent, DAlbum* album)
92
: FolderItem(parent, QString(), true)
96
m_name = QString::number(album->date().year());
100
DateFolderItem::DateFolderItem(QListViewItem* parent, DAlbum* album)
101
: FolderItem(parent, QString())
105
#if KDE_IS_VERSION(3,2,0)
106
m_name = KGlobal::locale()->calendar()->monthName(m_album->date(), false);
108
m_name = KGlobal::locale()->monthName(m_album->date(), false);
113
DateFolderItem::~DateFolderItem()
117
void DateFolderItem::refresh()
119
if (AlbumSettings::instance()->getShowFolderTreeViewItemsCount())
120
setText(0, QString("%1 (%2)").arg(m_name).arg(m_count));
125
int DateFolderItem::compare(QListViewItem* i, int , bool ) const
130
DateFolderItem* dItem = dynamic_cast<DateFolderItem*>(i);
131
if (m_album->date() == dItem->m_album->date())
133
else if (m_album->date() > dItem->m_album->date())
139
QString DateFolderItem::date() const
141
return m_album->date().toString();
144
QString DateFolderItem::name() const
149
DAlbum* DateFolderItem::album() const
154
int DateFolderItem::count() const
159
void DateFolderItem::setCount(int v)
165
// -----------------------------------------------------------------
60
167
class DateFolderViewPriv
64
171
DateFolderViewPriv()
76
MonthWidget *monthview;
79
class DateFolderItem : public FolderItem
83
DateFolderItem(QListView* parent, const QString& name)
84
: FolderItem(parent, name, true), m_album(0)
88
DateFolderItem(QListViewItem* parent, const QString& name, DAlbum* album)
89
: FolderItem(parent, name), m_album(album)
93
int compare(QListViewItem* i, int , bool ) const
98
DateFolderItem* dItem = dynamic_cast<DateFolderItem*>(i);
99
if (!dItem || !dItem->m_album)
101
return text(0).localeAwareCompare(i->text(0));
104
if (m_album->date() == dItem->m_album->date())
106
else if (m_album->date() > dItem->m_album->date())
114
// If an album is set, return it's date, otherwise just the year
115
return m_album ? m_album->date().toString() : text(0);
182
FolderView *listview;
184
MonthWidget *monthview;
121
187
DateFolderView::DateFolderView(QWidget* parent)
125
191
d->listview = new FolderView(this);
126
192
d->monthview = new MonthWidget(this);
128
d->listview->addColumn(i18n("My Dates"));
194
d->listview->addColumn(i18n("My Calendar"));
129
195
d->listview->setResizeMode(QListView::LastColumn);
130
196
d->listview->setRootIsDecorated(true);
132
198
connect(AlbumManager::instance(), SIGNAL(signalAlbumAdded(Album*)),
133
SLOT(slotAlbumAdded(Album*)));
199
this, SLOT(slotAlbumAdded(Album*)));
135
201
connect(AlbumManager::instance(), SIGNAL(signalAlbumDeleted(Album*)),
136
SLOT(slotAlbumDeleted(Album*)));
202
this, SLOT(slotAlbumDeleted(Album*)));
138
204
connect(AlbumManager::instance(), SIGNAL(signalAllDAlbumsLoaded()),
139
SLOT(slotAllDAlbumsLoaded()));
205
this, SLOT(slotAllDAlbumsLoaded()));
141
207
connect(AlbumManager::instance(), SIGNAL(signalAlbumsCleared()),
142
208
d->listview, SLOT(clear()));
210
connect(AlbumManager::instance(), SIGNAL(signalDAlbumsDirty(const QMap<YearMonth, int>&)),
211
this, SLOT(slotRefresh(const QMap<YearMonth, int>&)));
144
213
connect(d->listview, SIGNAL(selectionChanged()),
145
SLOT(slotSelectionChanged()));
214
this, SLOT(slotSelectionChanged()));
148
217
DateFolderView::~DateFolderView()
182
251
DAlbum* album = (DAlbum*)a;
184
QDate date = album->date();
186
QString yr = QString::number(date.year());
188
#if KDE_IS_VERSION(3,2,0)
189
QString mo = KGlobal::locale()->calendar()->monthName(date, false);
191
QString mo = KGlobal::locale()->monthName(date, false);
194
QListViewItem* parent = d->listview->findItem(yr, 0);
197
parent = new DateFolderItem(d->listview, yr);
198
parent->setPixmap(0, SmallIcon("date", AlbumSettings::instance()->getDefaultTreeIconSize()));
201
DateFolderItem* item = new DateFolderItem(parent, mo, album);
202
item->setPixmap(0, SmallIcon("date", AlbumSettings::instance()->getDefaultTreeIconSize()));
204
album->setExtraData(this, item);
252
QDate date = album->date();
254
if (album->range() == DAlbum::Year)
256
DateFolderItem* item = new DateFolderItem(d->listview, album);
257
item->setPixmap(0, SmallIcon("date", AlbumSettings::instance()->getDefaultTreeIconSize()));
258
album->setExtraData(this, item);
262
QString yr = QString::number(date.year());
263
QListViewItem* parent = findRootItemByYear(yr);
267
DateFolderItem* item = new DateFolderItem(parent, album);
268
item->setPixmap(0, SmallIcon("date", AlbumSettings::instance()->getDefaultTreeIconSize()));
269
album->setExtraData(this, item);
207
273
void DateFolderView::slotAlbumDeleted(Album* a)
248
313
DateFolderItem* dateItem = dynamic_cast<DateFolderItem*>(selItem);
250
if (!dateItem || !dateItem->m_album)
252
316
AlbumManager::instance()->setCurrentAlbum(0);
253
d->monthview->setActive(false);
320
AlbumManager::instance()->setCurrentAlbum(dateItem->album());
322
if (dateItem->album()->range() == DAlbum::Month)
257
AlbumManager::instance()->setCurrentAlbum(dateItem->m_album);
259
QDate date = dateItem->m_album->date();
324
QDate date = dateItem->album()->date();
260
325
d->monthview->setActive(true);
261
326
d->monthview->setYearMonth(date.year(), date.month());
279
344
openFolders = config->readListEntry("OpenFolders");
282
347
DateFolderItem *item;
284
349
QListViewItemIterator it(d->listview);
285
350
for( ; it.current(); ++it)
287
352
item = dynamic_cast<DateFolderItem*>(it.current());
288
353
id = item->date();
289
354
if(openFolders.contains(id))
290
355
d->listview->setOpen(item, true);
292
357
d->listview->setOpen(item, false);
294
359
if(id == selected)
295
360
d->listview->setSelected(item, true);
299
364
void DateFolderView::gotoDate(const QDate& dt)
301
366
DateFolderItem *item = 0;
304
369
QDate date = QDate(dt.year(), dt.month(), 1);
306
371
// Find that date in the side-bar list.
307
372
QListViewItemIterator it(d->listview);
308
373
for( ; it.current(); ++it)
310
375
item = dynamic_cast<DateFolderItem*>(it.current());
313
id = item->m_album->date();
378
id = item->album()->date();
316
381
d->listview->setSelected(item, true);
325
390
KConfig *config = kapp->config();
326
391
config->setGroup(name());
328
393
DateFolderItem *item = dynamic_cast<DateFolderItem*>(d->listview->selectedItem());
330
395
config->writeEntry("LastSelectedItem", item->date());
332
397
QStringList openFolders;
333
398
QListViewItemIterator it(d->listview);
334
399
item = dynamic_cast<DateFolderItem*>(d->listview->firstChild());
350
415
d->listview->setSelected(item, true);
351
416
d->listview->ensureItemVisible(item);
419
QListViewItem *DateFolderView::findRootItemByYear(const QString& year)
421
QListViewItemIterator it(d->listview);
425
DateFolderItem* item = dynamic_cast<DateFolderItem*>(*it);
428
if (item->album()->range() == DAlbum::Year && item->name() == year)
436
void DateFolderView::refresh()
438
QListViewItemIterator it(d->listview);
442
DateFolderItem* item = dynamic_cast<DateFolderItem*>(*it);
449
void DateFolderView::slotRefresh(const QMap<YearMonth, int>& yearMonthMap)
451
QListViewItemIterator it(d->listview);
455
DateFolderItem* item = dynamic_cast<DateFolderItem*>(*it);
458
QDate date = item->album()->date();
460
if (item->album()->range() == DAlbum::Month)
462
QMap<YearMonth, int>::const_iterator it2 = yearMonthMap.find(YearMonth(date.year(), date.month()));
463
if ( it2 != yearMonthMap.end() )
464
item->setCount(it2.data());
469
for ( QMap<YearMonth, int>::const_iterator it2 = yearMonthMap.begin();
470
it2 != yearMonthMap.end(); ++it2 )
472
if (it2.key().first == date.year())
475
item->setCount(count);
354
482
} // namespace Digikam