diff -r 000000000000 -r f979ecb2b13e calendarui/editors/src/CalenDefaultEditors.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/editors/src/CalenDefaultEditors.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,344 @@ +/* +* Copyright (c) 2009 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: CalenDefaultEditors calss definition +* +*/ + +// user includes +#include "CalenDefaultEditors.h" +#include "CalenDefaultEditors.hrh" +#include "calennotedatautil.h" +#include "calenentryutil.h" +#include "calenunifiededitor.h" + +// system includes +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "CleanupResetAndDestroy.h" + +// debug +#include "calendarui_debug.h" + + +// local constants +#define KResourcePath KDC_RESOURCE_FILES_DIR +_LIT( KResourceFile, "CalenDefaultEditorsData.rsc" ); + +enum TPanicCode + { + EPanicCalenDefaultEditorsResourceLoading = 1, + }; + +static void Panic( TPanicCode aReason ) + { + TRACE_ENTRY_POINT; + + _LIT( KPanicText, "CalenDefaultEditors" ); + User::Panic( KPanicText,aReason ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::NewL +// Two staged constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenDefaultEditors* CCalenDefaultEditors::NewL() + { + TRACE_ENTRY_POINT; + + CCalenDefaultEditors* self = new ( ELeave ) CCalenDefaultEditors; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + TRACE_EXIT_POINT; + return self; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::~CCalenDefaultEditors +// Destructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +CCalenDefaultEditors::~CCalenDefaultEditors() + { + TRACE_ENTRY_POINT; + + iResourceLoader.Close(); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::CCalenDefaultEditors +// Constructor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +CCalenDefaultEditors::CCalenDefaultEditors() + : iEikEnv( *( CEikonEnv::Static() ) ), iResourceLoader( iEikEnv ) + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::ConstructL +// Second phase construction. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenDefaultEditors::ConstructL() + { + TRACE_ENTRY_POINT; + + TFileName resource( TParsePtrC( PathInfo::RomRootPath() ).Drive() ); + resource.Append( KResourcePath ); + resource.Append( KResourceFile ); + BaflUtils::NearestLanguageFile( CCoeEnv::Static()->FsSession(), resource ); + TInt err = iResourceLoader.Open( resource ); + __ASSERT_ALWAYS( err == KErrNone, Panic( EPanicCalenDefaultEditorsResourceLoading ) ); + + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::ExecuteViewL +// Launches the entry editor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCalenDefaultEditors::ExecuteViewL( RPointerArray& aEntries, + const TAgnEntryUiInParams& aInParams, + TAgnEntryUiOutParams& aOutParams, + MAgnEntryUiCallback& aCallback ) + { + TRACE_ENTRY_POINT; + + CalCommon::TRecurrenceRange repeatType( CalCommon::EThisAndAll ); + TBool iSEditable( ETrue ); + + if( ( aEntries[0]->EntryTypeL() == CCalEntry::EReminder ) + || ( aEntries[0]->EntryTypeL() == CCalEntry::EAppt ) + || ( aEntries[0]->EntryTypeL() == CCalEntry::EEvent ) ) + { + TCalRRule rrule; + + TBool repeating = aEntries[0]->GetRRuleL( rrule ); + const TBool child = aEntries[0]->RecurrenceIdL().TimeUtcL() != Time::NullTTime(); + + if( child || repeating ) + { + // Aks the user for repeat type ( This/All occurrences ) + iSEditable = CalenNoteDataUtil::ShowRepeatTypeQueryL( repeatType, CalenNoteDataUtil::EEdit); + } + // if editing exceptional entry and repeat type edit all occurences, + // launch the parent entry + if( child && repeatType == CalCommon::EThisAndAll) + { + TInt services( aInParams.iSpare ); + iServices = reinterpret_cast< MCalenServices* >( services ); + + RPointerArray entries; + CleanupResetAndDestroyPushL( entries ); + iServices->EntryViewL(iServices->Context().InstanceId().iColId)->FetchL( aEntries[0]->UidL(), entries ); + aEntries.Close(); + aEntries.Append(entries[0]); + entries.Remove(0); + CleanupStack::PopAndDestroy( &entries ); + } + } + + TInt completion( 0 ); + if( iSEditable ) + { + // Create settings own titlepane and navipane, and swap with existing ones + CEikStatusPane* sp = CEikonEnv::Static()->AppUiFactory()->StatusPane(); + + // Titlepane + CAknTitlePane* newtp = new( ELeave ) CAknTitlePane(); + CleanupStack::PushL( newtp ); + CCoeControl* oldtp = sp->SwapControlL( TUid::Uid(EEikStatusPaneUidTitle), newtp ); + CleanupStack::Pop( newtp ); // ownership is passed to statuspane + TRect oldRect( 0, 0, 0, 0 ); + if( oldtp ) + { + CleanupStack::PushL( oldtp ); + oldRect = oldtp->Rect(); + CCoeControl* ctrl = sp->ContainerControlL( TUid::Uid( EEikStatusPaneUidTitle ) ); + newtp->SetContainerWindowL( *ctrl ); + newtp->ConstructL(); + newtp->SetRect( oldRect ); + newtp->ActivateL(); + } + + // NaviPane + CAknNavigationControlContainer* newnp = new( ELeave )CAknNavigationControlContainer(); + CleanupStack::PushL( newnp ); + CCoeControl* oldnp = sp->SwapControlL( TUid::Uid( EEikStatusPaneUidNavi ), newnp ); + CleanupStack::Pop( newnp ); // ownership is passed to statuspane + if( oldnp ) + { + CleanupStack::PushL( oldnp ); + oldRect = oldnp->Rect(); + CCoeControl* ctrl = sp->ContainerControlL( TUid::Uid( EEikStatusPaneUidNavi ) ); + newnp->SetContainerWindowL( *ctrl ); + newnp->ConstructL(); + newnp->SetRect( oldRect ); + newnp->PushDefaultL(); + newnp->ActivateL(); + } + + completion= LaunchEditorL( *(aEntries[0]), aInParams, aOutParams, aCallback, repeatType); + + if( oldnp && sp->SwapControlL( TUid::Uid(EEikStatusPaneUidNavi), oldnp ) ) + { + CleanupStack::Pop( oldnp ); + delete newnp; + oldnp->ActivateL(); + } + if( oldtp && sp->SwapControlL( TUid::Uid(EEikStatusPaneUidTitle), oldtp ) ) + { + CleanupStack::Pop( oldtp ); + delete newtp; + oldtp->ActivateL(); + } + if ( completion == EAknCmdExit || completion == 0) // 0 is mapped from EEikBidCancel. + { + // Exit application + static_cast( iEikEnv.EikAppUi() )->ProcessCommandL( EAknCmdExit ); + } + } + else + { + // if user cancels repeated entry confirmation query + TInt services( aInParams.iSpare ); + iServices = reinterpret_cast< MCalenServices* >( services ); + iServices->IssueNotificationL( ECalenNotifyDialogClosed ); + } + + TRACE_EXIT_POINT; + return aOutParams.iAction; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::SetHelpContext +// Set the help context. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CCalenDefaultEditors::SetHelpContext( const TCoeHelpContext& /*aContext*/ ) + { + TRACE_ENTRY_POINT; + + // FIXME: implement + TRACE_EXIT_POINT; + } + +// ----------------------------------------------------------------------------- +// CCalenDefaultEditors::LaunchEditorL +// Launches the calendar entry editor. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +TInt CCalenDefaultEditors::LaunchEditorL(CCalEntry& aEntry, const TAgnEntryUiInParams& aInParams, + TAgnEntryUiOutParams& aOutParams, MAgnEntryUiCallback& aCallback, + CalCommon::TRecurrenceRange aRepeatType ) + { + TRACE_ENTRY_POINT; + + TInt retValue = 0; + CCalenUnifiedEditor* editor; + + // For repeat type, EThisAndAll start Date/Time is first instance Date/Time. + TAgnEntryUiInParams inParamsCopy( aInParams ); + if( aRepeatType == CalCommon::EThisAndAll ) + { + inParamsCopy.iInstanceDate.SetTimeLocalL( aEntry.StartTimeL().TimeLocalL() ); + } + + switch ( aEntry.EntryTypeL() ) + { + case CCalEntry::EEvent: + { + editor = CCalenUnifiedEditor::NewL( aEntry, inParamsCopy, aCallback, aOutParams, aRepeatType ); + retValue = editor->ExecuteLD(R_CALEN_UNIFIED_EDITOR); + } + break; + + // Launch the meeting editor + case CCalEntry::EReminder: + case CCalEntry::EAppt: + { + if( aInParams.iEditorMode == ECreateNewEntry ) + { + // Launch editor, for new entry + editor = CCalenUnifiedEditor::NewL( aEntry, aInParams, aCallback, aOutParams, CalCommon::EThisAndAll ); + } + else + { + // Launch editor, to edit saved entry + editor = CCalenUnifiedEditor::NewL( aEntry, inParamsCopy, aCallback, aOutParams, aRepeatType ); + } + retValue = editor->ExecuteLD( R_CALEN_UNIFIED_EDITOR ); + break; + } + + // Launch the anniversary editor + case CCalEntry::EAnniv: + { + editor = CCalenUnifiedEditor::NewL( aEntry, inParamsCopy, aCallback, aOutParams ); + retValue = editor->ExecuteLD( R_CALEN_UNIFIED_EDITOR ); + break; + } + + // Launch the todo editor + case CCalEntry::ETodo: + { + editor = CCalenUnifiedEditor::NewL(aEntry, aInParams, aCallback, aOutParams ); + retValue = editor->ExecuteLD( R_CALEN_UNIFIED_EDITOR ); + break; + } + + // Should never happen + default: + { + __ASSERT_DEBUG( EFalse, User::Invariant() ); + break; + } + } + + TRACE_EXIT_POINT; + return retValue; + } + +// End of file