Common/Src/IEImageData.cpp
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
*
*/

// Include files
#include <eikenv.h>
#include "IEImageData.h"
#include "ImagicConsts.h"

EXPORT_C CImageData* CImageData::NewL(TUint32 aImagesReady)
    {
    CImageData* self = new (ELeave) CImageData();
    CleanupStack::PushL(self);
    self->ConstructL(aImagesReady);
    CleanupStack::Pop();
    return self;
    }

EXPORT_C CImageData::~CImageData()
    {
    delete iFileName;
    delete iPath;
    }

CImageData::CImageData() : 
    iFileTime(0),
    iCreatedTime(0)
    {
    }

void CImageData::ConstructL(TUint32 aImagesReady)
    {
    iFileName = NULL;
    iPath = NULL;
    iGridData.iCorrupted = 0;
    iGridData.iRotationAngle = 0;
    iGridData.iTargetRotationAngle = 0;
    iGridData.iX = iGridData.iY = iGridData.iZ = 0;
    iGridData.iScale = 0;
    iGridData.iGlLQ32TextIndex = 0;
    iGridData.iGlLQ128TextIndex = 0;
    iGridData.iGlHQ512TextIndex = 0;
    iGridData.iGlSuperHQTextIndex = 0;
    iImagesReady = aImagesReady|EExifThumb;
    iOrientation = 0;
    iNumberOfFaces = -1;
    iAspectRatio = 1;
    iSize = TSize(0,0);
    iPersonId = -1;
    }

EXPORT_C void CImageData::SetFileNameL(const TFileName & aFileName) 
    {
    TParse parser;
    parser.Set(aFileName, NULL, NULL);
    delete iFileName; iFileName = NULL;
    delete iPath; iPath = NULL;
    iFileName = parser.NameAndExt().AllocL();
    iPath = parser.DriveAndPath().AllocL();
    }

EXPORT_C void CImageData::GetFileName(TFileName & aFullFileName, TThumbSize aSize) const 
    {
    if (iPath == NULL || iFileName == NULL)
        User::Leave(KErrNotReady);
        
    aFullFileName = *iPath;

    switch (aSize) 
        { 
        case EFullSize:
            aFullFileName.Append(*iFileName);
            break;

        case ESize32x32:
            aFullFileName.Append(K32x32TNFilePath);
            aFullFileName.Append(*iFileName);
            aFullFileName.Append(K32x32Ext);
            break;            
            
        case ESize128x128:
            aFullFileName.Append(K128x128TNFilePath);
            aFullFileName.Append(*iFileName);
            aFullFileName.Append(K128x128Ext);            
            break;  
            
        case ESize512x512:
            aFullFileName.Append(K512x512TNFilePath);
            aFullFileName.Append(*iFileName);
            aFullFileName.Append(K512x512Ext);            
            break;  

        default:
            User::Leave(KErrArgument);
        }
    }

EXPORT_C void CImageData::GetPath(TFileName & aPath) const 
    {
    aPath.Copy(iPath ? iPath->Des() : _L(""));
    }

EXPORT_C void CImageData::GetFileName(TFileName & aFileName) const
    {
    aFileName.Copy(iFileName ? iFileName->Des() : _L(""));
    }

EXPORT_C TBool CImageData::IsImageReady(TThumbSize aSize) const 
    {
    return ((iImagesReady & aSize) == aSize);
    }

EXPORT_C void CImageData::SetImageReady(TThumbSize aSize, TBool aReady)  
    {
    if (aReady) 
        iImagesReady |= aSize;
    else
        iImagesReady &= ~aSize;
    }

EXPORT_C const TReal CImageData::GetAspectRatio() const 
    { 
    return iAspectRatio;
    }

TBool CImageData::IsCreatedTimeSet() const 
    {
    // Time is defined if not zero
    return (iCreatedTime.Int64() != 0);
    }

EXPORT_C const TTime & CImageData::GetFileTime() const 
    { 
    return iFileTime; 
    }

EXPORT_C void CImageData::SetFileTime(const TTime & aTime) 
    { 
    iFileTime = aTime;
    }

EXPORT_C const TTime & CImageData::GetCreatedTime() const 
    { 
    // if no created time (usually from EXIF), use file time
    return IsCreatedTimeSet() ? iCreatedTime : iFileTime; 
    }

EXPORT_C void CImageData::SetCreatedTime(const TTime & aTime) 
    { 
    iCreatedTime = aTime; 
    }

EXPORT_C TUint16 CImageData::GetOrientation() const 
    {
    return iOrientation;
    }

EXPORT_C void CImageData::SetOrientation(TUint16 aOrientation) 
    {
    iOrientation = aOrientation;
    }

EXPORT_C void CImageData::SetSize(const TSize aSize)
    {
    iSize = aSize;
    iAspectRatio = iSize.iHeight ? (TReal(iSize.iWidth) / iSize.iHeight) : 0;
    }

EXPORT_C TSize CImageData::GetSize() const
    {
    return iSize;
    }

EXPORT_C TInt CImageData::GetNumberOfFaces() const 
    {
    return iNumberOfFaces;
    }

EXPORT_C void CImageData::SetNumberOfFaces(TInt aValue) 
    {
    iNumberOfFaces = aValue;
    }

EXPORT_C TBool CImageData::IsSamePath(CImageData& aImageData) const
    {
    TFileName path, path2;
    GetPath(path);
    aImageData.GetPath(path2);
    return (path == path2);
    }