--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenweekview.cpp Wed Sep 01 12:32:31 2010 +0100
@@ -0,0 +1,655 @@
+/*
+* Copyright (c) 2002-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: For Week View of Calendar application.
+ *
+*/
+
+
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <bldvariant.hrh> // For FeatureIds (lint warns without)
+#include <eikmenup.h>
+#include <eikspane.h>
+#include <featmgr.h>
+#include <StringLoader.h>
+#include <aknappui.h>
+#include <Calendar.rsg>
+#include <calencommonui.rsg>
+#include <calencommands.hrh> // Calendar commands
+#include <calencontext.h>
+#include <CalenStatusPaneUtils.h>
+#include <calenservices.h>
+#include <caleninstanceid.h>
+#include <calenviewutils.h>
+#include <CalenInterimUtils2.h>
+
+#include "calendarui_debug.h"
+#include "calenweekview.h"
+#include "calentitlepane.h"
+#include "calenweekcontainer.h"
+#include "calensend.h"
+#include "ToDo.hrh"
+#include "CalenUid.h"
+#include "calendar.hrh"
+
+
+// Button position of the MSK CBA button
+const TInt KSK2CBAPosition = 2;
+
+// LOCAL CONSTANTS AND MACROS
+#define iWeekContainer static_cast<CCalenWeekContainer*>( iContainer )
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::NewLC
+// Two-phased constructor.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CCalenWeekView* CCalenWeekView::NewL( MCalenServices& aServices )
+ {
+ TRACE_ENTRY_POINT;
+
+ CCalenWeekView* self = new(ELeave) CCalenWeekView( aServices );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ TRACE_EXIT_POINT;
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::~CCalenWeekView
+// Destructor.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenWeekView::~CCalenWeekView()
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::CCalenWeekView
+// C++ constructor can NOT contain any code, that might leave.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenWeekView::CCalenWeekView( MCalenServices& aServices )
+ : CCalenNativeView( aServices ),
+ iPopulationStep( ENothingDone )
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::ConstructL
+// By default Symbian OS constructor is private.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::ConstructL()
+ {
+ TRACE_ENTRY_POINT;
+
+ CommonConstructL( R_CALEN_WEEKVIEW_INFO );
+ //iLocalisedViewName = StringLoader::LoadL( R_CALEN_VIEW_WEEK, iCoeEnv );
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::SetStatusPaneFromActiveContextL
+// Set a date text to StatusPane
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::SetStatusPaneFromActiveContextL()
+ {
+ TRACE_ENTRY_POINT;
+
+ if( !iWeekContainer->IsVisible() )
+ {
+ return;
+ }
+
+ TTime activeDay = CCalenContainer::DateFromContextL( iServices.Context() );
+ // Title pane
+ CCalenSetting* setting = CCalenSetting::InstanceL();
+ CleanupReleasePushL( *setting );
+ HBufC* title = iSPUtils->WeekNameByActiveTimeL( activeDay,
+ setting->WeekFormat(),
+ setting->WeekTitle() );
+ CleanupStack::PopAndDestroy( setting );
+ CleanupStack::PushL( title );
+ iSPUtils->UnderLineTitleText( EFalse );
+ iSPUtils->SetTitleText( title ); // ownership passed
+ CleanupStack::Pop( title );
+
+ CAknNavigationDecorator* naviLabel = iSPUtils->ShowNaviPaneL( activeDay );
+
+ TTime start = (activeDay);
+ TLocale locale;
+ TInt column(activeDay.DayNoInWeek() - locale.StartOfWeek());
+ if (column < 0)
+ {
+ column += KCalenDaysInWeek;
+ }
+ start -= TTimeIntervalDays(column);
+
+ ShowValidScrollButtons( *naviLabel,
+ start -TTimeIntervalDays(1),
+ start +TTimeIntervalDays( KCalenDaysInWeek ) );
+
+ iSPUtils->RefreshStatusPane();
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::DoActivateImplL
+// CCalenNativeView::DoActivateL() calls DoActivateImplL()
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::DoActivateImplL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& /*aCustomMessage*/ )
+ {
+ TRACE_ENTRY_POINT;
+ if( aPrevViewId.iAppUid == KUidCalendar ) // switch from internal view
+ {
+ iShowBackButtonOnCba =
+ ( aCustomMessageId == KUidCalenShowBackCba ? ETrue : EFalse );
+ }
+ else
+ {
+ iShowBackButtonOnCba = EFalse;
+ }
+ iWeekContainer->SetCursorToActiveDayL();
+ //SetStatusPaneFromActiveContextL();
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::DoDeactivateImpl
+// CCalenNativeView::DoActivateL() calls DoActivateImplL()
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::DoDeactivateImpl()
+ {
+ TRACE_ENTRY_POINT;
+
+ if (!iAvkonAppUi->IsDisplayingMenuOrDialog())
+ {
+ iSPUtils->HideNaviPane();
+ //iNaviContainer->Pop(iNaviLabel);
+ //delete iNaviLabel;
+ //iNaviLabel = NULL;
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::OnLocaleChangedL
+// Called when cross over midinight or locale change.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::OnLocaleChangedL( TInt aReason )
+ {
+ TRACE_ENTRY_POINT;
+
+ if(!iContainer)
+ {
+ return;
+ }
+
+ if (iContainer->IsVisible())
+ {
+ if (!IsContainerFocused())
+ {
+ iLocChangeReason = EChangesLocale;
+ }
+ else
+ {
+ if (aReason & EChangesLocale)
+ {
+ iWeekContainer->RedrawLocaleChangeL(
+ CCalenWeekContainer::ERedrawAll);
+ }
+
+ if (aReason & EChangesSystemTime)
+ {
+ // iWeekContainer->NotifyDocChange();
+ }
+ else
+ {
+ iWeekContainer->RedrawLocaleChangeL(
+ CCalenWeekContainer::ERedrawWeek);
+ //SetStatusPaneFromActiveContextL();
+ }
+ }
+ }
+ else
+ {
+ iWeekContainer->RedrawLocaleChangeL(
+ CCalenWeekContainer::ERedrawWeek);
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::CreateContainerImplL
+// Creates CCalenContainer
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+CCalenContainer* CCalenWeekView::CreateContainerImplL()
+ {
+ TRACE_ENTRY_POINT;
+
+ TRACE_EXIT_POINT;
+ return new(ELeave) CCalenWeekContainer( this,
+ iTime,
+ iSelectedRowNumber,
+ iFirstRowTime,
+ iServices );
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::RedrawStatusPaneL
+// Redraw status pane when Form is closed
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::RedrawStatusPaneL()
+ {
+ TRACE_ENTRY_POINT;
+
+ iWeekContainer->RedrawLocaleChangeL(
+ CCalenWeekContainer::ERedrawWeek);
+ SetStatusPaneFromActiveContextL();
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::DynInitMenuPaneL
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::DynInitMenuPaneL(TInt aResourceId,
+ CEikMenuPane* aMenuPane)
+ {
+ TRACE_ENTRY_POINT;
+
+
+ iWeekContainer->HidePopup();
+
+
+ CCalenNativeView::DynInitMenuPaneL(aResourceId, aMenuPane);
+ switch (aResourceId)
+ {
+ case R_CALENDAR_WEEK_MENUPANE:
+ {
+
+#ifdef RD_CALEN_EXTERNAL_CAL
+ TBool isit=ExtCalendarAvailableL();
+ if (!isit)
+ {
+ ReleaseServiceHandler();
+ TInt dummy;
+ if (aMenuPane->MenuItemExists(ECalenExtAiwCommandId,dummy))
+ {
+ aMenuPane->DeleteMenuItem(ECalenExtAiwCommandId);
+ }
+ }
+#endif //RD_CALEN_EXTERNAL_CAL
+
+ if ( ! FeatureManager::FeatureSupported(KFeatureIdHelp) )
+ {
+ aMenuPane->DeleteMenuItem(EAknCmdHelp);
+ }
+ if( !iServices.InterimUtilsL().MRViewersEnabledL( ETrue ) )
+ {
+ aMenuPane->DeleteMenuItem( ECalenNewMeetingRequest );
+ }
+
+ // Offer the menu pane to the services for customisation by the
+ // the view manager/plugins
+ iServices.OfferMenuPaneL( aResourceId, aMenuPane );
+
+ break;
+ }
+ default:
+ // Should we do ASSERT( EFalse );
+ break;
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::HandleCommandL
+// Command handling week view.
+// We will handle MSK Open here. Other commands are passed to
+// to the CCalenNativeView.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::HandleCommandL( TInt aCommand )
+ {
+ TRACE_ENTRY_POINT;
+
+ switch ( aCommand )
+ {
+ case ECalenForwardsToDayView:
+ case EAknSoftkeyOpen:
+ iWeekContainer->SetActiveContextFromHighlightL();
+ CCalenNativeView::HandleCommandL( ECalenForwardsToDayView );
+ break;
+
+ // Special handling for new timed notes. Instead of creating at 8am on
+ // current day, as per other views, just use the current context time.
+ case ECalenNewMeeting:
+ case ECalenNewMeetingRequest:
+ {
+ // set the editoractive for not showing the preview popup or preview pane
+ SetEditorActive(ETrue);
+ iServices.IssueCommandL( aCommand );
+ }
+ break;
+ case EAknSoftkeyBack:
+ {
+
+ SetCbaL( R_CALEN_MONTH_AND_WEEK_VIEW_CBA );
+
+ iServices.IssueNotificationL(ECalenNotifyWeekViewClosed);
+ }
+ break;
+ default:
+ CCalenNativeView::HandleCommandL( aCommand );
+ break;
+ }
+
+ TRACE_EXIT_POINT;
+ }
+// ---------------------------------------------------------
+// CCalenWeekView::UpdateCbaL
+// Set context menubar and also CBA button back / exit.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalenWeekView::UpdateCbaL()
+ {
+ TRACE_ENTRY_POINT;
+
+ if( iShowBackButtonOnCba )
+ {
+ CEikButtonGroupContainer* cba = Cba();
+ cba->SetCommandL( KSK2CBAPosition, R_CALEN_BACK_CBA_BUTTON);
+ cba->DrawNow();
+ }
+ else
+ {
+ SetCbaL(R_CALEN_MONTH_AND_WEEK_VIEW_CBA);
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::Id
+// From CAknView
+// Return the UID of the week view
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+TUid CCalenWeekView::Id() const
+ {
+ TRACE_ENTRY_POINT;
+
+ TRACE_EXIT_POINT;
+ return KUidCalenWeekView;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::ClearViewSpecificDataL
+// Clears any cached data for the specific view, e.g. currently
+// highlighted row, column, etc.
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::ClearViewSpecificDataL()
+ {
+ TRACE_ENTRY_POINT;
+
+ iTime = Time::NullTTime();
+ iSelectedRowNumber = KErrNotFound;
+ iFirstRowTime = -1;
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::IsViewSpecificDataNullL
+// From CCalenNativeView
+// Returns ETrue if the view specific data is null, EFalse otherwise.
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+TBool CCalenWeekView::IsViewSpecificDataNullL()
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ return ( iTime == Time::NullTTime() ) &&
+ ( iSelectedRowNumber == KErrNotFound ) &&
+ ( iFirstRowTime.Int() == -1 );
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::ActiveStepL
+// From CCalenView
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+CCalenView::TNextPopulationStep CCalenWeekView::ActiveStepL()
+ {
+ TRACE_ENTRY_POINT;
+ switch( iPopulationStep )
+ {
+ case ENothingDone:
+ {
+ iWeekContainer->CheckLayoutAndExtensionL();
+
+ RArray<TInt> colIdArray;
+ CCalenNativeView::GetActiveCollectionidsL( iServices, colIdArray );
+ if(colIdArray.Count() > 0)
+ {
+ if( !iServices.InstanceViewL(colIdArray) )
+ {
+ colIdArray.Reset();
+ return CCalenView::EWaitForInstanceView;
+ }
+ }
+ else
+ {
+ if( !iServices.InstanceViewL() )
+ {
+ colIdArray.Reset();
+ return CCalenView::EWaitForInstanceView;
+ }
+ }
+ colIdArray.Reset();
+ // else fall through...
+ //lint -fallthrough
+ }
+ case ERequestedInstanceView:
+ {
+ iWeekContainer->BeginPopulationWithInstanceViewL();
+ iPopulationStep = ESlotTable1Next;
+ TRACE_EXIT_POINT;
+ return CCalenView::EWaitForInstanceView;
+ }
+ case ESlotTable1Next:
+ {
+ iWeekContainer->FirstPopulateOfSlotTableL();
+ iPopulationStep = ESlotTable2Next;
+ TRACE_EXIT_POINT;
+ return CCalenView::EKeepGoing;
+ }
+ case ESlotTable2Next:
+ {
+ iWeekContainer->SecondPopulateOfSlotTableL();
+ iPopulationStep = ESetListBoxDataNext;
+ TRACE_EXIT_POINT;
+ return CCalenView::EKeepGoing;
+ }
+ case ESetListBoxDataNext:
+ default:
+ {
+ iWeekContainer->CompletePopulationL();
+ iPopulationStep = EPopulationDone;
+ TRACE_EXIT_POINT;
+ return CCalenView::EDone;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::CancelPopulation
+// From CCalenView
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::CancelPopulation()
+ {
+ TRACE_ENTRY_POINT;
+
+ iPopulationStep = ENothingDone;
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::CyclePosition
+// From CCalenView
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+CCalenView::TCyclePosition CCalenWeekView::CyclePosition() const
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ return CCalenView::EReplaceWeekView;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::LocalisedViewNameL
+// From CCalenView
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+const TDesC& CCalenWeekView::LocalisedViewNameL( CCalenView::TViewName aViewName )
+ {
+ TRACE_ENTRY_POINT;
+
+ HBufC* ret = NULL;
+
+ switch ( aViewName )
+ {
+ case CCalenView::EMenuName:
+ if ( !iMenuName )
+ {
+ iMenuName = StringLoader::LoadL( R_CALEN_VIEW_WEEK, iCoeEnv );
+ }
+ ret = iMenuName;
+ break;
+ case CCalenView::ESettingsName:
+ if ( !iSettingsName )
+ {
+ iSettingsName = StringLoader::LoadL( R_CALEN_QTN_DEFAULT_WEEK_VIEW,
+ iCoeEnv );
+ }
+ ret = iSettingsName;
+ break;
+ default:
+ ASSERT( EFalse );
+ break;
+ }
+
+ TRACE_EXIT_POINT;
+ return *ret;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::ViewIcon
+// From CCalenView
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+CGulIcon* CCalenWeekView::ViewIconL() const
+ {
+ TRACE_ENTRY_POINT;
+ TRACE_EXIT_POINT;
+ return iServices.GetIconL( MCalenServices::ECalenWeekViewIcon );
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::UpdatePreviewPaneL
+// Updates preview pane/preview popup
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::UpdatePreviewPaneL()
+ {
+ TRACE_ENTRY_POINT;
+
+ CCalenWeekContainer* cnt = static_cast<CCalenWeekContainer*>( iContainer );
+ if(cnt)
+ {
+ cnt->UpdatePreviewPaneL();
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// ----------------------------------------------------------------------------
+// CCalenWeekView::HidePreviewPane
+// Hides preview pane/preview popup
+// (other items were commented in a header)
+// ----------------------------------------------------------------------------
+//
+void CCalenWeekView::HidePreviewPane()
+ {
+ TRACE_ENTRY_POINT;
+
+ CCalenWeekContainer* cnt = static_cast<CCalenWeekContainer*>( iContainer );
+ if(cnt)
+ {
+ cnt->HidePopup();
+ }
+
+ TRACE_EXIT_POINT;
+ }
+
+// End of File