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.
digikam/digikam/digikam/albumlister.h

160 lines
3.7 KiB

/* ============================================================
*
* This file is a part of digiKam project
* http://www.digikam.org
*
* Date : 2004-06-26
* Description : Albums lister.
*
* Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
* Copyright (C) 2007-2009 by Gilles Caulier <caulier dot gilles at gmail dot com>
* Copyright (C) 2007 by Arnd Baecker <arnd dot baecker at web dot de>
*
* 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.
*
* ============================================================ */
#ifndef ALBUMLISTER_H
#define ALBUMLISTER_H
/** @file albumlister.h */
// TQt includes.
#include <tqobject.h>
#include <tqcstring.h>
// Local includes.
#include "imageinfo.h"
namespace TDEIO
{
class Job;
}
namespace Digikam
{
class Album;
class AlbumListerPriv;
/**
* Manages imageinfo
*
* does listing of imageinfo for the current album and controls the lifetime
* of the imageinfo. tdeioslaves are used for listing the imageinfo
* corresponding to an album. Similar to the albummanager, frontend entities need
* to connect to the AlbumLister for notifications of new Images, deletion of
* Images or refreshing of currently listed Image.
*/
class AlbumLister : public TQObject
{
Q_OBJECT
public:
/** @enum MatchingCondition
* Possible logical matching condition used to sort tags id.
*/
enum MatchingCondition
{
OrCondition = 0,
AndCondition
};
/** @enum RatingCondition
* Possible conditions used to filter rating: >=, =, <=.
*/
enum RatingCondition
{
GreaterEqualCondition = 0,
EqualCondition,
LessEqualCondition
};
public:
static AlbumLister* instance();
~AlbumLister();
/**
* Opens an album to lists its items
*/
void openAlbum(Album *album);
void stop();
/**
* Reread an albums item list
*/
void refresh();
void setNamesFilter(const TQString& namesFilter);
void setDayFilter(const TQValueList<TQDateTime>& days);
void setTagFilter(const TQValueList<int>& tags, const MatchingCondition& matchingCond,
bool showUnTagged=false);
void setRatingFilter(int rating, const RatingCondition& ratingCond);
void setMimeTypeFilter(int mimeTypeFilter);
void setTextFilter(const TQString& text);
void setRecurseAlbums(bool recursive);
void setRecurseTags(bool recursive);
/**
* Trigger a recreation of the given ImageInfo object
* for the next refresh.
*/
void invalidateItem(const ImageInfo *item);
bool tagFiltersIsActive();
signals:
void signalNewItems(const ImageInfoList& items);
void signalDeleteItem(ImageInfo* item);
void signalNewFilteredItems(const ImageInfoList& items);
void signalDeleteFilteredItem(ImageInfo* item);
void signalClear();
void signalCompleted();
void signalItemsTextFilterMatch(bool);
void signalItemsFilterMatch(bool);
private slots:
void slotFilterItems();
void slotResult(TDEIO::Job* job);
void slotData(TDEIO::Job* job, const TQByteArray& data);
private:
AlbumLister();
bool matchesFilter(const ImageInfo* info, bool& foundText);
private:
AlbumListerPriv *d;
static AlbumLister *m_instance;
};
} // namespace Digikam
#endif /* ALBUMLISTER_H */