calendarui/commonutils/src/calenviewutils.cpp
branchRCL_3
changeset 66 bd7edf625bdd
child 67 1539a383d7b6
equal deleted inserted replaced
65:12af337248b1 66:bd7edf625bdd
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Implementation of View Utils
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include <calenviewutils.h>
       
    20 #include <calendateutils.h>
       
    21 #include <Calendar.rsg>
       
    22 #include <AknUtils.h>
       
    23 #include <calentry.h>
       
    24 #include <calalarm.h>
       
    25 #include <calenagendautils.h>
       
    26 #include <CalenInterimUtils2.h>
       
    27 #include <StringLoader.h>
       
    28 #include <aknnotewrappers.h>
       
    29 #include <Calendar.rsg>
       
    30 #include <AknQueryDialog.h>
       
    31 #include <calinstance.h>
       
    32 #include <calsession.h>
       
    33 #include <akntoolbar.h>
       
    34 #include <aknappui.h>
       
    35 
       
    36 #include "calendarui_debug.h"           // Debug.
       
    37 #include "calendar.hrh"
       
    38 
       
    39 _LIT( KWesternSummaryMarker, "\x200E" );
       
    40 _LIT( KArabicSummaryMarker , "\x200F" );
       
    41 /* KReplaceWhitespaceChars contains some characters that should be replaced by
       
    42  * space in Calendar popup, day view etc. Characters are:
       
    43  * \x0009 horizontal tab
       
    44  * \x000a new line
       
    45  * \x000b line tabulation (vertical
       
    46  * \x000c form feed
       
    47  * \x000d carriage return
       
    48  * \x2028 line separator
       
    49  * \x2029 paragraph separator
       
    50  */
       
    51 _LIT( KReplaceWhitespaceChars, "\x0009\x000A\x000B\x000C\x000D\x2028\x2029" );
       
    52 _LIT( KWesternSummaryLocationSeparator, ", " );
       
    53 _LIT( KArabicSummaryLocationSeparator, " \x060c" );
       
    54 
       
    55 // ----------------------------------------------------------------------------
       
    56 // CalenViewUtils::ShowDateErrorNoteL
       
    57 // Show Error note of out of range of date
       
    58 // (other items were commented in a header).
       
    59 // ----------------------------------------------------------------------------
       
    60 //
       
    61 EXPORT_C void CalenViewUtils::ShowDateOutOfRangeErrorNoteL()
       
    62     {
       
    63     TRACE_ENTRY_POINT;
       
    64 
       
    65     HBufC* buf = StringLoader::LoadLC( R_QTN_CALE_INFO_YEAR_LIMIT );
       
    66     TPtr ptr = buf->Des();
       
    67     // Message contains year numbers, which have to be converted
       
    68     AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
       
    69     CAknInformationNote* dialog = new( ELeave )CAknInformationNote();
       
    70     dialog->ExecuteLD( *buf );
       
    71     CleanupStack::PopAndDestroy( buf );
       
    72 
       
    73     TRACE_EXIT_POINT;
       
    74     }
       
    75 
       
    76 // ----------------------------------------------------------------------------
       
    77 // CalenViewUtils::GetSummaryLocationTextL
       
    78 // Fills a string with a more displayable text representation of the summary
       
    79 // and location fields from an entry. The number of characters to fill in the
       
    80 // target string must be specified. The function replaces problem characters
       
    81 // with spaces and trims whitespace. See KReplaceWhitespaceChars for replaced
       
    82 // characters.
       
    83 // ----------------------------------------------------------------------------
       
    84 //
       
    85 EXPORT_C void CalenViewUtils::GetSummaryLocationTextL( 
       
    86         CCalEntry& aEntry, 
       
    87         TDes& aTarget, 
       
    88         TInt aMaxLength )
       
    89     {
       
    90     TRACE_ENTRY_POINT;
       
    91 
       
    92     // Every Copy and Append has to ensure that MaxLength is not exceed.
       
    93     const TInt max = aMaxLength;
       
    94     TInt freeSpace = max - 2; // freeSpace is recalculated after each update
       
    95 
       
    96     const TDesC& summary = aEntry.SummaryL();    
       
    97     //const TDesC& location = aEntry.LocationL();    
       
    98     const TDesC& westernSeparator = KWesternSummaryLocationSeparator;
       
    99     const TDesC& arabicSeparator =  KArabicSummaryLocationSeparator;
       
   100     
       
   101     //location string is not available for anniversary and todo
       
   102     HBufC16* text = HBufC16::NewLC( max );    
       
   103     TPtrC location = text->Des();
       
   104     if ( CCalEntry::ETodo != aEntry.EntryTypeL())
       
   105         {
       
   106             location.Set(aEntry.LocationL());
       
   107         }
       
   108     
       
   109 
       
   110     if(AknLayoutUtils::LayoutMirrored())
       
   111         {
       
   112         aTarget.Append(KArabicSummaryMarker);
       
   113         }
       
   114     else
       
   115         {
       
   116         aTarget.Append(KWesternSummaryMarker);
       
   117         }
       
   118 
       
   119 
       
   120     // "Summary"
       
   121     aTarget.Append( summary.Left( freeSpace ) );
       
   122     freeSpace = max - aTarget.Length();
       
   123 
       
   124     // If both summary and location exists, add separator ", " in between.
       
   125     if ( summary.Length() > 0 && location.Length() > 0 && freeSpace > 0 )
       
   126         {
       
   127         if ( User::Language() == ELangArabic )
       
   128             {
       
   129             aTarget.Append( arabicSeparator.Left( freeSpace ) );
       
   130             }
       
   131         else
       
   132             {
       
   133             aTarget.Append( westernSeparator.Left( freeSpace ) );
       
   134             }
       
   135         freeSpace = max - aTarget.Length();
       
   136         }
       
   137 
       
   138     // "Location". It's added even if summary is empty
       
   139     if( freeSpace > 0 )
       
   140 		    {
       
   141 		    aTarget.Append( location.Left( freeSpace ) );
       
   142 		    }
       
   143 
       
   144     freeSpace = max - aTarget.Length();
       
   145 
       
   146     AknTextUtils::ReplaceCharacters(aTarget, KReplaceWhitespaceChars, TChar(' '));
       
   147     freeSpace = max - aTarget.Length();
       
   148 
       
   149     // Take away extra whitespace
       
   150     aTarget.TrimAll();
       
   151     freeSpace = max - aTarget.Length();
       
   152 
       
   153     // Set "<unnamed>" string for text, if there's nothing in buffer so far
       
   154     //if ( aTarget.Length() == 0 )
       
   155     if ( aEntry.SummaryL().Length()  == 0 && location.Length() == 0 )
       
   156         {
       
   157         HBufC* emptytext = StringLoader::LoadLC( R_CALEN_QTN_CALE_NO_SUBJECT );
       
   158         aTarget.Copy( emptytext->Left( freeSpace ) );
       
   159         freeSpace = max - aTarget.Length();
       
   160         CleanupStack::PopAndDestroy(emptytext);
       
   161         }
       
   162     CleanupStack::PopAndDestroy( text );
       
   163     TRACE_EXIT_POINT;
       
   164     }
       
   165     
       
   166 // ----------------------------------------------------------------------------
       
   167 // CalenNoteDataUtil::DateQueryL
       
   168 // Prompts the user for a time. Requires a title resource id, or pass 0
       
   169 // for default title "Date:".
       
   170 // ----------------------------------------------------------------------------
       
   171 //
       
   172 EXPORT_C TInt CalenViewUtils::DateQueryL( TTime& aDate, TInt aPromptId )
       
   173     {
       
   174     TRACE_ENTRY_POINT;
       
   175     if ( aPromptId == 0 )
       
   176         {
       
   177         aPromptId = R_CALEN_DATE_PROMPT;
       
   178         }
       
   179 
       
   180     CAknTimeQueryDialog* dlg = CAknTimeQueryDialog::NewL( aDate,
       
   181                                                           CAknQueryDialog::ENoTone );
       
   182     CleanupStack::PushL(dlg);
       
   183 
       
   184     HBufC* prompt = StringLoader::LoadLC( aPromptId, CEikonEnv::Static() );
       
   185     dlg->SetPromptL( *prompt );
       
   186     CleanupStack::PopAndDestroy( prompt );
       
   187 
       
   188     CleanupStack::Pop(); // dlg
       
   189 
       
   190     TRACE_EXIT_POINT;
       
   191     return dlg->ExecuteLD( R_CALEN_DAYQUERY_NOTE );
       
   192     }
       
   193 
       
   194 // ---------------------------------------------------------------------------
       
   195 // CalenViewUtils::IsAllDayEvent
       
   196 // Allday event is an event  with a duration of n*24h.
       
   197 // ---------------------------------------------------------------------------
       
   198 //
       
   199 EXPORT_C TBool CalenViewUtils::IsAlldayEventL( const CCalInstance& aInstance )
       
   200     {
       
   201     
       
   202     TRACE_ENTRY_POINT;
       
   203 
       
   204     TBool allDayEvent( EFalse );
       
   205     CCalEntry& entry = aInstance.Entry();
       
   206     if ( CCalEntry::EAppt == entry.EntryTypeL()
       
   207          ||CCalEntry::EEvent == entry.EntryTypeL()  )
       
   208         {    
       
   209         TCalTime startTime = entry.StartTimeL();
       
   210         TCalTime stopTime  = entry.EndTimeL();
       
   211     
       
   212         TTime startLocalTime = startTime.TimeLocalL();
       
   213         TTime stopLocalTime = stopTime.TimeLocalL();
       
   214         TTimeIntervalDays differenceInTime = stopLocalTime.DaysFrom(startLocalTime); // fix for AllDayEntry issue
       
   215         if( startLocalTime != stopLocalTime && 
       
   216                 startLocalTime == CalenDateUtils::BeginningOfDay( startLocalTime ) && 
       
   217                 stopLocalTime == CalenDateUtils::BeginningOfDay( stopLocalTime ) && 
       
   218                 startLocalTime != stopLocalTime && differenceInTime.Int() >= 1 ) // fix for AllDayEntry issue
       
   219             {
       
   220             allDayEvent = ETrue;
       
   221             }
       
   222         else
       
   223             {
       
   224             allDayEvent = EFalse;
       
   225             }
       
   226         }
       
   227     
       
   228     TRACE_EXIT_POINT;
       
   229     return allDayEvent;
       
   230     }
       
   231 
       
   232 // End of file.