calendarui/views/src/calennotedatautil.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calennotedatautil.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2002 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:  Helper tool to get alarm and repeat data of Calendar note.
+ *
+*/
+
+
+//debug
+#include "calendarui_debug.h"
+
+//  INCLUDE FILES
+#include "CalenNoteDataUtil.h"
+#include "calendar.hrh"
+
+#include <calencommonui.rsg>
+
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <PathInfo.h>
+#include <aknlists.h>
+#include <BAUTILS.h>
+#include <CalRRule.h>
+#include <CalAlarm.h>
+#include <CalEntry.h>
+#include <data_caging_path_literals.hrh>
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CalenNoteDataUtil::RepeatIndexL
+// Return index of repeat type
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TCalenRepeatIndex CalenNoteDataUtil::RepeatIndexL(const CCalEntry& aEntry)
+    {
+    TRACE_ENTRY_POINT;
+
+    TCalenRepeatIndex repeatIndex( ERepeatNotRepeated );
+
+    TCalRRule rrule;
+
+    if( aEntry.GetRRuleL( rrule) )
+        {
+        TCalRRule::TType type( rrule.Type() );
+        TInt repeatInterval( rrule.Interval() );
+
+        // If repeat type of current note is not supported in Calendar,
+        // default repeat value is "Other".
+        repeatIndex = ERepeatOther;
+
+        switch( type )
+            {
+            case TCalRRule::EDaily:
+                {
+                switch (repeatInterval)
+                    {
+                    case 1:   repeatIndex = ERepeatDaily;     break;
+                    case 7:   repeatIndex = ERepeatWeekly;    break;
+                    case 14:  repeatIndex = ERepeatBiWeekly;  break;
+                    default:                                  break;
+                    }
+                break;
+                }
+
+            case TCalRRule::EWeekly:
+                {
+                RArray<TDay> weekDays(7);
+                rrule.GetByDayL( weekDays );
+
+                if( weekDays.Count() == 1 ) // FIXME: AL - is this necessary?
+                    {
+                    switch( repeatInterval )
+                        {
+                        case 1:   repeatIndex = ERepeatWeekly;    break;
+                        case 2:   repeatIndex = ERepeatBiWeekly;  break;
+                        default:                                  break;
+                        }
+                    }
+
+                weekDays.Close();
+
+                break;
+                }
+
+            case TCalRRule::EMonthly:
+                {
+                RArray<TInt> monthDays(31);
+                rrule.GetByMonthDayL ( monthDays );
+
+                if( monthDays.Count() == 1) // FIXME: AL - is this necessary?
+                    {
+                    switch( repeatInterval )
+                        {
+                        case 1:  repeatIndex = ERepeatMonthly;  break;
+                        // If interval of repeat is 12 months, 
+                        // every year is shown in Note Editor, 
+                        // because it means yearly repeat.
+                        case 12:  repeatIndex = ERepeatYearly;   break;
+                        default:                                 break;
+                        }
+                    }
+
+                monthDays.Close();
+
+                break;
+                }
+            case TCalRRule::EYearly:
+                {
+                if( repeatInterval == 1 )
+                    {
+                    repeatIndex = ERepeatYearly;
+                    }
+                break;
+                }
+
+            default:
+                {
+                // If repeat type of current note is not supported in Calendar,
+                // default repeat value is "Other".
+                repeatIndex = ERepeatOther;
+                break;
+                }
+            }
+        }
+    
+    TRACE_EXIT_POINT;
+    return repeatIndex;
+    }
+// ---------------------------------------------------------
+// CalenNoteDataUtil::GetAlarmDateTimeL
+// If note has alarm, alarm time is set to aAlarmDateTime
+// and return ETrue. aAlarmDateTime has dd/mm/yy, hh:mm part,
+// E.g. 15/Sep/2002, 13:00.
+// If note has no alarm, aAlarmDateTime is not changed
+// and return EFalse.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CalenNoteDataUtil::GetAlarmDateTimeL(const CCalEntry& aEntry, TTime& aAlarmDateTime)
+    {
+    TRACE_ENTRY_POINT;
+    
+    TBool ret( EFalse );
+    // FIXME: leaving!
+    CCalAlarm* alarm = aEntry.AlarmL();
+
+    if( alarm )
+        {
+        CleanupStack::PushL( alarm );
+        ret = ETrue;
+
+        switch( aEntry.EntryTypeL() )
+            {
+            case CCalEntry::ETodo:
+                aAlarmDateTime = aEntry.EndTimeL().TimeLocalL();
+                break;
+
+            case CCalEntry::EAppt:
+            case CCalEntry::EEvent:
+            case CCalEntry::EAnniv:
+            default:
+                aAlarmDateTime = aEntry.StartTimeL().TimeLocalL();
+                break;
+            }
+        aAlarmDateTime -= alarm->TimeOffset();
+
+        CleanupStack::PopAndDestroy( alarm );
+        }
+
+    TRACE_EXIT_POINT;
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CalenNoteDataUtil::ShowRepeatTypeQueryL
+// Shows a query asking the user to choose the repeat type.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+TBool CalenNoteDataUtil::ShowRepeatTypeQueryL( CalCommon::TRecurrenceRange& aAnswer,
+                                               const TRepeatQueryType aType )
+    {
+    TRACE_ENTRY_POINT;
+
+    CAknSinglePopupMenuStyleListBox* list = new( ELeave )CAknSinglePopupMenuStyleListBox;
+    CleanupStack::PushL( list );
+    CAknPopupList* popupList = CAknPopupList::NewL( list, R_AVKON_SOFTKEYS_OK_CANCEL );
+    CleanupStack::PushL( popupList );
+
+    list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
+    list->CreateScrollBarFrameL(ETrue);
+    list->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    CEikonEnv* eikEnv = CEikonEnv::Static();
+    CDesCArrayFlat* items = eikEnv->ReadDesCArrayResourceL( aType == EEdit ?
+                                                    R_CALEN_COMMONUI_REPEATNOTE_EDIT_CHOICELIST :
+                                                    R_CALEN_COMMONUI_REPEATNOTE_CHOICELIST );
+    CTextListBoxModel* model = list->Model();
+    model->SetItemTextArray( items );
+
+    TInt resID(0);
+
+    switch( aType )
+        {
+        case ESave:
+            resID = R_CALEN_COMMONUI_QTN_CALE_LQ_SAVE_CHANG_REPEATED;
+            break;
+        case EEdit:
+            resID = R_CALEN_COMMONUI_QTN_CALE_LQ_EDIT_RECURRING;
+            break;
+        default:
+            User::Leave( KErrArgument );
+            break;
+        }
+
+    HBufC* title = StringLoader::LoadLC( resID, eikEnv );
+    popupList->SetTitleL( *title );
+    CleanupStack::PopAndDestroy( title );
+
+    TBool ret( ETrue );
+
+    if( popupList->ExecuteLD() )
+        {
+        const TInt selected( list->CurrentItemIndex() );
+
+        switch( selected )
+            {
+            case ECalenRepeatThis:
+                aAnswer = CalCommon::EThisOnly;
+                break;
+            case ECalenRepeatThisFuture:
+                aAnswer = CalCommon::EThisAndFuture;
+                break;
+            case ECalenRepeatThisPast:
+                aAnswer = CalCommon::EThisAndPrior;
+                break;
+            case ECalenRepeatAll:
+                aAnswer = CalCommon::EThisAndAll;
+                break;
+            default:
+                ASSERT( EFalse );
+                break;
+            }
+        }
+    else
+        {
+        ret = EFalse;
+        }
+
+    CleanupStack::Pop( popupList );
+    CleanupStack::PopAndDestroy( list );
+
+    TRACE_EXIT_POINT;
+    return ret;
+    }
+
+// End of file