EngInc/IEBgpsController.h
author jkauppin
Fri, 15 Oct 2010 10:18:29 +0900
changeset 3 93fff7023be8
permissions -rw-r--r--
Initial version

/*
* 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: Juha Kauppinen, Mika Hokkanen
* 
* Description: Photo Browser
*
*/

#ifndef __IEBGPSCONTROLLER_H__
#define __IEBGPSCONTROLLER_H__

// Include files
#include <e32base.h>
#include <IEImageProcessing.h>
#include <IEImage.h>

#include "IEFileloader.h"
#include "IEEngineUtils.h"


// Forward Class Declaration
class CIEFileLoader;
class CIEEngineUtils;

// Class Declartion
class MIEBgpsControllerObserver
    {
public:
    //virtual void Something() = 0;
    virtual void TNGenerationComplete(TThumbSize aTNRes) = 0;
    virtual void SingleTNGenerationComplete(TInt aIndex, TThumbSize aTNRes) = 0;
    virtual void FaceDetectionComplete() = 0;
    virtual void SingleFaceDetectionComplete() = 0;
    virtual TInt GetSelectedImageIndex() = 0;
    virtual CImageData* GetImageData(TInt aIndex) = 0;
    };

class CIEBgpsController : public CBase, public MIETNObserver
{
public: // First phase constructor and destructor
    static CIEBgpsController* NewL(
            RFs& aFileServer,
            MIEBgpsControllerObserver& aIEBgpsControllerObserver, 
            CIEEngineUtils& aEngineUtils,
            RCriticalSection* aCritical);
    ~CIEBgpsController();
    
private: // Second phase constructor and C++ default constructor
    void ConstructL();
    CIEBgpsController(
            RFs& aFileServer,
            MIEBgpsControllerObserver& aIEBgpsControllerObserver, 
            CIEEngineUtils& aEngineUtils,
            RCriticalSection* aCritical);
    
public: // From MIETNObserver 
    void ThumbnailGenerationCompleted(TInt aErrorCode);
    void ThumbnailGenerationCancelled(TInt aErrorCode);
    void HandleError(TInt aError);
    
public: // New functions
    // TN generation related
    void SetFileLoader(CIEFileLoader* aFileLoader);
    void CreateImageProcessing();
    //void StartTNGeneration(RArray<CImageData*>& aImageArray);
    //void StopTNGeneration(TInt &aValue);
    void GenerateThumbNailL(const TDes &aOrgFile, TThumbSize /*aTNResolution*/);
    void AllFilesAddedToFilenameArrayL();
    TReal GetAspectRatio(TInt aIndex);
    TReal GetFacesAspectRatio(TInt aIndex);
    void GenerateTNForEditedImage(const TFileName aEditedFileName, const TReal aAspectRatio);
    void FilenameArrayCountChanged(const RArray<CImageData*>& aImageDataArray);
    CImageData* GetImageData(const TInt aIndex);
    
    // Face Detection related
    void GetFaceCoordinates(const TFileName a128x128TNFileName, RArray<TRect>& aFaceCoordinateArray);  
    void StartFaceCropping(TInt aIndex, RArray<TFileName>& aFilenames);
    void RemoveFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
    void AddFaceCoordinate(const TFileName a128x128TNFileName, RArray<TRect>& aCordArray);
    void GetSingleFaceCoordinates(TInt aIndex, const TFileName aTNFileName, RArray<TRect>& aFaceCoordinateArray);
    void CancelTNGeneration();
    
private: // Private functions
    void CreateSingleTNL();    
    void DeleteCorruptedThumbNailFile(TFileName aFileName);
    void CheckOptimalFileFor128x128TnCreation(TInt aIndex, TFileName& aFilename);
    void CheckOptimalFileFor32x32TnCreation(TInt aIndex, TFileName& aFilename);
    
    void Generate128x128Thumbnails(TInt aIndex);
    void Generate32x32Thumbnails(TInt aIndex);
    void Generate512x512Thumbnails(TInt aIndex);
    
    //TReal ReadAspectRatioL(TFileName& aFileName);
    //void CheckFileNamesExits(TInt aIndex, TDes& aFilename);
    void StartTNCreatorL();
    TInt FindMissingTN(TThumbSize& aRes);
    
private: // Data members
    RFs& iFileServer;
    MIEBgpsControllerObserver& iIEBgpsControllerObserver;
    CIEImageProcessing* iIEBgpsClient;
    CIEFileLoader*         iFileLoader;
    CIEEngineUtils&        iIEEngineUtils;
    
    RArray<CImageData*> iImageDataArray;
    RArray<CImageData*> iFaceCropImageDataArray;
    
    TBool i128x128TNCreationOn;
    TBool i32x32TNCreationOn;
    TBool i512x512TNCreationOn;
    
    
    TBool iSingleTNGeneration;
    
    TBool iSingleFaceDetectionOn;
    TBool iBackGroundFaceDetectionOn;
    TBool iBackGroundFaceDetectionComplete;
    
    TSize iTNSize;
    
    TInt iImageIndex;
    TInt iStopTN;
    
    TReal iAspectRatio;
    
    TFileName iTNFilename;
    TFileName iJpegFilename;
    TFileName iSavedFileName;    
        
    TThumbSize iLatestCreatedTNSize;
    CImageData* iTmpImageData;
    CImageData* iImageData;
    
    TInt iSingleFBIndex;
    RArray<TRect>* iSingleFBCoordinateArray;
    RArray<TRect> iFBCoordinateArray;
    
    TInt iTnCreationIndex; 
    TBool iAllTNsDone;
    TBool iTnCreationCancelled;
    RCriticalSection*  iCritical;
    CFbsBitmap* i512x512TnBitmap;
};

#endif // __IEBGPSCONTROLLER_H__