Re-enabled max items parsed, because disabling this causes shows to turn up as new multiple times. This again breaks feeds that add new shows at the bottom, so we need to solve this properly.
/*
* Copyright (c) 2007-2010 Sebastian Brannstrom, Lars Persson, EmbedDev AB
*
* 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:
* EmbedDev AB - initial contribution.
*
* Contributors:
* Example code from OcrExample Copyright (c) 2006 Nokia Corporation.
* Description:
*
*/
#ifndef IMAGEHANDLER_H
#define IMAGEHANDLER_H
#include <f32file.h>
#include <ImageConversion.h>
#include <BitmapTransforms.h>
class CPodcastModel;
/**
* Listener interface that can be used to listen for image loading operation
* completion events from CImageHandler.
*
* The class is intended to be implemented by a client class that observes the
* loading operation of image handler. The methods in this class
* are called by the image handler (class CImageHandler) when it loads
* an image.
*
* Reference to implementations of this listener interface can be passed as
* a parameter to the constructor of the image handler (class CImageHandler).
*/
class MImageHandlerCallback
{
public:
/**
* Called by CImageHandler when an image has been loaded.
* @param aError Error code given by the CImageHandler or 0 (zero) if the
* image was loaded successfully.
* @param image handle
* @param reference to podcast model
*/
virtual void ImageOperationCompleteL(TInt aError, TUint aHandle, CPodcastModel& aPodcastModel) = 0;
};
// ============================================================================
class TImageStruct
{
public:
CFbsBitmap* iScaledImage;
TSize iScaledSize;
MImageHandlerCallback* iCallBack;
TFileName iFileName;
TUint iHandle;
};
/**
* CImageHandler
* Image loader and scaler class.
*/
class CImageHandler : public CActive
{
public: // Constructors and destructor
/**
* Factory method that constructs a CImageHandler by using the NewLC method
* and then cleans the cleanup stack.
* @param aFs File server reference that is used to load the image data.
* @param Reference to podcast model
* when an image has been loaded.
* @return pointer to created CImageHandler-object
*/
IMPORT_C static CImageHandler* NewL(RFs& aFs,CPodcastModel& aPodcastModel);
/**
* Factory method that constructs a CImageHandler and leaves it to the
* cleanup stack.
* @param aFs File server reference that is used to load the image data.
* @param Reference to podcast model
* @return pointer to created CImageHandler-object
*/
IMPORT_C static CImageHandler* NewLC(RFs& aFs,CPodcastModel& aPodcastModel);
/**
* Desctructor. Destroys the CImageDecoder used by the image handler.
*/
IMPORT_C virtual ~CImageHandler();
IMPORT_C CFbsBitmap* ScaledBitmap();
public: // New functions
/**
* Loads a the given frame from the given file and scale it to the
* specified size
* @param aFileName Filename wherefrom the bitmap data is loaded.
* @param aSize the target size for the scaling
* @param aSelectedFrame A single frame index in a multi-frame file.
* If not given the first frame is loaded.
*/
IMPORT_C void LoadFileAndScaleL(CFbsBitmap* aScaledBitmap,
const TFileName& aFileName,
const TSize &aSize,
MImageHandlerCallback& aCallback,
TUint aHandle,
TInt aSelectedFrame = 0);
/**
* Returns the current frame information.
* @return Current frame information.
*/
const TFrameInfo& FrameInfo() const;
private:
/**
* Loads a the given frame from the given file.
* @param aFileName Filename wherefrom the bitmap data is loaded.
* @param aSelectedFrame A single frame index in a multi-frame file. If not given the first frame is loaded.
*/
void LoadFileL(const TFileName& aFileName, TInt aSelectedFrame = 0);
/**
* Scales a loaded image
* Scales a loaded image to the target size (given in LoadFileAndScaleL or
* FitToScreenL). The scaled image is stored into iScaledBitmap.
*/
void ScaleL();
private: // Functions from base classes
/**
* CActive::RunL() implementation. Called on image load success/failure.
*/
void RunL();
/**
* CActive::Cancel() implementation. Stops decoding.
*/
void DoCancel();
protected:
/**
* C++ default constructor. Just stores the given parameters to
* corresponding attributes.
* @param aFs File server reference that is used to load the image data.
* @param Reference to podcast model
* when an image has been loaded.
*/
CImageHandler(RFs& aFs, CPodcastModel& aPodcastModel);
/**
* 2nd phase constructor. Adds this object to the active scheduler.
*/
void ConstructL();
private: // Data
/** Image decoder that is used to load the image data from file. */
CImageDecoder *iDecoder;
/** Image scaler that is used to scale the image */
CBitmapScaler *iScaler;
/** Listener that is notified when an image has been loaded. */
MImageHandlerCallback * iCallback;
/** Bitmap (owned by the user of this class) where the loaded image is put */
CFbsBitmap *iBitmap;
/** Bitmap (owned by the user of this class) where the SCALED image is put */
CFbsBitmap *iScaledBitmap;
/** File server session (owned by the user of this class) */
RFs &iFs;
/** Current image frame information. */
TFrameInfo iFrameInfo;
/** target size for scaled image */
TSize iSize;
RArray<TImageStruct> iCallbackQue;
/* Handle passed back to caller */
TUint iHandle;
/** Reference to the podcast model used for callbacks to be able to notify*/
CPodcastModel& iPodcastModel;
};
#endif