• Skip to content
  • Skip to link menu
KDE 4.4 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

digikam

albummanager.h

Go to the documentation of this file.
00001 /* ============================================================
00002  *
00003  * This file is a part of digiKam project
00004  * http://www.digikam.org
00005  *
00006  * Date        : 2004-06-15
00007  * Description : Albums manager interface.
00008  *
00009  * Copyright (C) 2004 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
00010  * Copyright (C) 2006-2009 by Gilles Caulier <caulier dot gilles at gmail dot com>
00011  * Copyright (C) 2006-2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
00012  *
00013  * This program is free software; you can redistribute it
00014  * and/or modify it under the terms of the GNU General
00015  * Public License as published by the Free Software Foundation;
00016  * either version 2, or (at your option)
00017  * any later version.
00018  *
00019  * This program is distributed in the hope that it will be useful,
00020  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00021  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00022  * GNU General Public License for more details.
00023  *
00024  * ============================================================ */
00025 
00028 #ifndef ALBUMMANAGER_H
00029 #define ALBUMMANAGER_H
00030 
00031 // Qt includes
00032 
00033 #include <QList>
00034 #include <QObject>
00035 #include <QString>
00036 #include <QMap>
00037 
00038 // KDE includes
00039 
00040 #include <kurl.h>
00041 
00042 // Local includes
00043 
00044 #include "albuminfo.h"
00045 #include "digikam_export.h"
00046 
00047 class QDate;
00048 
00049 class KJob;
00050 namespace KIO
00051 {
00052 class Job;
00053 }
00054 
00055 namespace Digikam
00056 {
00057 
00058 class CollectionLocation;
00059 class Album;
00060 class PAlbum;
00061 class TAlbum;
00062 class DAlbum;
00063 class SAlbum;
00064 class AlbumChangeset;
00065 class TagChangeset;
00066 class SearchChangeset;
00067 class CollectionImageChangeset;
00068 class ImageTagChangeset;
00069 class AlbumManagerPriv;
00070 
00071 typedef QList<Album*> AlbumList;
00072 
00090 class AlbumManager : public QObject
00091 {
00092     Q_OBJECT
00093 
00094 public:
00095 
00099     static AlbumManager* instance();
00100 
00110     bool setDatabase(const QString& dbPath, bool priority, const QString& suggestedAlbumRoot = QString());
00111 
00113     static void checkDatabaseDirsAfterFirstRun(const QString& dbPath, const QString& albumPath);
00114 
00120     void changeDatabase(const QString& dbPath);
00121 
00125     void cleanUp();
00126 
00130     bool databaseEqual(const QString& dbPath) const;
00131 
00138     void       startScan();
00139 
00147     void       refresh();
00148 
00152     void       prepareItemCounts();
00154 
00161     AlbumList allPAlbums() const;
00162 
00166     AlbumList allTAlbums() const;
00167 
00171     AlbumList allSAlbums() const;
00172 
00176     AlbumList allDAlbums() const;
00177 
00183     void      setCurrentAlbum(Album *album);
00184  
00188     Album*    currentAlbum() const;
00190 
00201     PAlbum*   findPAlbum(const KUrl& url) const;
00202 
00207     PAlbum*   findPAlbum(int id) const;
00208 
00213     TAlbum*   findTAlbum(int id) const;
00214 
00219     SAlbum*   findSAlbum(int id) const;
00220 
00225     DAlbum*   findDAlbum(int id) const;
00226 
00231     Album*    findAlbum(int gid) const;
00232 
00237     TAlbum*   findTAlbum(const QString& tagPath) const;
00238 
00243     SAlbum*   findSAlbum(const QString& name) const;
00245 
00267     PAlbum* createPAlbum(PAlbum* parent, const QString& name,
00268                          const QString& caption, const QDate& date,
00269                          const QString& category,
00270                          QString& errMsg);
00271 
00276     PAlbum* createPAlbum(const QString& albumRootPath, const QString& name,
00277                          const QString& caption, const QDate& date,
00278                          const QString& category,
00279                          QString& errMsg);
00280 
00285     PAlbum* createPAlbum(const CollectionLocation& location, const QString& name,
00286                          const QString& caption, const QDate& date,
00287                          const QString& category,
00288                          QString& errMsg);
00289 
00299     bool renamePAlbum(PAlbum* album, const QString& newName,
00300                       QString& errMsg);
00301 
00311     bool updatePAlbumIcon(PAlbum *album, qlonglong iconID, QString& errMsg);
00313 
00317     QHash<int, QString> albumTitles() const;
00318 
00335     TAlbum* createTAlbum(TAlbum* parent, const QString& name, 
00336                          const QString& iconkde, QString& errMsg);
00337 
00344     AlbumList findOrCreateTAlbums(const QStringList& tagPaths);
00345 
00356     bool deleteTAlbum(TAlbum* album, QString& errMsg);
00357 
00367     bool renameTAlbum(TAlbum* album, const QString& name, QString& errMsg);
00368 
00378     bool moveTAlbum(TAlbum* album, TAlbum *newParent, QString& errMsg);
00379 
00392     bool updateTAlbumIcon(TAlbum* album, const QString& iconKDE,
00393                           qlonglong iconID, QString& errMsg);
00394 
00399     AlbumList getRecentlyAssignedTags() const;
00400 
00405     QStringList tagPaths(const QList<int>& tagIDs, bool leadingSlash=true) const;
00406 
00411     QStringList tagNames(const QList<int>& tagIDs) const;
00412 
00416     QHash<int, QString> tagPaths(bool leadingSlash=true) const;
00417 
00421     QHash<int, QString> tagNames() const;
00422 
00424 
00440     SAlbum* createSAlbum(const QString& name, DatabaseSearch::Type type, const QString& query);
00441 
00450     bool updateSAlbum(SAlbum* album, const QString& changedQuery,
00451                       const QString& changedName = QString(), DatabaseSearch::Type type = DatabaseSearch::UndefinedType);
00452 
00460     bool deleteSAlbum(SAlbum* album);
00462 
00463 Q_SIGNALS:
00464 
00467     void signalAlbumAboutToBeAdded(Album *album, Album *parent, Album *prev);
00469     void signalAlbumAdded(Album* album);
00471     void signalAlbumAboutToBeDeleted(Album *album);
00473     void signalAlbumDeleted(Album* album);
00476     void signalAlbumHasBeenDeleted(void *);
00477     void signalAlbumsCleared();
00478     void signalAlbumCurrentChanged(Album* album);
00479     void signalAllAlbumsLoaded();
00480     void signalAllDAlbumsLoaded();
00481     void signalAlbumIconChanged(Album* album);
00482     void signalAlbumRenamed(Album* album);
00483     void signalSearchUpdated(SAlbum *album);
00484     void signalTAlbumMoved(TAlbum* album, TAlbum* newParent);
00485     void signalPAlbumsDirty(const QMap<int, int>&);
00486     void signalTAlbumsDirty(const QMap<int, int>&);
00487     void signalDAlbumsDirty(const QMap<YearMonth, int>&);
00488     void signalDatesMapDirty(const QMap<QDateTime, int>&);
00489 
00490 private Q_SLOTS:
00491 
00492     void slotDatesJobResult(KJob* job);
00493     void slotDatesJobData(KIO::Job* job, const QByteArray& data);
00494     void slotAlbumsJobResult(KJob* job);
00495     void slotAlbumsJobData(KIO::Job* job, const QByteArray& data);
00496     void slotTagsJobResult(KJob* job);
00497     void slotTagsJobData(KIO::Job* job, const QByteArray& data);
00498     void slotDirWatchDirty(const QString& path);
00499     void slotKioFileMoved(const QString& urlFrom, const QString& urlTo);
00500     void slotKioFilesDeleted(const QStringList& urls);
00501     void slotKioFilesAdded(const QString& directory);
00502     void slotNotifyFileChange(const QString& directory);
00503     void slotCollectionLocationStatusChanged(const CollectionLocation &, int);
00504     void slotCollectionLocationPropertiesChanged(const CollectionLocation& location);
00505     void slotAlbumChange(const AlbumChangeset& changeset);
00506     void slotTagChange(const TagChangeset& changeset);
00507     void slotSearchChange(const SearchChangeset& changeset);
00508     void slotCollectionImageChange(const CollectionImageChangeset& changeset);
00509     void slotImageTagChange(const ImageTagChangeset& changeset);
00510 
00516     void scanPAlbums();
00517     void updateChangedPAlbums();
00523     void scanTAlbums();
00529     void scanSAlbums();
00534     void scanDAlbums();
00535 
00536     void getAlbumItemsCount();
00537     void getTagItemsCount();
00538 
00539 private:
00540 
00541     friend class AlbumManagerCreator;
00542     AlbumManager();
00543     ~AlbumManager();
00544 
00545     void insertPAlbum(PAlbum *album, PAlbum *parent);
00546     void removePAlbum(PAlbum *album);
00547     void insertTAlbum(TAlbum *album, TAlbum *parent);
00548     void removeTAlbum(TAlbum *album);
00549     void updateAlbumPathHash();
00550 
00551     void notifyAlbumDeletion(Album *album);
00552 
00553     void addAlbumRoot(const CollectionLocation& location);
00554     void removeAlbumRoot(const CollectionLocation& location);
00555 
00556     void handleKioNotification(const KUrl& url);
00557 
00558     template <class T> friend class AlbumPointer;
00559     friend class Album;
00560     static AlbumManager *internalInstance;
00561     void addGuardedPointer(Album *a, Album **pointer);
00562     void removeGuardedPointer(Album *a, Album **pointer);
00563     void changeGuardedPointer(Album *oldAlbum, Album *a, Album **pointer);
00564     void invalidateGuardedPointers(Album *album);
00565 
00566     bool checkNepomukService();
00567 
00568 private:
00569 
00570     AlbumManagerPriv* const d;
00571 };
00572 
00578 template <class T = Album>
00579 
00580 class AlbumPointer
00581 {
00582 public:
00583 
00584     AlbumPointer() : album(0) {}
00585     AlbumPointer(T *a) : album(a)
00586     { AlbumManager::instance()->addGuardedPointer(album, &album); }
00587     AlbumPointer(const AlbumPointer<T>& p) : album(p.album)
00588     { AlbumManager::instance()->addGuardedPointer(album, &album); }
00589 
00590     ~AlbumPointer()
00591     { AlbumManager::instance()->removeGuardedPointer(album, &album); }
00592 
00593     AlbumPointer<T> operator=(T* a)
00594     {
00595         Album *oldAlbum = album;
00596         album = a;
00597         AlbumManager::instance()->changeGuardedPointer(oldAlbum, album, &album);
00598         return *this;
00599     }
00600     AlbumPointer<T> operator=(const AlbumPointer<T>& p)
00601     {
00602         Album *oldAlbum = album;
00603         album = p.album;
00604         AlbumManager::instance()->changeGuardedPointer(oldAlbum, album, &album);
00605         return *this;
00606     }
00607 
00608     T* operator->() const { return static_cast<T*>(const_cast<Album*>(album)); }
00609     T& operator*() const { return *static_cast<T*>(const_cast<Album*>(album)); }
00610     operator T*() const { return static_cast<T*>(const_cast<Album*>(album)); }
00611 
00612 private:
00613 
00614     friend class AlbumManager;
00615     Album *album;
00616 };
00617 
00618 }  // namespace Digikam
00619 
00620 #endif /* ALBUMMANAGER_H */

digikam

Skip menu "digikam"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members

API Reference

Skip menu "API Reference"
  • digikam
Generated for API Reference by doxygen 1.5.9-20090814
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal