calendarui/editors/src/KoreanLunarDateUtil.cpp
branchRCL_3
changeset 86 ed599363c2d7
parent 78 356f28cd5ca0
child 87 6d3f83773253
--- a/calendarui/editors/src/KoreanLunarDateUtil.cpp	Wed Sep 15 12:11:35 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-/*
-* Copyright (c) 2010 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: 
-*
-*/
-
-
-#include "KoreanLunarDateUtil.h"
-// debug
-#include "calendarui_debug.h"
-
-const TInt KMaxLunarYear = 60;
-
-/**
- * Public methods for constructing a CKoreanLunarDateUtil object.
- */
-CKoreanLunarDateUtil* CKoreanLunarDateUtil::NewL(MCalenServices* aServices)
-    {
-    TRACE_ENTRY_POINT;
-    CKoreanLunarDateUtil* self = CKoreanLunarDateUtil::NewLC(aServices);
-    CleanupStack::Pop( self );
-    
-    TRACE_EXIT_POINT;
-    return self;
-    }
-
-CKoreanLunarDateUtil* CKoreanLunarDateUtil::NewLC(MCalenServices* aServices)
-    {
-    TRACE_ENTRY_POINT;
-    CKoreanLunarDateUtil* self = new (ELeave) CKoreanLunarDateUtil(aServices);
-    CleanupStack::PushL( self );
-    self->ConstructL();
-    return self;
-    }
-
-
-CKoreanLunarDateUtil::CKoreanLunarDateUtil(MCalenServices* aServices):iServices(aServices)
-	{
-    TRACE_ENTRY_POINT;
-	}
-
-
-void CKoreanLunarDateUtil::ConstructL()
-	{
-    TRACE_ENTRY_POINT;
-    iConverter = CKoreanCalConv::NewL();
-	}
-
-CKoreanLunarDateUtil::~CKoreanLunarDateUtil()
-    {
-    TRACE_ENTRY_POINT;
-    delete iConverter;
-    }
-
-/**
- * Method for getting nearest gregorian date from
- * lunar day and month and gregorian reference.
- */
-TDateTime CKoreanLunarDateUtil::GetNearestGregorianDateL( const TInt aMonth,
-                                                          const TInt aDay,
-                                                          const TBool aLeap,
-                                                          const TDateTime& aReference ) const
-	{
-    TRACE_ENTRY_POINT;
-    TKoreanDate refLunarDate;
-    TKoreanDate lunarDate;
-    TDateTime resDateTime;
-    TInt err = KErrNone;
-
-    iConverter->DateTimeToKoreanL( aReference, refLunarDate );
-    /* Try to convert with the year and cycle we got with the reference */
-    lunarDate.iCycle = refLunarDate.iCycle;
-    lunarDate.iYear = refLunarDate.iYear;
-    lunarDate.iMonth = aMonth;
-    lunarDate.iDay = aDay;
-    lunarDate.iLeapMonth = aLeap;
-    TRAP( err, iConverter->KoreanToDateTimeL( lunarDate, resDateTime ) );
-    if( err == KErrArgument )
-        { /* Date is invalid for this year (day 30 on a month
-             that has only 29 days on selected year or a leap month
-             not in this year), try to find suitable */
-        TKoreanDate lowerLimit;
-        TKoreanDate upperLimit;
-        iConverter->DateRange( lowerLimit, upperLimit );
-        while( 1 )
-            { /* Search by increasing year */
-            if( lunarDate.iYear < KMaxLunarYear )
-               {
-                lunarDate.iYear++;
-                }
-            else
-                {
-                lunarDate.iYear = 1;
-                lunarDate.iCycle++;
-                }
-            if( (lunarDate.iCycle == upperLimit.iCycle &&
-                 lunarDate.iYear > upperLimit.iYear)  ||
-                lunarDate.iCycle > upperLimit.iCycle )
-                { /* Could not find, just break */
-                break;
-                }
-            TRAP( err, iConverter->KoreanToDateTimeL( lunarDate, resDateTime ) );
-            if( err == KErrNone )
-                { /* Found suitable */
-                break;
-                }
-            }
-        if( err != KErrNone )
-            { /* Suitable not found by increasing,
-                 reset values and search by decreasing year */
-            lunarDate.iCycle = refLunarDate.iCycle;
-            lunarDate.iYear = refLunarDate.iYear;
-            lunarDate.iMonth = aMonth;
-            lunarDate.iDay = aDay;
-            while( 1 )
-                { /* Search by decreasing year */
-                if( lunarDate.iYear > 1 )
-                   {
-                    lunarDate.iYear--;
-                    }
-                else
-                    {
-                    if( lunarDate.iCycle == 0 )
-                        { /* Run out of cycles, break with error */
-                        break;
-                        }
-                    lunarDate.iYear = KMaxLunarYear;
-                    lunarDate.iCycle--;
-                    }
-                if( (lunarDate.iCycle == lowerLimit.iCycle &&
-                     lunarDate.iYear < lowerLimit.iYear)  ||
-                    lunarDate.iCycle < lowerLimit.iCycle )
-                    { /* Could not find, just break */
-                    break;
-                    }
-                TRAP( err, iConverter->KoreanToDateTimeL( lunarDate, resDateTime ) );
-                if( err == KErrNone )
-                    { /* Found suitable */
-                    break;
-                    }
-                }
-            }
-        }
-    /* If still not found, leave with error */
-    User::LeaveIfError( err );
-    
-    TRACE_ENTRY_POINT;
-    /* Otherwise return the result */
-    return resDateTime;
-	}
-
-/**
-* Method for getting lunar yearly repeats in gregorian dates.
-*/
-void CKoreanLunarDateUtil::GetLunarYearlyRepeatsL( RArray<TCalTime>& aRDates,
-                                                   const TDateTime& aEntryDate,
-                                                   const TBool aFloating ) const
-    {
-    TInt err = KErrNone;
-    TCalTime repeatDate;
-    TDateTime resDateTime;
-    TDateTime lowerLimit;
-    TKoreanDate upperKoreanLimit;
-    TKoreanDate lunarStartDate;
-    
-    /* Get the upper limit for dates in Korean lunar format */
-    iConverter->DateRange( lunarStartDate, upperKoreanLimit );
-    
-    /* Get the entry date in Korean lunar format */
-    iConverter->DateTimeToKoreanL( aEntryDate, lunarStartDate );
-    
-    /* Get the lower limit for dates in Gregorian format */
-    iConverter->DateRange( lowerLimit, resDateTime );
-    
-    /* Get the first occurrence of the event after
-    the lower limit in Korean lunar format */
-    iConverter->DateTimeToKoreanL(  GetNearestGregorianDateL( lunarStartDate.iMonth,
-                                  lunarStartDate.iDay,
-                                  lunarStartDate.iLeapMonth,
-                                  lowerLimit ),
-                                  lunarStartDate );
-    
-    while( 1 )
-        {
-        TRAP( err, iConverter->KoreanToDateTimeL( lunarStartDate, resDateTime ) );
-        if( err == KErrNone )
-            { /* Date exists in current year */
-            if( aFloating )
-                {
-                repeatDate.SetTimeLocalFloatingL( resDateTime );
-                }
-            else
-                {
-                repeatDate.SetTimeLocalL( resDateTime );
-                }
-            aRDates.AppendL( repeatDate );
-            }
-        /* Increase to next lunar year */
-        if( lunarStartDate.iYear < KMaxLunarYear )
-            {
-            lunarStartDate.iYear++;
-            }
-        else
-            {
-            lunarStartDate.iYear = 1;
-            lunarStartDate.iCycle++;
-            }
-        if( (lunarStartDate.iCycle == upperKoreanLimit.iCycle &&
-                lunarStartDate.iYear > upperKoreanLimit.iYear)  ||
-                lunarStartDate.iCycle > upperKoreanLimit.iCycle )
-            { /* Reached the limit, break */
-            break;
-            }
-        }
-    }
-    
-// End of file