calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameselocalizer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 25 May 2010 12:41:10 +0300
branchRCL_3
changeset 30 d68a4b5d5885
parent 0 f979ecb2b13e
child 65 12af337248b1
permissions -rw-r--r--
Revision: 201019 Kit: 2010121

/*
* Copyright (c) 2008 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:   Calendar Lunar Plugin 
 *
*/


#include "calenlunarvietnameselocalizer.h"

#include "calenlunarlocalizer.h"
#include "calenlunarinfo.h"
#include "calenlunarlocalizedinfo.h"
#include "calenextrarowformatter.h"

#include <CalenLunarVietnamesePluginData.rsg>
#include <StringLoader.h>


// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::NewL
// -----------------------------------------------------------------------------
//
CCalenLunarVietnameseLocalizer* CCalenLunarVietnameseLocalizer::NewL()
    {
    CCalenLunarVietnameseLocalizer* self = new (ELeave) CCalenLunarVietnameseLocalizer;
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);
    return self;
    }

// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::~CCalenLunarVietnameseLocalizer
// -----------------------------------------------------------------------------
//
CCalenLunarVietnameseLocalizer::~CCalenLunarVietnameseLocalizer()
    {
    delete iYearOfCat;
    }

// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::CCalenLunarVietnameseLocalizer
// -----------------------------------------------------------------------------
//
CCalenLunarVietnameseLocalizer::CCalenLunarVietnameseLocalizer()
    {
    }

// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::ConstructL
// -----------------------------------------------------------------------------
//
void CCalenLunarVietnameseLocalizer::ConstructL()
    {
    CCalenLunarLocalizer::ConstructL();
    iYearOfCat = StringLoader::LoadL( R_CALE_YEAR_OF_CAT );
    }

// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::LocalizeL
// -----------------------------------------------------------------------------
//
CCalenLunarLocalizedInfo* CCalenLunarVietnameseLocalizer::LocalizeL( TCalenLunarInfo& aInfo )
    {    
    // 1) In Vietnamese variant, two festivals are not used
    // Seventh Night Festival
    // Eight Day of Twelfth Month Festival
    if ( aInfo.iFestival == TCalenLunarInfo::EFestivalSeventhNight || 
         aInfo.iFestival == TCalenLunarInfo::EFestivalTwelfthMonth )         
        {
        aInfo.iFestival = TCalenLunarInfo::ENoFestival;
        }
    
    // Use upper class to localize standard stuff
    CCalenLunarLocalizedInfo* localized = CCalenLunarLocalizer::LocalizeL( aInfo );

    // 2) Replace year of rabbit with year of cat. different logical strings.
    if ( aInfo.AnimalYear() == TCalenLunarInfo::EYearOfRabbit )
        {
        localized->iAnimalYear.Set( *iYearOfCat );
        }
    return localized; 
    }


// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::GetExtraRowTextL
// -----------------------------------------------------------------------------
//
TPtrC CCalenLunarVietnameseLocalizer::GetExtraRowTextL( CCalenLunarLocalizedInfo& aLocInfo, TInt aMaxWidth, 
														const CFont& aFont, TBool aTwoLines)
    {
    // In Vietnamese, we don't show animal year in extra row at all, 
    // because it's in essence same name as lunar years terrestial branch. 
    // It's shown in details dialog though.
    RArray<CCalenLunarLocalizedInfo::TField> fields;
    CleanupClosePushL( fields );
    fields.AppendL( CCalenLunarLocalizedInfo::EFestival );
    fields.AppendL( CCalenLunarLocalizedInfo::ESolarTerm );
    fields.AppendL( CCalenLunarLocalizedInfo::ELunarMonthAndDay );
    //fields.AppendL( CCalenLunarLocalizedInfo::EAnimalYear );
    fields.AppendL( CCalenLunarLocalizedInfo::ELunarYear );
    
    TPtrC text = iRowFormatter->FormatExtraRowInformationL( aLocInfo, fields, aMaxWidth, aFont

                                                            , aTwoLines 

                                                            );
    CleanupStack::PopAndDestroy( &fields );
    return text;
    }

// -----------------------------------------------------------------------------
// CCalenLunarVietnameseLocalizer::LocalizeMonthAndDayL
// -----------------------------------------------------------------------------
//
void CCalenLunarVietnameseLocalizer::LocalizeMonthAndDayL(
    CCalenLunarLocalizedInfo* aLocInfo,
    TCalenLunarInfo& aInfo)
    {
    // Lunar Month and Day
    TInt dateResource = aInfo.iLunarDate.iLeapMonth ? R_CALE_LUNAR_LEAP_DATE : R_CALE_LUNAR_DATE;
    TBuf<10> month;
    TBuf<10> day;
    month.Num( TInt64(aInfo.iLunarDate.iMonth) );
    day.Num( TInt64(aInfo.iLunarDate.iDay ));
    CPtrCArray* monthAndDaySubs = new (ELeave) CPtrCArray(2);
    CleanupStack::PushL( monthAndDaySubs );
    monthAndDaySubs->AppendL(day);
    monthAndDaySubs->AppendL(month);
    
    HBufC* tmp = StringLoader::LoadLC( dateResource, *monthAndDaySubs );
    aLocInfo->iLunarMonthAndDay = *tmp;
    CleanupStack::PopAndDestroy( tmp );
    CleanupStack::PopAndDestroy( monthAndDaySubs );
    }

//EOF