engine/collectionframework/thumbnailcreator/inc/glxtnloadthumbnailtask.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Mar 2010 09:28:59 +0200
changeset 23 74c9f037fd5d
permissions -rw-r--r--
Revision: 201007 Kit: 201011

/*
* Copyright (c) 2006-2007 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:   Base class for tasks which load thumbnails
*
*/



#ifndef C_GLXTNLOADTHUMBNAILTASK_H
#define C_GLXTNLOADTHUMBNAILTASK_H

#include "glxtntask.h"
#include "glxtnstd.h"

// Forward declarations
class CGlxtnFileInfo;
class CGlxtnFileUtility;
class CFbsBitmap;
class CImageDecoder;
class TGlxThumbnailRequest;

/**
 * Base class for tasks which load thumbnails.
 *
 * @author Dan Rhodes
 * @ingroup glx_thumbnail_creator
 */
NONSHARABLE_CLASS( CGlxtnLoadThumbnailTask ) : public CGlxtnClientTask
    {
public:
    /**
    * Destructor.
    */
    ~CGlxtnLoadThumbnailTask();

protected:  // From CGlxtnTask
	void DoCancel();

protected:
    /**
    * C++ default constructor.
    * @param aId Task type ID.
    * @param aRequestInfo Parameters for the thumbnail request.
    * @param aFileUtility File utility for use by the task.
    * @param aClient Client initiating the request.
    */
    CGlxtnLoadThumbnailTask( const TGlxtnTaskId& aId,
                            const TGlxThumbnailRequest& aRequestInfo,
                            CGlxtnFileUtility& aFileUtility,
                            MGlxtnThumbnailCreatorClient& aClient );
    /**
    * Symbian 2nd phase constructor.
    * @param aBitmapHandle Handle to bitmap in which to store the thumbnail.
    */
    void ConstructL( TInt aBitmapHandle );

    /**
    * Start asynchronous loading.
    * @param aStatus Request status for the asynchronous operation.
    * @return ETrue if an asynchronous operation has been started.
    */
    TBool LoadThumbnailL( TRequestStatus& aStatus );
    /**
    * Create bitmap from loaded thumbnail data.
    * @param aStatus Request status for the asynchronous operation.
    * @return ETrue if an asynchronous operation has been started.
    */
    TBool HandleLoadedThumbnailL( TRequestStatus& aStatus );
    /**
    * Start asynchronous decoding.  iDecoder should point to a valid decoder.
    * @param aStatus Request status for the asynchronous operation.
    * @param aScaleBitmap If true, scale the loaded bitmap close to
    *       requested size.
    */
    void DecodeThumbnailL( TRequestStatus& aStatus, TBool aScaleBitmap );

protected:
    enum TGeneratorState
        {
        EStateFetchingUri, EStateLoading, EStateDecodingThumbnail,
        EStateDecodingImage, EStateScaling, EStateFiltering
        };

    /** File utility */
    CGlxtnFileUtility& iFileUtility;
	/** Current state for task state machine */
    TGeneratorState iState;
    /** File information for item to thumbnail (owned) */
    CGlxtnFileInfo* iInfo;
    /** Requested thumbnail size */
    TSize iRequestedSize;
    /** Thumbnail image data (owned) */
    HBufC8* iThumbData;
    /** Thumbnail data format */
    TGlxImageDataFormat iFormat;
    /** Decoder to decode the thumbnail data (owned) */
    CImageDecoder* iDecoder;
    /** Bitmap to decode image into (owned) */
    CFbsBitmap* iThumbnail;
    /** DRM allowed flag passed from thumbnail request */
    TBool iDrmAllowed;
    };

#endif // C_GLXTNLOADTHUMBNAILTASK_H