calendarui/views/src/calenweekview.cpp
changeset 0 f979ecb2b13e
child 36 9c5b1510919f
equal deleted inserted replaced
-1:000000000000 0:f979ecb2b13e
       
     1 /*
       
     2 * Copyright (c) 2002-2008 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:  For Week View of Calendar application.
       
    15  *
       
    16 */
       
    17 
       
    18 
       
    19 #include <aknnavi.h>
       
    20 #include <aknnavide.h>
       
    21 #include <bldvariant.hrh> // For FeatureIds (lint warns without)
       
    22 #include <eikmenup.h>
       
    23 #include <eikspane.h>
       
    24 #include <featmgr.h>
       
    25 #include <StringLoader.h>
       
    26 #include <aknappui.h>
       
    27 #include <Calendar.rsg>
       
    28 #include <calencommonui.rsg>
       
    29 #include <calencommands.hrh>            // Calendar commands
       
    30 #include <calencontext.h>
       
    31 #include <CalenStatusPaneUtils.h>
       
    32 #include <calenservices.h>
       
    33 #include <caleninstanceid.h>
       
    34 #include <calenviewutils.h>
       
    35 #include <CalenInterimUtils2.h>
       
    36 
       
    37 #include "calendarui_debug.h"
       
    38 #include "calenweekview.h"
       
    39 #include "calentitlepane.h"
       
    40 #include "calenweekcontainer.h"
       
    41 #include "calensend.h"
       
    42 #include "ToDo.hrh"
       
    43 #include "CalenUid.h"
       
    44 #include "calendar.hrh"
       
    45 
       
    46 
       
    47 //  LOCAL CONSTANTS AND MACROS
       
    48 #define iWeekContainer static_cast<CCalenWeekContainer*>( iContainer )
       
    49 
       
    50 // ================= MEMBER FUNCTIONS =======================
       
    51 
       
    52 // ----------------------------------------------------------------------------
       
    53 // CCalenWeekView::NewLC
       
    54 // Two-phased constructor.
       
    55 // (other items were commented in a header).
       
    56 // ----------------------------------------------------------------------------
       
    57 //
       
    58 EXPORT_C CCalenWeekView* CCalenWeekView::NewL( MCalenServices& aServices )
       
    59     {
       
    60     TRACE_ENTRY_POINT;
       
    61 
       
    62     CCalenWeekView* self = new(ELeave) CCalenWeekView( aServices );
       
    63     CleanupStack::PushL(self);
       
    64     self->ConstructL();
       
    65     CleanupStack::Pop( self );
       
    66 
       
    67     TRACE_EXIT_POINT;
       
    68     return self;
       
    69     }
       
    70 
       
    71 // ----------------------------------------------------------------------------
       
    72 // CCalenWeekView::~CCalenWeekView
       
    73 // Destructor.
       
    74 // (other items were commented in a header).
       
    75 // ----------------------------------------------------------------------------
       
    76 //
       
    77 CCalenWeekView::~CCalenWeekView()
       
    78     {
       
    79     TRACE_ENTRY_POINT;
       
    80     TRACE_EXIT_POINT;
       
    81     }
       
    82 
       
    83 // ----------------------------------------------------------------------------
       
    84 // CCalenWeekView::CCalenWeekView
       
    85 // C++ constructor can NOT contain any code, that might leave.
       
    86 // (other items were commented in a header).
       
    87 // ----------------------------------------------------------------------------
       
    88 //
       
    89 CCalenWeekView::CCalenWeekView( MCalenServices& aServices )
       
    90     : CCalenNativeView( aServices ),
       
    91       iPopulationStep( ENothingDone )
       
    92     {
       
    93     TRACE_ENTRY_POINT;
       
    94     TRACE_EXIT_POINT;
       
    95     }
       
    96 
       
    97 // ----------------------------------------------------------------------------
       
    98 // CCalenWeekView::ConstructL
       
    99 // By default Symbian OS constructor is private.
       
   100 // (other items were commented in a header).
       
   101 // ----------------------------------------------------------------------------
       
   102 //
       
   103 void CCalenWeekView::ConstructL()
       
   104     {
       
   105     TRACE_ENTRY_POINT;
       
   106 
       
   107     CommonConstructL( R_CALEN_WEEKVIEW_INFO );
       
   108     //iLocalisedViewName = StringLoader::LoadL( R_CALEN_VIEW_WEEK, iCoeEnv );
       
   109 
       
   110     TRACE_EXIT_POINT;
       
   111     }
       
   112 
       
   113 // ----------------------------------------------------------------------------
       
   114 // CCalenWeekView::SetStatusPaneFromActiveContextL
       
   115 // Set a date text to StatusPane
       
   116 // (other items were commented in a header).
       
   117 // ----------------------------------------------------------------------------
       
   118 //
       
   119 void CCalenWeekView::SetStatusPaneFromActiveContextL()
       
   120     {
       
   121     TRACE_ENTRY_POINT;
       
   122 
       
   123     if( !iWeekContainer->IsVisible() )
       
   124         {
       
   125         return;
       
   126         }
       
   127         
       
   128     TTime activeDay = CCalenContainer::DateFromContextL( iServices.Context() );
       
   129     // Title pane
       
   130     CCalenSetting* setting = CCalenSetting::InstanceL();
       
   131     CleanupReleasePushL( *setting );
       
   132     HBufC* title = iSPUtils->WeekNameByActiveTimeL( activeDay, 
       
   133                                                                         setting->WeekFormat(),
       
   134                                                                         setting->WeekTitle() );
       
   135     CleanupStack::PopAndDestroy( setting );
       
   136     CleanupStack::PushL( title );
       
   137     iSPUtils->UnderLineTitleText( EFalse );
       
   138     iSPUtils->SetTitleText( title );    // ownership passed
       
   139     CleanupStack::Pop( title );
       
   140 
       
   141     CAknNavigationDecorator* naviLabel = iSPUtils->ShowNaviPaneL( activeDay );
       
   142 
       
   143     TTime start = (activeDay);
       
   144     TLocale locale;
       
   145     TInt column(activeDay.DayNoInWeek() - locale.StartOfWeek());
       
   146     if (column < 0)
       
   147         {
       
   148         column += KCalenDaysInWeek;
       
   149         }
       
   150     start -= TTimeIntervalDays(column);
       
   151 
       
   152     ShowValidScrollButtons( *naviLabel,
       
   153                             start -TTimeIntervalDays(1),
       
   154                             start +TTimeIntervalDays( KCalenDaysInWeek ) );
       
   155 
       
   156     iSPUtils->RefreshStatusPane();
       
   157     TRACE_EXIT_POINT;
       
   158     }
       
   159 
       
   160 // ----------------------------------------------------------------------------
       
   161 // CCalenWeekView::DoActivateImplL
       
   162 // CCalenNativeView::DoActivateL() calls DoActivateImplL()
       
   163 // (other items were commented in a header).
       
   164 // ----------------------------------------------------------------------------
       
   165 //
       
   166 void CCalenWeekView::DoActivateImplL( const TVwsViewId& /*aPrevViewId*/,
       
   167                                       TUid /*aCustomMessageId*/,
       
   168                                       const TDesC8& /*aCustomMessage*/ )
       
   169     {
       
   170     TRACE_ENTRY_POINT;
       
   171 
       
   172     iWeekContainer->SetCursorToActiveDayL();
       
   173     //SetStatusPaneFromActiveContextL();
       
   174     
       
   175     TRACE_EXIT_POINT;
       
   176     }
       
   177 
       
   178 // ----------------------------------------------------------------------------
       
   179 // CCalenWeekView::DoDeactivateImpl
       
   180 // CCalenNativeView::DoActivateL() calls DoActivateImplL()
       
   181 // (other items were commented in a header).
       
   182 // ----------------------------------------------------------------------------
       
   183 //
       
   184 void CCalenWeekView::DoDeactivateImpl()
       
   185     {
       
   186     TRACE_ENTRY_POINT;
       
   187 
       
   188     if (!iAvkonAppUi->IsDisplayingMenuOrDialog())
       
   189         {
       
   190         iSPUtils->HideNaviPane();
       
   191         //iNaviContainer->Pop(iNaviLabel);
       
   192         //delete iNaviLabel;
       
   193         //iNaviLabel = NULL;
       
   194         }
       
   195     
       
   196     TRACE_EXIT_POINT;
       
   197     }
       
   198 
       
   199 // ----------------------------------------------------------------------------
       
   200 // CCalenWeekView::OnLocaleChangedL
       
   201 // Called when cross over midinight or locale change.
       
   202 // (other items were commented in a header).
       
   203 // ----------------------------------------------------------------------------
       
   204 //
       
   205 void CCalenWeekView::OnLocaleChangedL( TInt aReason )
       
   206     {
       
   207     TRACE_ENTRY_POINT;
       
   208 
       
   209     if(!iContainer)
       
   210         {
       
   211         return;
       
   212         }
       
   213 
       
   214     if (iContainer->IsVisible())
       
   215         {
       
   216         if (!IsContainerFocused())
       
   217             {
       
   218             iLocChangeReason = EChangesLocale;
       
   219             }
       
   220         else
       
   221             {
       
   222             if (aReason & EChangesLocale)
       
   223                 {
       
   224                 iWeekContainer->RedrawLocaleChangeL(
       
   225                     CCalenWeekContainer::ERedrawAll);
       
   226                 }
       
   227 
       
   228             if (aReason & EChangesSystemTime)
       
   229                 {
       
   230                // iWeekContainer->NotifyDocChange();
       
   231                 }
       
   232             else
       
   233                 {
       
   234                 iWeekContainer->RedrawLocaleChangeL(
       
   235                     CCalenWeekContainer::ERedrawWeek);
       
   236                 //SetStatusPaneFromActiveContextL();
       
   237                 }
       
   238             }
       
   239         }
       
   240     else
       
   241         {
       
   242         iWeekContainer->RedrawLocaleChangeL(
       
   243             CCalenWeekContainer::ERedrawWeek);
       
   244         }
       
   245 
       
   246     TRACE_EXIT_POINT;
       
   247     }
       
   248 
       
   249 // ----------------------------------------------------------------------------
       
   250 // CCalenWeekView::CreateContainerImplL
       
   251 // Creates CCalenContainer
       
   252 // (other items were commented in a header).
       
   253 // ----------------------------------------------------------------------------
       
   254 //
       
   255 CCalenContainer* CCalenWeekView::CreateContainerImplL()
       
   256     {
       
   257     TRACE_ENTRY_POINT;
       
   258 
       
   259     TRACE_EXIT_POINT;
       
   260     return new(ELeave) CCalenWeekContainer( this,
       
   261                                             iTime,
       
   262                                             iSelectedRowNumber,
       
   263                                             iFirstRowTime,
       
   264                                             iServices );
       
   265     }
       
   266 
       
   267 // ----------------------------------------------------------------------------
       
   268 // CCalenWeekView::RedrawStatusPaneL
       
   269 // Redraw status pane when Form is closed
       
   270 // (other items were commented in a header).
       
   271 // ----------------------------------------------------------------------------
       
   272 //
       
   273 void CCalenWeekView::RedrawStatusPaneL()
       
   274     {
       
   275     TRACE_ENTRY_POINT;
       
   276 
       
   277     iWeekContainer->RedrawLocaleChangeL(
       
   278         CCalenWeekContainer::ERedrawWeek);
       
   279     SetStatusPaneFromActiveContextL();
       
   280 
       
   281     TRACE_EXIT_POINT;
       
   282     }
       
   283 
       
   284 // ----------------------------------------------------------------------------
       
   285 // CCalenWeekView::DynInitMenuPaneL
       
   286 // (other items were commented in a header).
       
   287 // ----------------------------------------------------------------------------
       
   288 //
       
   289 void CCalenWeekView::DynInitMenuPaneL(TInt aResourceId,
       
   290                                       CEikMenuPane* aMenuPane)
       
   291     {
       
   292     TRACE_ENTRY_POINT;
       
   293 
       
   294 
       
   295     iWeekContainer->HidePopup();
       
   296 
       
   297 
       
   298     CCalenNativeView::DynInitMenuPaneL(aResourceId, aMenuPane);
       
   299     switch (aResourceId)
       
   300         {
       
   301         case R_CALENDAR_WEEK_MENUPANE:
       
   302             {
       
   303 
       
   304 #ifdef RD_CALEN_EXTERNAL_CAL
       
   305             TBool isit=ExtCalendarAvailableL();
       
   306             if (!isit)
       
   307                 {
       
   308                 ReleaseServiceHandler();
       
   309                 TInt dummy;
       
   310                 if (aMenuPane->MenuItemExists(ECalenExtAiwCommandId,dummy))
       
   311                     {
       
   312                     aMenuPane->DeleteMenuItem(ECalenExtAiwCommandId);
       
   313                     }
       
   314                 }
       
   315 #endif //RD_CALEN_EXTERNAL_CAL
       
   316 
       
   317             if ( ! FeatureManager::FeatureSupported(KFeatureIdHelp) )
       
   318                 {
       
   319                 aMenuPane->DeleteMenuItem(EAknCmdHelp);
       
   320                 }
       
   321             if( !iServices.InterimUtilsL().MRViewersEnabledL( ETrue ) )
       
   322                 {
       
   323                 aMenuPane->DeleteMenuItem( ECalenNewMeetingRequest );
       
   324                 }
       
   325 
       
   326             // Offer the menu pane to the services for customisation by the
       
   327             // the view manager/plugins
       
   328             iServices.OfferMenuPaneL( aResourceId, aMenuPane );
       
   329 
       
   330             break;
       
   331             }
       
   332         default:
       
   333             // Should we do ASSERT( EFalse );
       
   334             break;
       
   335         }
       
   336 
       
   337     TRACE_EXIT_POINT;
       
   338     }
       
   339 
       
   340 // ----------------------------------------------------------------------------
       
   341 // CCalenWeekView::HandleCommandL
       
   342 // Command handling week view.
       
   343 // We will handle MSK Open here. Other commands are passed to
       
   344 // to the CCalenNativeView.
       
   345 // (other items were commented in a header).
       
   346 // ----------------------------------------------------------------------------
       
   347 //
       
   348 void CCalenWeekView::HandleCommandL( TInt aCommand )
       
   349     {
       
   350     TRACE_ENTRY_POINT;
       
   351 
       
   352     switch ( aCommand )
       
   353         {
       
   354         case ECalenForwardsToDayView:
       
   355         case EAknSoftkeyOpen:
       
   356             iWeekContainer->SetActiveContextFromHighlightL();
       
   357             CCalenNativeView::HandleCommandL( ECalenForwardsToDayView );
       
   358             break;
       
   359 
       
   360         // Special handling for new timed notes. Instead of creating at 8am on
       
   361         // current day, as per other views, just use the current context time.
       
   362         case ECalenNewMeeting:
       
   363         case ECalenNewMeetingRequest:
       
   364             {
       
   365             // set the editoractive for not showing the preview popup or preview pane
       
   366             SetEditorActive(ETrue);
       
   367             iServices.IssueCommandL( aCommand );
       
   368             }
       
   369             break;
       
   370 
       
   371         default:
       
   372             CCalenNativeView::HandleCommandL( aCommand );
       
   373             break;
       
   374         }
       
   375 
       
   376     TRACE_EXIT_POINT;
       
   377     }
       
   378 
       
   379 // ----------------------------------------------------------------------------
       
   380 // CCalenWeekView::Id
       
   381 // From CAknView
       
   382 // Return the UID of the week view
       
   383 // (other items were commented in a header)
       
   384 // ----------------------------------------------------------------------------
       
   385 //
       
   386 TUid CCalenWeekView::Id() const
       
   387     {
       
   388     TRACE_ENTRY_POINT;
       
   389 
       
   390     TRACE_EXIT_POINT;
       
   391     return KUidCalenWeekView;
       
   392     }
       
   393 
       
   394 // ----------------------------------------------------------------------------
       
   395 // CCalenWeekView::ClearViewSpecificDataL
       
   396 // Clears any cached data for the specific view, e.g. currently
       
   397 // highlighted row, column, etc.
       
   398 // (other items were commented in a header)
       
   399 // ----------------------------------------------------------------------------
       
   400 //
       
   401 void CCalenWeekView::ClearViewSpecificDataL()
       
   402     {
       
   403     TRACE_ENTRY_POINT;
       
   404 
       
   405     iTime = Time::NullTTime();
       
   406     iSelectedRowNumber = KErrNotFound;
       
   407     iFirstRowTime = -1;
       
   408 
       
   409     TRACE_EXIT_POINT;
       
   410     }
       
   411 
       
   412 // ----------------------------------------------------------------------------
       
   413 // CCalenWeekView::IsViewSpecificDataNullL
       
   414 // From CCalenNativeView
       
   415 // Returns ETrue if the view specific data is null, EFalse otherwise.
       
   416 // (other items were commented in a header)
       
   417 // ----------------------------------------------------------------------------
       
   418 //
       
   419 TBool CCalenWeekView::IsViewSpecificDataNullL()
       
   420     {
       
   421     TRACE_ENTRY_POINT;
       
   422     TRACE_EXIT_POINT;
       
   423     return ( iTime == Time::NullTTime() ) &&
       
   424            ( iSelectedRowNumber == KErrNotFound ) &&
       
   425            ( iFirstRowTime.Int() == -1 );
       
   426     }
       
   427 
       
   428 // ----------------------------------------------------------------------------
       
   429 // CCalenWeekView::ActiveStepL
       
   430 // From CCalenView
       
   431 // (other items were commented in a header)
       
   432 // ----------------------------------------------------------------------------
       
   433 //
       
   434 CCalenView::TNextPopulationStep CCalenWeekView::ActiveStepL()
       
   435     {
       
   436     TRACE_ENTRY_POINT;
       
   437     switch( iPopulationStep )
       
   438         {
       
   439         case ENothingDone:
       
   440             {
       
   441 			iWeekContainer->CheckLayoutAndExtensionL();
       
   442 			
       
   443             RArray<TInt> colIdArray;
       
   444             CCalenNativeView::GetActiveCollectionidsL( iServices, colIdArray );
       
   445             if(colIdArray.Count() > 0)
       
   446                 {
       
   447                 if( !iServices.InstanceViewL(colIdArray) )
       
   448                     {
       
   449                     colIdArray.Reset();
       
   450                     return  CCalenView::EWaitForInstanceView;
       
   451                     }
       
   452                 }
       
   453             else
       
   454                 {
       
   455                 if( !iServices.InstanceViewL() )
       
   456                     {
       
   457                     colIdArray.Reset();
       
   458                     return CCalenView::EWaitForInstanceView;
       
   459                     }
       
   460                 }
       
   461             colIdArray.Reset();
       
   462             // else fall through...
       
   463             //lint -fallthrough
       
   464             }
       
   465         case ERequestedInstanceView:
       
   466             {
       
   467             iWeekContainer->BeginPopulationWithInstanceViewL();
       
   468             iPopulationStep = ESlotTable1Next;
       
   469             TRACE_EXIT_POINT;
       
   470             return CCalenView::EWaitForInstanceView;
       
   471             }
       
   472         case ESlotTable1Next:
       
   473             {
       
   474             iWeekContainer->FirstPopulateOfSlotTableL();
       
   475             iPopulationStep = ESlotTable2Next;
       
   476             TRACE_EXIT_POINT;
       
   477             return CCalenView::EKeepGoing;
       
   478             }
       
   479         case ESlotTable2Next:
       
   480             {
       
   481             iWeekContainer->SecondPopulateOfSlotTableL();
       
   482             iPopulationStep = ESetListBoxDataNext;
       
   483             TRACE_EXIT_POINT;
       
   484             return CCalenView::EKeepGoing;
       
   485             }
       
   486         case ESetListBoxDataNext:
       
   487         default:
       
   488             {
       
   489             iWeekContainer->CompletePopulationL();
       
   490             iPopulationStep = EPopulationDone;
       
   491             TRACE_EXIT_POINT;
       
   492             return CCalenView::EDone;
       
   493             }
       
   494         }
       
   495     }
       
   496 
       
   497 // ----------------------------------------------------------------------------
       
   498 // CCalenWeekView::CancelPopulation
       
   499 // From CCalenView
       
   500 // (other items were commented in a header)
       
   501 // ----------------------------------------------------------------------------
       
   502 //
       
   503 void CCalenWeekView::CancelPopulation()
       
   504     {
       
   505     TRACE_ENTRY_POINT;
       
   506 
       
   507     iPopulationStep = ENothingDone;
       
   508 
       
   509     TRACE_EXIT_POINT;
       
   510     }
       
   511 
       
   512 // ----------------------------------------------------------------------------
       
   513 // CCalenWeekView::CyclePosition
       
   514 // From CCalenView
       
   515 // (other items were commented in a header)
       
   516 // ----------------------------------------------------------------------------
       
   517 //
       
   518 CCalenView::TCyclePosition CCalenWeekView::CyclePosition() const
       
   519     {
       
   520     TRACE_ENTRY_POINT;
       
   521     TRACE_EXIT_POINT;
       
   522     return CCalenView::EReplaceWeekView;
       
   523     }
       
   524 
       
   525 // ----------------------------------------------------------------------------
       
   526 // CCalenWeekView::LocalisedViewNameL
       
   527 // From CCalenView
       
   528 // (other items were commented in a header)
       
   529 // ----------------------------------------------------------------------------
       
   530 //
       
   531 const TDesC& CCalenWeekView::LocalisedViewNameL( CCalenView::TViewName aViewName )
       
   532     {
       
   533     TRACE_ENTRY_POINT;
       
   534     
       
   535     HBufC* ret = NULL;
       
   536 
       
   537     switch ( aViewName )
       
   538         {
       
   539         case CCalenView::EMenuName:
       
   540             if ( !iMenuName )
       
   541                 {
       
   542                 iMenuName = StringLoader::LoadL( R_CALEN_VIEW_WEEK, iCoeEnv );
       
   543                 }
       
   544             ret = iMenuName;
       
   545             break;
       
   546         case CCalenView::ESettingsName:
       
   547             if ( !iSettingsName )
       
   548                 {
       
   549                 iSettingsName = StringLoader::LoadL( R_CALEN_QTN_DEFAULT_WEEK_VIEW,
       
   550                                                      iCoeEnv );
       
   551                 }
       
   552             ret = iSettingsName;
       
   553             break;
       
   554         default:
       
   555             ASSERT( EFalse );
       
   556             break;
       
   557         }
       
   558 
       
   559     TRACE_EXIT_POINT;
       
   560     return *ret;
       
   561     }
       
   562 
       
   563 // ----------------------------------------------------------------------------
       
   564 // CCalenWeekView::ViewIcon
       
   565 // From CCalenView
       
   566 // (other items were commented in a header)
       
   567 // ----------------------------------------------------------------------------
       
   568 //
       
   569 CGulIcon* CCalenWeekView::ViewIconL() const
       
   570     {
       
   571     TRACE_ENTRY_POINT;
       
   572     TRACE_EXIT_POINT;
       
   573     return iServices.GetIconL( MCalenServices::ECalenWeekViewIcon );
       
   574     }
       
   575 
       
   576 // ----------------------------------------------------------------------------
       
   577 // CCalenWeekView::UpdatePreviewPaneL
       
   578 // Updates preview pane/preview popup
       
   579 // (other items were commented in a header)
       
   580 // ----------------------------------------------------------------------------
       
   581 //
       
   582 void CCalenWeekView::UpdatePreviewPaneL()
       
   583     {
       
   584     TRACE_ENTRY_POINT;
       
   585     
       
   586     CCalenWeekContainer* cnt = static_cast<CCalenWeekContainer*>( iContainer );
       
   587     if(cnt)
       
   588         {
       
   589         cnt->UpdatePreviewPaneL();
       
   590         }
       
   591     
       
   592     TRACE_EXIT_POINT;
       
   593     }
       
   594 
       
   595 // ----------------------------------------------------------------------------
       
   596 // CCalenWeekView::HidePreviewPane
       
   597 // Hides preview pane/preview popup
       
   598 // (other items were commented in a header)
       
   599 // ----------------------------------------------------------------------------
       
   600 //
       
   601 void CCalenWeekView::HidePreviewPane()
       
   602     {
       
   603     TRACE_ENTRY_POINT;
       
   604     
       
   605     CCalenWeekContainer* cnt = static_cast<CCalenWeekContainer*>( iContainer );
       
   606     if(cnt)
       
   607         {
       
   608         cnt->HidePopup();
       
   609         }
       
   610     
       
   611     TRACE_EXIT_POINT;
       
   612     }
       
   613 
       
   614 // End of File