imagehandlingutilities/thumbnailmanager/inc/thumbnailprovider.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:18:05 +0200
changeset 0 2014ca87e772
permissions -rw-r--r--
Revision: 201004

/*
* 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 thumbnail provider plug-ins
 *
*/


#ifndef THUMBNAILPROVIDER_H
#define THUMBNAILPROVIDER_H

#include <ecom/ecom.h>
#include <apmstd.h>

#include "thumbnailmanager.h" // TThumbnailFlags
#include "thumbnaillog.h"

/**
 *  Thumbnail provider observer class
 *
 *  @since S60 v5.0
 */
class MThumbnailProviderObserver
    {
public:
    /**
     * Thumbnail provider observer callback to notify the server when
     * thumbnail has been generated.
     *
     * @since S60 5.0
     * @param aError Error code
     * @param aBitmap Thumbnail bitmap. The observer implementation will
     *                assume ownership of the bitmap.
     * @param aOriginalSize Original size of the object in pixels.
     * @param aEXIF ETrue if thumbnail origin is EXIF.
     */
    virtual void ThumbnailProviderReady( TInt aError, CFbsBitmap* aBitmap,
        const TSize& aOriginalSize, const TBool aEXIF, const TBool aPortrait  ) = 0;
};


/**
 *  Base class for thumbnail provider plug-ins.
 *
 *  @since S60 v5.0
 */
class CThumbnailProvider: public CBase
    {
public:
    /**
     * Create a provider instance. The instance is identified
     * by the implementation UID.
     */
    static CThumbnailProvider* NewL( TUid aUid );

    /**
     * Get the UID of this provider.
     *
     * @since S60 5.0
     * @return Provider implementation UID
     */
    TUid Uid();

    /**
     * Set the observer to receive notification
     * about thumbnail generation completion.
     *
     * @since S60 5.0
     * @param aObserver Reference to the observing object. Ownership not
     *                  transferred.
     */
    void SetObserver( MThumbnailProviderObserver& aObserver );

    /**
     * Set the target size for uncropped thumbnails. The actual thumbnail
     * at least this wide or high, depending on which is the limiting
     * factor.
     *
     * @since S60 5.0
     * @param aSize Target size in pixels for uncropped thumbnails.
     */
    void SetTargetSize( const TSize& aSize );

    /**
     * Set the target size for cropped thumbnails. The actual thumbnail
     * at least this large and it will include the whole thumbnail,
     * not just the cropped portion.
     *
     * @since S60 5.0
     * @param aCroppedSize Target size in pixels for cropped thumbnails.
     */
    void SetCroppedTargetSize( const TSize& aCroppedSize );

    /**
     * Reset thumbnail parameters to defaults.
     */
    void Reset();

    /**
     * Get thumbnail bitmap. Must be implemented by provider plug-ins.
     *
     * @since S60 5.0
     * @param aFs File server session that can be used
     * @param aFile File handle to the object file
     * @param aMimeType MIME-type of the object file.
     * @param aFlags Thumbnail generation flags
     * @param aDisplayMode Display mode
     */
    virtual void GetThumbnailL( RFs& aFs, RFile64& aFile, const TDataType&
        aMimeType, const CThumbnailManager::TThumbnailFlags aFlags, const
        TDisplayMode aDisplayMode, const CThumbnailManager::TThumbnailQualityPreference aQualityPreference ) = 0;
  
    /**
     * Get thumbnail bitmap. Must be implemented by provider plug-ins.
     *
     * @since S60 5.0
     * @param aFs File server session that can be used
     * @param aBuffer object buffer
     * @param aMimeType MIME-type of the object file.
     * @param aFlags Thumbnail generation flags
     * @param aDisplayMode Display mode
     */    
    virtual void GetThumbnailL( RFs& aFs, TDesC8* aBuffer, const
        TDataType& aMimeType, const CThumbnailManager::TThumbnailFlags aFlags,
        const TDisplayMode aDisplayMode, const CThumbnailManager::TThumbnailQualityPreference aQualityPreference  ) = 0;  
    
    /**
     * Get thumbnail bitmap. Must be implemented by provider plug-ins.
     *
     * @since S60 5.0
     * @param aFs File server session that can be used
     * @param aBuffer object buffer
     */
    
    virtual void GetThumbnailL( RFs& aFs, TDesC8& aBuffer) = 0;

    /**
     * Cancel a previous thumbnail request, if any.
     *
     * @since S60 5.0
     */
    virtual void CancelGetThumbnail() = 0;

    virtual ~CThumbnailProvider(){}

protected:
    /**
     * Get the actual target size for the thumbnail.
     * This is the maximum of the non-cropped and cropped
     * target sizes.
     *
     * @since S60 5.0
     */
    inline void ResolveSize();

    /**
     * Calculate the scaled down size for the thumbnail.
     * Aspect ratio is always preserved. If cropping is disabled
     * the resulting size at most as wide or tall as requested.
     * If cropping is enabled, the result is at least as wide
     * and as tall as requested (unless original size is smaller
     * than requested).
     *
     * @since S60 5.0
     * @param aOriginalSize Original size in pixels
     * @param aTargetSize Target size in pixels
     * @param aCrop Enable cropping
     * @return Result size
     */
    inline TSize FitToSize( const TSize& aOriginalSize, const TSize&
        aTargetSize, TBool aCrop );

protected:
    /**
     * Provider observer. Implemented by thumbnail generation task.
     * Not own.
     */
    MThumbnailProviderObserver* iObserver;

    /**
     * Thumbnail generation flags.
     */
    CThumbnailManager::TThumbnailFlags iFlags;

    /**
     * Thumbnail generation flags.
     */
    CThumbnailManager::TThumbnailQualityPreference iQualityPreference;

    /**
     * Size of the original object.
     */
    TSize iOriginalSize;

    /**
     * Target size for uncropped thumbnails.
     */
    TSize iTargetSize;

    /**
     * Target size for cropped thumbnails.
     */
    TSize iCroppedTargetSize;

    /**
     * Display mode for thumbnail bitmap
     */
    TDisplayMode iDisplayMode;

    /**
     * ECOM plug-in destructor key.
     */
    TUid iDtor_ID_Key;

    /**
     * UID of this implementation.
     */
    TUid iUid;
};


#endif // THUMBNAILPROVIDER_H