videocollection/hgmyvideos/inc/vcxhgmyvideosmodel.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 25 May 2010 12:44:54 +0300
branchRCL_3
changeset 15 8f0df5c82986
parent 8 ce5ada96ab30
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:      Common model class for component.*
*/




#ifndef VCXHGMYVIDEOSMODEL_H
#define VCXHGMYVIDEOSMODEL_H

// INCLUDE FILES
#include <coemain.h>
#include <vcxmyvideosdefs.h>
#include <thumbnailmanager.h>

#include "CIptvDriveMonitor.h"

// FORWARD DECLARATIONS

class CVcxHgMyVideosCollectionClient;
class CRepository;
class CVcxHgMyVideosThumbnailManager;

// CONSTANTS

const TInt KVcxHgMyVideosCategoryControlGroupId(500);
const TInt KVcxHgMyVideosVideoControlGroupId(600);

// CLASS DECLARATION

/**
 * Common model class for component.
 *
 * @lib vcxhgmyvideos.lib
 */
NONSHARABLE_CLASS( CVcxHgMyVideosModel ) : public CBase,
                                           public MIptvDriveMonitorObserver
    {
    public:
        
        /**
         * Application / view states.
         */
        enum TVcxMyVideosAppState
            {
            EVcxMyVideosAppStateUnknown = 0,
            EVcxMyVideosAppStateCategoryBusy,
            EVcxMyVideosAppStateCategoryIdle,
            EVcxMyVideosAppStateVideoBusy,
            EVcxMyVideosAppStateVideoIdle,
            EVcxMyVideosAppStatePlayer
            };
        
        /**
         * Screen resolutions.
         */
        enum TVcxScreenResolution
            {
            EVcxScreenResolutionUnknown = 0,
            EVcxScreenResolutionQVGA,
            EVcxScreenResolutionQHD,
            EVcxScreenResolutionVGA
            };        
        
    public: // Constructors and destructor

        /**
         * Two-phased constructor.
         *
         * @return New object.
         */
        static CVcxHgMyVideosModel* NewL();

        /**
         * Two-phased constructor.
         *
         * @return New object.
         */
        static CVcxHgMyVideosModel* NewLC();

        /**
         * Destructor.
         */
        virtual ~CVcxHgMyVideosModel();

    public:
        
        /**
         * Returns true if device has touch support.
         * 
         * @return ETrue if device supports touch.
         */
        TBool TouchSupport();
        
        /**
         * Returns current screen resolution (QVGA,QHD,VGA).
         * 
         * @param aCoeEnv Pointer to Coe Env.
         * @return Screen resolution.
         */
        TVcxScreenResolution GetScreenResolution( CCoeEnv* aCoeEnv );

        /**
         * Returns MPX Collection Client.
         *
         * @return Reference to Collection client.
         */
        CVcxHgMyVideosCollectionClient& CollectionClient();

        /**
         * Returns reference to component's File Server session.
         * 
         * @return Reference to File Server session.
         */
        RFs& FileServerSessionL();
        
        /**
         * Returns reference to component's drive monitor.
         * 
         * @return Reference to drive monitor.
         */
        CIptvDriveMonitor& DriveMonitorL();

        /**
         * Sets application state.
         *
         * @param aAppState New application state.
         */
        void SetAppState( TVcxMyVideosAppState aAppState );
        
        /**
         * Gets application state.
         *
         * @return Application state.
         */
        TVcxMyVideosAppState AppState();

        /**
         * Returns previous application state.
         *
         * @return Previous application state.
         */
        TVcxMyVideosAppState PreviousAppState();

        /**
         * Sets video list sort order (to CenRep).
         * 
         * @param aSortOrder New video list sort order.
         */
        void SetVideolistSortOrderL( TVcxMyVideosSortingOrder aSortOrder );
        
        /**
         * Gets the last watched video id from CenRep.
         * 
         * @param aId Video's mpx id (iId1).
         * @return System wide error code
         */
        TInt GetLastWatchedIdL( TInt& aId );

        /**
         * Gets the last watched video name from CenRep.
         * 
         * @param aPath On return Video's path.
         * @return System wide error code
         */
        TInt GetLastWatchedNameL( TDes& aName );
        
        /**
         * Gets the last watched video path from CenRep.
         * 
         * @param aPath On return Video's path.
         * @return System wide error code
         */
        TInt GetLastWatchedPathL( TDes& aPath );
        
        /**
         * Gets the last watched video indicator from CenRep.
         * 
         * @param aValue On return Video's indicator value.
         * @return System wide error code
         */
        TInt GetLastWatchedIndicatorL( TInt& aValue );
        
        /**
         * Gets video list sort order (from CenRep).
         * 
         * @return Video list sort order.
         */
        TVcxMyVideosSortingOrder VideolistSortOrderL();

        /**
         * Gets the My Videos customization integer from CenRep.
         * 
         * @param aKey   CenRep key for the value to be fetched.
         * @param aValue On return, fetched value.
         * @return System wide error code
         */
        TInt GetMyVideosCustomizationInt( const TInt& aKey, TInt& aValue );

        /**
         * Gets the My Videos customization string from CenRep.
         * 
         * @param aKey   CenRep key for the value to be fetched.
         * @param aValue On return, fetched value.
         * @return System wide error code
         */
        TInt GetMyVideosCustomizationString( const TInt& aKey, TDes& aValue );
        /**
         * Returns reference to Thumbnail Manager.
         *
         * @return Reference to Thumbnail Manager.
         */
        CVcxHgMyVideosThumbnailManager& ThumbnailManager() const;

    public: // from MIptvDriveMonitorObserver
        
        /**
        * Empty handler for drive monitor events.
        *
        * @aEvent  The Event.
        */
        void HandleDriveMonitorEvent( TIptvDriveMonitorEvent& aEvent );
        
    private: // Constructors

        /**
         * Default C++ constructor. 
         */
        CVcxHgMyVideosModel();

        /**
         * Symbian 2nd phase constructor.
         */
        void ConstructL();
        
        /**
         * Initializes MyVideos customization CenRep session.
         */
        TInt InitMyVideosCenRepL();
        
    private:

        /**
         * Client class for My Videos MPX Collection.
         * Own.
         */
        CVcxHgMyVideosCollectionClient* iCollection;

        /**
         * Application state.
         */
        TVcxMyVideosAppState iAppState;
        
        /**
         * Previous application state.
         */
        TVcxMyVideosAppState iPreviousAppState;        
        
        /**
         * Internal flag for storing touch support information.
         */
        TBool iTouchSupport;
        
        /**
         * Component's File Server session.
         * Own.
         */
        RFs iFsSession;
        
        /**
         * Component's drive monitor.
         * Own.
         */
        CIptvDriveMonitor* iDriveMonitor;
        
        /**
         * Session to MPX Collection CenRep.
         * Own.
         */
        CRepository* iCollectionCenRep;
        
        /**
         * Session to My Videos customization CenRep.
         * Own.
         */
        CRepository* iMyVideosCenRep;
    
        /**
         * Video list sort order.
         */
        TVcxMyVideosSortingOrder iSortOrder;

		/**
         * Thumbnail Manager.
         * Own.
         */
        CVcxHgMyVideosThumbnailManager* iTnManager;
    };

#endif // VCXHGMYVIDEOSMODEL_H