/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: VideoListDataModel class definition*
*/
#ifndef __VIDEOLISTDATAMODEL_H__
#define __VIDEOLISTDATAMODEL_H__
// INCLUDES
#include <QObject>
#include <qabstractitemmodel.h>
#include <e32const.h>
#include <mpxitemid.h>
// FORWARD DECLARATIONS
class VideoListDataModelPrivate;
class VideoThumbnailData;
class VideoCollectionClient;
class VideoDeleteWorker;
class VideoListDataModel : public QAbstractItemModel
{
/**
* define to be able to use signals and slots
*/
Q_OBJECT
/**
* disable copy-constructor and assignment operator
*/
Q_DISABLE_COPY(VideoListDataModel)
/**
* private class declaration macro
*/
Q_DECLARE_PRIVATE_D( d_ptr, VideoListDataModel )
public:
/**
* Default constructor
*/
VideoListDataModel(QObject *parent = 0);
/**
* Destructor
*/
~VideoListDataModel();
/**
* Initializes model. Sets model cache proxy and cache's plugin to
* to be this object. Creates videolist and puts it to observe
* collection client. Calls connectSignals to connect signals into
* appropriate slots
*
*
* @return int: 0 if everything ok
*/
int initialize( );
/**
* returns collectionclient object
*
* @return VideoCollectionClient*
*/
VideoCollectionClient* getCollectionClient();
/**
* Method calls video list data to check if there are valid media object
* at the given index. If there is, item id is returned.
*
* @param index index of the item to be opened
* @return TMPXItemId item id or TMPXItemId::Invalid() if no valid item.
*/
TMPXItemId mediaIdAtIndex(int index) const;
/**
* returns model index of id provided
*
* @param id of the item
* @return modelIndex
*/
QModelIndex indexOfId(TMPXItemId id);
/**
* Method calls video list data to check if there are valid media object
* for the given media id. If there is, file path for is returned.
*
* @param mediaId id of the item to be opened
* @return QString file path of the media at index, empty string if not valid item.
*/
QString mediaFilePathForId(TMPXItemId mediaId) const;
/**
* Called by the client when removal of videos are requested.
* Sets video status to be removed to videolistdata and
* eventually calls collection to handle the actual removing.
*
* @param indexlist list of indeces of items requested for deletion
*
* @return bool true if removal startup succeeds
*/
bool removeRows(const QModelIndexList &indexList);
/**
* Checks if the specified item belongs to currently open album.
*
* @param albumId, Album to be checked. If zero, using the currently open album.
* @param itemId, Item to be checked.
* @return true if item belongs to the album.
*/
bool belongsToAlbum(const TMPXItemId &itemId, TMPXItemId albumId = TMPXItemId::InvalidId()) const;
/**
* Set album in use.
*
* @param albumId, Album to set in use.
* @return None.
*/
void setAlbumInUse(TMPXItemId albumId);
/**
* returns album id currently in use
*
* @return TMPXItemId
*/
TMPXItemId albumInUse();
/**
* removes provided items from provided album id and calls
* collectionclient to update mds as well.
*
* @param albumId album from where to remove
* @param items items to remove
*
* @return count of items removed or -1 if failed
*/
int removeItemsFromAlbum(TMPXItemId &albumId, const QList<TMPXItemId> &items);
public: // from QAbstractItemModel
/**
* Returns video item count to the proxy cache
*
* @param parent, parent's index, not used
*
* @return int count of items
*/
int rowCount(const QModelIndex &parent = QModelIndex()) const;
/**
* Returns video item data from index pointed by
* given QModelIndex's row index:
* - video name
* - video detail row
* - video thumbnail
*
* If fetch more is setted for given index tries to append
* additional details into map as well.
*
* @param index, index of the item data is requested
*
* @return QMap<int, QVariant> item data
*/
QMap<int, QVariant> itemData(const QModelIndex &index) const;
/**
* data
*/
QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const;
/**
* columnCount
*/
int columnCount(const QModelIndex & parent = QModelIndex()) const;
/**
* index
*/
QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex()) const;
/**
* Parent
*/
QModelIndex parent(const QModelIndex & index) const;
signals:
/**
* This signal is connected to video list's details ready
* -signal indicating that video details data is fetched
* and provides a QMap of the details'.
*/
void fullVideoDetailsReady(QVariant &);
/**
* This signal is connected to proxy models short details ready
* -signal indicating that video details data fetching started ok
*
* @param id of the video item
*/
void shortDetailsReady(TMPXItemId id);
/**
* Signals that the model is ready, ie. loaded all data from
* myvideocollection.
*/
void modelReady();
/**
* Signal to be emitted when something has happened in the
* model's data container
*/
void modelChanged();
/**
* Signals that album content has been updated.
*/
void albumChanged();
/**
* Signals that item data has changed.
*/
void itemModified(const TMPXItemId &itemId);
private slots:
/**
* signaled by the deleteworker in case some delete startup fails
*
* @param ids list of ids whose deletion fails
*/
void deleteStartingFailsSlot(QList<TMPXItemId> ids);
private:
/**
* Method connects signals emitted from or throught this object
*/
int connectSignals();
/**
* method disconnects signals
*/
void disconnectSignals();
/**
* Generates a detail row string for the video item
* at the given index.
*
* In case item is not found in the provided index, empty
* string is returned.
*
* @param index, index of the item data is requested
*
* @return QString detail string
*/
QString prepareDetailRow(int index) const;
/**
* Formats a detail row string for the video item
* at the given index.
*
* In case item is not found in the provided index, empty
* string is returned.
*
* @param index, index of the item data is requested
* @param duration, duration of the video
*
* @return QString detail string
*/
QString doDetailRow(int index) const;
/**
* Generates a video count string for category or album at given index.
*
* In case item is not found in the provided index, empty
* string is returned.
*
* @param index, index of the item data is requested
* @param index, item id of the item data is requested
*
* @return QString video count string
*/
QString prepareVideoCountString(int index) const;
/**
* Generates a video size string from video item at given index
*
* In case item is not found in the provided index, empty
* string is returned.
*
* @param index, index of the item data is requested
*
* @return QString size string
*/
QString prepareSizeString(int index) const;
/**
* Called when there are status changes in some async operation
*
* @param statusCode status of operation
* @data data from operation
*/
void reportAsyncStatus(int statusCode, QVariant &additional);
private:
/**
* Private implementation Contains the actual video data and
* video array. Own.
*/
VideoListDataModelPrivate* const d_ptr;
/**
* Pointer to collection client. Used to send commands to collection.
* Owned.
*/
VideoCollectionClient *mCollectionClient;
/**
* object for handling item deletion conveniently in small blocks.
* Own
*/
VideoDeleteWorker *mDeleteWorker;
/**
* initialized flag
*/
bool mInitialized;
};
#endif // __VIDEOLISTDATAMODEL_H__
// End of file