diff -r 1fc85118c3ae -r 870918037e16 eventsui/eventsmgmtui/src/evtmgmtuistartupview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eventsui/eventsmgmtui/src/evtmgmtuistartupview.cpp Wed Sep 01 12:31:27 2010 +0100 @@ -0,0 +1,1206 @@ +/* +* Copyright (c) 2008-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: View class for Events Management UI. +* +*/ + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// USER INCLUDES +#include "evtmgmtuiuid.hrh" +#include "evtmgmtuistartupview.h" +#include "evtmgmtuistartupcontainer.h" +#include "evtmgmtuiappui.h" +#include "evtmgmtui.hrh" +#include "evteventsdlg.h" +#include "evtdebug.h" +#include "evtmgmtuilocsettinglauncher.h" +#include "evtmgmtuimodel.h" +#include "evtmgmtuilbtadapter.h" +#include "evtmgmtuimapnavigationadapter.h" + +// CONSTANT DEFINTIONS +const TUid KEvtMgmtUiStartupViewId = TUid::Uid( 1 ); +const TInt KMaxEvents = 50; +_LIT( KWaitCycleError, "Wait Cycle Error" ); + +// ----------------- Member funtions for CEvtMgmtUiStartupView class ----------------------- + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::CEvtMgmtUiStartupView +// --------------------------------------------------------------------------- +// +CEvtMgmtUiStartupView::CEvtMgmtUiStartupView() + { + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::~CEvtMgmtUiStartupView +// --------------------------------------------------------------------------- +// +CEvtMgmtUiStartupView::~CEvtMgmtUiStartupView() + { + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + } + + // Unregister the command handler as an observer + if( iEngine ) + { + iEngine->RemoveObserver( this ); + delete iEngine; + } + + delete iPosSetLauncher; + + if(iEvtIdArray) + { + iEvtIdArray->Close(); + delete iEvtIdArray; + } + + delete iModel; + FeatureManager::UnInitializeLib(); + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView* CEvtMgmtUiStartupView::NewL +// --------------------------------------------------------------------------- +// +CEvtMgmtUiStartupView* CEvtMgmtUiStartupView::NewL() + { + CEvtMgmtUiStartupView* self = new ( ELeave ) CEvtMgmtUiStartupView(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::ConstructL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::ConstructL() + { + if(iEikonEnv->StartedAsServerApp()) + { + iIsEmbeddedApp = ETrue; + BaseConstructL( R_EVTMGMTUI_STARTUP_VIEW_EMBEDDED ); + } + else + { + iIsEmbeddedApp = EFalse; + BaseConstructL( R_EVTMGMTUI_STARTUP_VIEW ); + } + // Create Log Directory. + //CREATELOGDIR(); + + // Feature manager required for Help feature check + FeatureManager::InitializeLibL(); + + iEngine = CEvtMgmtUiEngine::NewL(); + iEngine->SetObserver(this); + + iEngine->SyncDbsL(); + + iModel = CEvtMgmtUiModel::NewL(); + iEngine->UpdateModelL(iModel->EventsArray(), CEvtMgmtUiEngine::EEvtFilterAll ); + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterAll ); + iModel->UpdateEventsStatus( ); + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::DoActivateL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::DoActivateL( const TVwsViewId& /* PrevViewId*/, + TUid /* aCustomMessageId*/, + const TDesC8& /* aCustomMessage */) + { + // Destroy the existing container if it exists + if( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer=NULL; + } + + // Create new Container + iContainer = CEvtMgmtUiStartupContainer::NewL( ClientRect(), iModel, *this); + iContainer->SetMopParent( this ); + AppUi()->AddToViewStackL( *this, iContainer ); + if(iModel->TotalEvents()) + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR_MARK ); + else + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR ); + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::DoDeactivate +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::DoDeactivate() + { + // Destroy Container + if ( iContainer ) + { + AppUi()->RemoveFromViewStack( *this, iContainer ); + delete iContainer; + iContainer = NULL; + } + } + +// --------------------------------------------------------------------------- +// TUid CEvtMgmtUiStartupView::Id +// --------------------------------------------------------------------------- +// +TUid CEvtMgmtUiStartupView::Id() const + { + return KEvtMgmtUiStartupViewId; + } + +// ----------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::HandleShowOnMapCommandL +// It will handle 'show on map' command. +// ----------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::HandleShowOnMapCommandL() + { + EVTUIDEBUG("+ CEvtMgmtUiStartupView::HandleShowOnMapCommandL()" ); + CEvtMgmtUiMapNavigationAdapter* map = CEvtMgmtUiMapNavigationAdapter::NewL(); + CleanupStack::PushL(map); + TCoordinate loc; + iEngine->RetrieveLocationL( iModel->EventId( iContainer->CurrentItemIndex() ), loc ); + map->ShowOnMapL( loc ); + CleanupStack::PopAndDestroy(); //map + EVTUIDEBUG("- CEvtMgmtUiStartupView::HandleShowOnMapCommandL()" ); + } + +// ----------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::HandleNavigateToPlaceCommandL +// It will handle 'navigate to place' command. +// ----------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::HandleNavigateToPlaceCommandL() + { + EVTUIDEBUG("+ CEvtMgmtUiStartupView::HandleNavigateToPlaceCommandL()" ); + CEvtMgmtUiMapNavigationAdapter* map = CEvtMgmtUiMapNavigationAdapter::NewL(); + CleanupStack::PushL(map); + TCoordinate loc; + iEngine->RetrieveLocationL( iModel->EventId( iContainer->CurrentItemIndex() ), loc ); + map->NavigateToPlaceL( loc ); + CleanupStack::PopAndDestroy(); //map + EVTUIDEBUG("- CEvtMgmtUiStartupView::HandleNavigateToPlaceCommandL()" ); + } +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::HandleCommandL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::HandleCommandL( TInt aCommand ) + { + EVTUIDEBUG1("+ CEvtMgmtUiStartupView::HandleCommandL = %d", aCommand); + + TInt currentItemIndex= iContainer->CurrentItemIndex(); + // This class only handles the commands specific to this view + switch( aCommand ) + { + case EEvtMgmtUiStartupViewOpen: + { + if(currentItemIndex>0) + { + TCoeHelpContext context; + context.iContext = KHLP_LOC_EVENTS_EDITOR(); + context.iMajor = TUid::Uid( KEvtMgmtUiUid ); + + CEvtEvent* evt = iEngine->EventL( EventIdOfCurrentItem() ); + CleanupStack::PushL( evt ); + CEvtEventsDlg* form = CEvtEventsDlg::NewL(EFalse, *evt, *iEngine); + form->SetHelpContext( context ); + form->ExecuteLD( ); + CleanupStack::PopAndDestroy( evt ); + iContainer->MakeTitleL(); + } + break; + } + case EEvtMgmtUiStartupViewCreate: + { + currentItemIndex = KErrNotFound; + if(iModel->TotalEvents() < KMaxEvents ) + { + TCoeHelpContext context; + context.iContext = KHLP_LOC_EVENTS_EDITOR(); + context.iMajor = TUid::Uid( KEvtMgmtUiUid ); + + CEvtEvent* evt = iEngine->EventL( 0 ); + CleanupStack::PushL( evt ); + CEvtEventsDlg* form = CEvtEventsDlg::NewL(ETrue, *evt, *iEngine ); + form->SetHelpContext( context ); + form->ExecuteLD( ); + CleanupStack::PopAndDestroy( evt ); + iContainer->MakeTitleL(); + if(iModel->TotalEvents()) + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR_MARK ); + else + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR ); + } + else + { + HBufC* errMsg = StringLoader::LoadLC( R_EVTUI_MAXEVENTS_ERROR, iCoeEnv ); + CAknInformationNote* errNote = new(ELeave) CAknInformationNote(); + errNote->ExecuteLD( *errMsg ); + CleanupStack::PopAndDestroy(errMsg); + } + break; + } + case EEvtEditorCmdDelete: + { + TInt cnt = iContainer->NumberOfMarkedItems(); + if( currentItemIndex != 0 || cnt ) + { + HBufC* msg = NULL; + if(cnt>1) + msg = StringLoader::LoadLC(R_LOCEV_CONFIRM_MULTIDELETE_EVENT, cnt, CEikonEnv::Static() ); + else + msg = StringLoader::LoadLC(R_LOCEV_CONFIRM_DELETE_EVENT, CEikonEnv::Static() ); + + //if not deleted, do nothing + if(DisplayConfirmationQueryDlgL(*msg)) + { + iWaitState = EWaitDlgLaunchToDelete; + StartWaitDialogL(); + } + CleanupStack::PopAndDestroy(msg); + } + break; + } + case EEvtEditorCmdShowAll: + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterAll ); + UpdateViewL(); + break; + } + case EEvtEditorCmdShowDrafts: + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterDraft ); + UpdateViewL(); + break; + } + case EEvtEditorCmdShowActive: + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterActive ); + UpdateViewL(); + break; + } + case EEvtEditorCmdShowCompleted: + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterCompleted ); + UpdateViewL(); + break; + } + case EEvtEditorCmdActivate: + { + iEvtStatus = EActive; + iWaitState = EWaitDlgLaunchToChangeStatus; + StartWaitDialogL(); + break; + } + case EEvtEditorCmdSaveDraft: + { + iEvtStatus = EDraft; + iWaitState = EWaitDlgLaunchToChangeStatus; + StartWaitDialogL(); + break; + } + case EAknCmdMark: + case EAknSoftkeyMark: + { + if(currentItemIndex != KErrNotFound) + { + iContainer->HandleMarkCmdL(currentItemIndex, ETrue); + HandleCmdL( EListBoxItemFocused ); + } + break; + } + case EAknCmdUnmark: + case EAknSoftkeyUnmark: + { + if(currentItemIndex != KErrNotFound) + { + iContainer->HandleMarkCmdL(currentItemIndex, EFalse); + HandleCmdL( EListBoxItemFocused ); + } + break; + } + case EAknMarkAll: + { + iContainer->HandleMarkCmdL(KErrNotFound, ETrue); + HandleCmdL( EListBoxItemFocused ); + break; + } + case EAknUnmarkAll: + { + iContainer->HandleMarkCmdL(KErrNotFound, EFalse); + HandleCmdL( EListBoxItemFocused ); + } + break; + case EEvtEditorCmdNavigateToPlace: + { + HandleNavigateToPlaceCommandL(); + break; + } + case EEvtEditorCmdShowOnMap: + { + HandleShowOnMapCommandL(); + break; + } + case EEvtMgmtUiEventUiPosSettings: + { + if(!iPosSetLauncher) + { + iPosSetLauncher = CEvtMgmtUiLocSettingsLauncher::NewL(); + } + iPosSetLauncher->LaunchL(); + break; + } + case EAknCmdHelp: + { + HlpLauncher::LaunchHelpApplicationL( iCoeEnv->WsSession(), + AppUi()->AppHelpContextL()); + break; + } + default: + { + AppUi()->HandleCommandL( aCommand ); + break; + } + } + EVTUIDEBUG("- CEvtMgmtUiStartupView::HandleCommandL"); + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::ChangeEventStatus +// Change status of the event +// param[in] aStatus - value to which event status should be changed +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::ChangeEventStatusL( TEvtEventStatus aStatus ) + { + TInt cnt = iContainer->NumberOfMarkedItems(); + TInt index; + if(iEvtIdArray) + iEvtIdArray->Reset(); + else + iEvtIdArray = new(ELeave) RArray(); + + if(cnt) + { + iDisplayNote = EFalse; + EVTUIDEBUG1("CEvtMgmtUiStartupView::ChangeEventStatusL() selected items = %d", cnt ); + const CArrayFix* evtarray = iContainer->MarkItems(); + TInt itemIndex = 0; + for(index=0;indexFilteredIndex((*evtarray)[index]); + EVTUIDEBUG1("CEvtMgmtUiStartupView::ChangeEventStatusL() listboxindexid = %d", itemIndex); + EVTUIDEBUG1("Changing status of event Event id = %u", EventId(itemIndex) ); + + //retrieve event details from model + CEvtBasicEventInfo& event = iModel->EventFromModel(itemIndex); + + if( aStatus == EActive ) + { + //if manadatory fields are empty, display info note + if( event.Subject().Compare(KNullDesC)==0 || event.Place().Compare(KNullDesC)==0 ) + { + iDisplayNote = ETrue; + } + else + { + //if event is not having state to which it is supposed to change + // then add it to id-list + if( event.EventStatus() != aStatus ) + iEvtIdArray->Append( event.EventId() ); + } + } + else + { + //if event is not having state to which it is supposed to change + // then add it to id-list + if( event.EventStatus() != aStatus ) + iEvtIdArray->Append( event.EventId() ); + } + } + if(iEvtIdArray->Count()) + { + iEngine->SetEventsStateL( aStatus, iEvtIdArray ); + } + else + { + iWaitState = EWaitDlgDestroy; + } + HandleCommandL(EAknUnmarkAll); + } + else + { + TInt currentItemIndex = iContainer->CurrentItemIndex(); + if(aStatus == EActive) + { + if( iModel->EventFromModel(currentItemIndex).Subject().Compare(KNullDesC)==0 || + iModel->EventFromModel(currentItemIndex).Place().Compare(KNullDesC)==0 ) + { + + HBufC* warningMsg = StringLoader::LoadLC( R_EVTUI_MANDATORYFIELDS_WARNING, iCoeEnv ); + CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL(*warningMsg); + dlg->PrepareLC(R_EVTUI_MESSAGE_QUERY); + dlg->RunLD(); + CleanupStack::PopAndDestroy(warningMsg); + return; + } + } + iEvtIdArray->Append( EventId( currentItemIndex ) ); + iEngine->SetEventsStateL(aStatus, iEvtIdArray ); + } + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::ShowEvents +// Show all events with given status +// param[in] aStatusFilter - status filter to display events +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::ShowEventsL( CEvtMgmtUiEngine::TEvtEventStatusFilter aStatusFilter ) + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + iModel->SetStatusFilter( aStatusFilter ); + UpdateViewL(); + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::EnableMapFunctionalityL +// Check wether map functionality can be disabled. +// ret ETrue if map functionality should be enabled else EFalse +// --------------------------------------------------------------------------- +// +TBool CEvtMgmtUiStartupView::EnableMapFunctionalityL( ) + { + EVTUIDEBUG("+ CEvtMgmtUiStartupView::DisableMapFunctionality()" ); + CEvtMgmtUiMapNavigationAdapter* map = CEvtMgmtUiMapNavigationAdapter::NewL(); + CleanupStack::PushL(map); + //if no map service provider + if ( map->MapServiceProvidersL() == 0 ) + { + CleanupStack::PopAndDestroy(); //map + EVTUIDEBUG("- CEvtMgmtUiStartupView::DisableMapFunctionality() EFalse" ); + return EFalse; + } + + //Retrieve coordinate info + TCoordinate loc; + iEngine->RetrieveLocationL( iModel->EventId( iContainer->CurrentItemIndex() ), loc ); + CleanupStack::PopAndDestroy(); //map + + if( Math::IsNaN( loc.Latitude() ) || Math::IsNaN( loc.Latitude() ) + || loc.Latitude() == 0 || loc.Latitude() == 0 ) + { //if loc is not defined or it is not coordinate based + EVTUIDEBUG("- CEvtMgmtUiStartupView::DisableMapFunctionality() EFalse" ); + return EFalse; + } + else + { + EVTUIDEBUG("- CEvtMgmtUiStartupView::DisableMapFunctionality() ETrue" ); + return ETrue; + } + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::DynInitMenuPaneL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + iContainer->HandleMarkableListDynInitMenuPane( aResourceId, aMenuPane ); + + TInt index = iContainer->CurrentItemIndex(); + TInt markItems = iContainer->NumberOfMarkedItems(); + switch ( aResourceId ) + { + case R_EVTMGMTUI_STARTUP_MAINVIEWMENU: + { + // Order is + // 1. Marked + // 2. Index + // 3. Total Events + + if(iContainer->NumberOfMarkedItems() == 0) // no item is marked + { + //if no events then disable 'show' + if( iModel->TotalEvents() ) + { + TEvtEventsStatusMask mask = iModel->EventsStatus(); + + switch( mask ) + { + case CEvtMgmtUiModel::EEvtShowAttributeActive: + case CEvtMgmtUiModel::EEvtShowAttributeDraft: + case CEvtMgmtUiModel::EEvtShowAttributeCompleted: + aMenuPane->SetItemDimmed( EEvtMgmtUiEventUiEvtShow, ETrue ); + break; + default: + aMenuPane->SetItemDimmed( EEvtMgmtUiEventUiEvtShow, EFalse ); + break; + } + } + else + aMenuPane->SetItemDimmed( EEvtMgmtUiEventUiEvtShow, ETrue ); + + + //if focus on 'create event' + if( index == 0 ) + { + aMenuPane->SetItemDimmed( EEvtMgmtUiStartupViewOpen, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdDelete, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, ETrue ); + aMenuPane->SetItemDimmed(EEvtEditorCmdNavigateToPlace, ETrue); + aMenuPane->SetItemDimmed(EEvtEditorCmdShowOnMap, ETrue); + } + else + { + if( iModel->TotalEvents() ) //if events are present + { + aMenuPane->SetItemDimmed( EEvtMgmtUiStartupViewOpen, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdDelete, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, EFalse ); + + //change status + switch(iModel->EventFromModel(index).EventStatus()) + { + case EActive: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); // State + break; + } + case EDraft: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, ETrue ); // State + if( !iModel->MandatoryFieldsFilled(index)) + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); + break; + } + default: + break; + } + + // if support for map functionality is there + if( EnableMapFunctionalityL() ) + { + aMenuPane->SetItemDimmed(EEvtEditorCmdNavigateToPlace, EFalse); + aMenuPane->SetItemDimmed(EEvtEditorCmdShowOnMap, EFalse); + } + else + { + aMenuPane->SetItemDimmed(EEvtEditorCmdNavigateToPlace, ETrue); + aMenuPane->SetItemDimmed(EEvtEditorCmdShowOnMap, ETrue); + } + } + else + { + aMenuPane->SetItemDimmed( EEvtMgmtUiStartupViewOpen, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdDelete, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, ETrue ); + aMenuPane->SetItemDimmed(EEvtEditorCmdNavigateToPlace, ETrue); + aMenuPane->SetItemDimmed(EEvtEditorCmdShowOnMap, ETrue); + } + } + } + else // if there are marked items + { + aMenuPane->SetItemDimmed( EEvtMgmtUiEventUiEvtShow, ETrue ); + aMenuPane->SetItemDimmed( EEvtMgmtUiStartupViewCreate, ETrue ); + aMenuPane->SetItemDimmed( EEvtMgmtUiStartupViewOpen, ETrue ); + aMenuPane->SetItemDimmed(EEvtEditorCmdNavigateToPlace, ETrue); + aMenuPane->SetItemDimmed(EEvtEditorCmdShowOnMap, ETrue); + + switch(MarkedEventsStatus()) + { + case EMarkedEventsStatusDraft: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, ETrue ); + } + break; + case EMarkedEventsStatusActive: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, EFalse ); + } + break; + case EMarkedEventsStatusCompleted: + default: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, EFalse ); + } + break; + } + } + + break; + } + case R_EVTMGMTUI_STARTUP_EVTSHOWMENU: + { + TEvtEventsStatusMask mask = iModel->EventsStatus(); + + aMenuPane->SetItemDimmed( EEvtEditorCmdShowAll, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdShowActive, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdShowDrafts, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdShowCompleted, EFalse ); + + switch( iModel->StatusFilter() ) + { + case CEvtMgmtUiEngine::EEvtFilterActive: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdShowActive, ETrue ); + break; + } + case CEvtMgmtUiEngine::EEvtFilterDraft: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdShowDrafts, ETrue ); + break; + } + case CEvtMgmtUiEngine::EEvtFilterCompleted: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdShowCompleted, ETrue ); + break; + } + case CEvtMgmtUiEngine::EEvtFilterAll: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdShowAll, ETrue ); + break; + } + default: + break; + } + + if( !(mask & CEvtMgmtUiModel::EEvtShowAttributeActive) ) + aMenuPane->SetItemDimmed( EEvtEditorCmdShowActive, ETrue ); + if( !(mask & CEvtMgmtUiModel::EEvtShowAttributeDraft) ) + aMenuPane->SetItemDimmed( EEvtEditorCmdShowDrafts, ETrue ); + if( !(mask & CEvtMgmtUiModel::EEvtShowAttributeCompleted) ) + aMenuPane->SetItemDimmed( EEvtEditorCmdShowCompleted, ETrue ); + + break; + } + case R_EVTMGMTUI_STARTUP_CHANGESTATUSMENU: + { + + switch(MarkedEventsStatus()) + { + case EMarkedEventsStatusDraft: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, ETrue ); + } + break; + case EMarkedEventsStatusActive: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, ETrue ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, EFalse ); + } + break; + case EMarkedEventsStatusCompleted: + default: + { + aMenuPane->SetItemDimmed( EEvtEditorCmdActivate, EFalse ); + aMenuPane->SetItemDimmed( EEvtEditorCmdSaveDraft, EFalse ); + } + break; + } + } + break; + case R_EVTMGMTUI_STARTUP_APPMENU: + { + HandleHelpFeature(*aMenuPane); + } + break; + default: + break; + } + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::HandleHelpFeature +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::HandleHelpFeature( CEikMenuPane& aMenuPane ) const + { + // The Help menu item must be displayed only if the Feature is supported. + // If not, the Help item must be dimmed in the Options menu. + if ( FeatureManager::FeatureSupported( KFeatureIdHelp )) + { + aMenuPane.SetItemDimmed( EAknCmdHelp, EFalse ); + } + else + { + aMenuPane.SetItemDimmed( EAknCmdHelp, ETrue ); + } + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::DeleteEventL() +// It will delete event from database +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::DeleteEventL() + { + TInt cnt = iContainer->NumberOfMarkedItems(); + TInt index; + if(iEvtIdArray) + iEvtIdArray->Reset(); + else + iEvtIdArray = new(ELeave) RArray(); + if(cnt) + { + EVTUIDEBUG1("CEvtMgmtUiStartupView::DeleteEventL() selected items = %d", cnt ); + + const CArrayFix* evtarray = iContainer->MarkItems(); + for(index=0;indexFilteredIndex((*evtarray)[index]); + EVTUIDEBUG1("CEvtMgmtUiStartupView::DeleteEventL() listboxindexid = %d", orginalIndex ); + EVTUIDEBUG1("Deleting event Event id = %d", EventId( orginalIndex ) ); + iEvtIdArray->Append( EventId( orginalIndex ) ); + } + iEngine->DeleteEventsL( iEvtIdArray ); + } + else + { + index = iContainer->CurrentItemIndex(); + EVTUIDEBUG1("CEvtMgmtUiStartupView::DeleteEventL() listboxindexid = %d", index ); + if(index==KErrNotFound) + return; + EVTUIDEBUG1("Deleting event Event id = %d", EventId(index) ); + iEvtIdArray->Append( EventId( index ) ); + iEngine->DeleteEventsL( iEvtIdArray ); + } + } + +// ----------------------------------------------------------------------------- +// CEvtMgmtUiEditorCmdHandler::DisplayConfirmationQueryDlg() +// It shows confirmation query dialog +// ----------------------------------------------------------------------------- +// +TBool CEvtMgmtUiStartupView::DisplayConfirmationQueryDlgL( const TDesC& aMsg ) + { + TBool response= EFalse; + CAknQueryDialog* confirmationQuery = CAknQueryDialog::NewL(); + response = confirmationQuery->ExecuteLD(R_EVTUI_CONFIRMATION_QUERY, aMsg); + return response; + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::UpdateViewL() +// It will update view +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::UpdateViewL( ) + { + TInt index = iModel->UpdatedCurrentItemIndex( ); + + iContainer->UpdateListBoxL( index ); + + HandleCmdL( EListBoxItemFocused ); + + if(iModel->TotalEvents()) + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR_MARK ); + else + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR ); + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::HandleCmdL() +// Derived from MEvtMgmtUiEditorExitCmdHandler +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::HandleCmdL( TEvtMgmtUiCmd aCommand ) + { + + switch( aCommand ) + { + // Handle any plug-in specific internal commands here + case EListBoxItemDoubleClicked: + { + if( iContainer->NumberOfMarkedItems() ) + { + TRAPD( err, MenuBar()->TryDisplayContextMenuBarL() ); + User::LeaveIfError( err ); + } + else + { + TInt index = iContainer->CurrentItemIndex(); + if(index>0) + { + HandleCommandL(EEvtMgmtUiStartupViewOpen); + } + else + { + HandleCommandL(EEvtMgmtUiStartupViewCreate); + } + } + break; + } + case EListBoxItemFocused: + { + if(iIsEmbeddedApp) + { + if(iContainer->NumberOfMarkedItems()) + { + MenuBar()->SetContextMenuTitleResourceId( R_EVTMGMTUI_STARTUP_CONTEXTMENUBAR ); + SetCba(R_EVTMGMTUI_STARTUP_CBA_OPTIONS_EMBEDDED); + } + else + { + if( 0 == iContainer->CurrentItemIndex() ) + SetCba(R_EVTMGMTUI_STARTUP_CBA_EMBEDDED); + else + SetCba(R_EVTMGMTUI_STARTUP_CBA_OPEN_EMBEDDED); + } + } + else + { + if(iContainer->NumberOfMarkedItems()) + { + MenuBar()->SetContextMenuTitleResourceId( R_EVTMGMTUI_STARTUP_CONTEXTMENUBAR ); + SetCba(R_EVTMGMTUI_STARTUP_CBA_OPTIONS); + } + else + { + if( 0 == iContainer->CurrentItemIndex() ) + SetCba(R_EVTMGMTUI_STARTUP_CBA); + else + SetCba(R_EVTMGMTUI_STARTUP_CBA_OPEN); + } + } + break; + } + case EScreenSizeChanged: + { + if( iContainer ) + { + iContainer->SetRect( ClientRect()); + } + break; + } + case EListBoxItemDeleted: + { + HandleCommandL( EEvtEditorCmdDelete ); + break; + } + case EListBoxFilterCountChanged: + { + if( iContainer->FilteredCount() > 1 ) + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR_MARK ); + else + MenuBar()->SetMenuTitleResourceId ( R_EVTMGMTUI_STARTUP_MENUBAR ); + break; + } + default: + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::SetCba +// ----------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::SetCba( TInt aResourceId ) + { + if( Cba() ) + { + TRAP_IGNORE(Cba()->SetCommandSetL(aResourceId)); + } + Cba()->DrawDeferred(); + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::EventIdOfCurrentItem() +// It will return the event-id of the selected item +// --------------------------------------------------------------------------- +// +TEvtEventId CEvtMgmtUiStartupView::EventIdOfCurrentItem() + { + TInt index = iContainer->CurrentItemIndex(); + return iModel->EventId( index ); + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::EventId() +// It will return the event id of event +// --------------------------------------------------------------------------- +// +TEvtEventId CEvtMgmtUiStartupView::EventId( TInt aIndex ) + { + return iModel->EventId( aIndex ); + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::MarkedEventsStatus() +// It will return type of marked events +// --------------------------------------------------------------------------- +// +TInt CEvtMgmtUiStartupView::MarkedEventsStatus() + { + TInt index=0; + TInt cnt = iContainer->NumberOfMarkedItems(); + const CArrayFix* evtarray = iContainer->MarkItems(); + + TInt orginalIndex = iContainer->FilteredIndex((*evtarray)[index]); + TMarkedEventsStatus status = static_cast(iModel->EventStatus(orginalIndex)); + for( index = 1; indexFilteredIndex((*evtarray)[index]); + if( status != iModel->EventStatus( orginalIndex ) ) + { + return EMarkedEventsStatusMix; + } + } + return status; + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::NotifyEventChangeL() +// Derived from MEvtMgmtUiEngineObserver +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::NotifyEventChangeL(TInt aErrorCode, TInt aState ) + { + if( aErrorCode == KErrServerTerminated || + aErrorCode == KErrServerBusy || + aErrorCode == KErrNotReady || + aErrorCode == KErrNoMemory || aErrorCode == KErrDiskFull ) + { + TPtrC buf; + CTextResolver* textResolver = CTextResolver::NewLC(*iCoeEnv); + buf.Set(textResolver->ResolveErrorString(aErrorCode)); + + CAknErrorNote* dialog = + new(ELeave)CAknErrorNote(ETrue); + dialog->SetTone(CAknNoteDialog::EErrorTone); + dialog->ExecuteLD( buf ); + + CleanupStack::PopAndDestroy( textResolver ); + + EVTUIDEBUG("Exiting application as server is not ready." ); + // The User has exited the application using the Exit option from + //.Options menu. But, thats possible only if we exit the application + // with EAknCmdExit. + // A bit of convoluted logic but needed because we are using the + // same components for the Settings UI Server as well as LC. + + CEikonEnv* env = CEikonEnv::Static(); + CEikAppServer* server = env->AppServer(); + if ( server ) + { + server->NotifyServerExit( EAknCmdExit ); + } + CAknAppUi* appUi = static_cast< CAknAppUi* >( env->AppUi()); + appUi->RunAppShutter(); + return; + } + + if( aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDelete || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDeleteTriggers || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterSetTriggersState || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterSetTriggerState ) + { + EVTUIDEBUG1("+ CEvtMgmtUiStartupView::NotifyEventChangeL error =%d", aErrorCode ); + + iWaitState = EWaitDlgDestroy; + if(aErrorCode != KErrNone && aErrorCode != KErrCancel) + { + TBuf<32> err; + err.Copy(_L("Error =")); + err.AppendNum( aErrorCode ); + CEikonEnv::Static()->AlertWin(err); + } + + EVTUIDEBUG("- CEvtMgmtUiStartupView::NotifyEventChangeL"); + } + + + if( aState == CEvtMgmtUiLbtAdapter::ELbtAdapterSetTriggersState || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterSetTriggerState || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterCreate || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterUpdate || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDelete || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDeleteTriggers ) + { + if( iModel && iContainer ) + { + iModel->SetCurrentItemId( iContainer->CurrentItemIndex() ); + if( !( aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDelete || + aState == CEvtMgmtUiLbtAdapter::ELbtAdapterDeleteTriggers ) ) + { + iModel->SetStatusFilter( CEvtMgmtUiEngine::EEvtFilterAll ); + } + } + } + } + +// --------------------------------------------------------------------------- +// CEvtMgmtUiStartupView::NotifyModelChangeL() +// Derived from MEvtMgmtUiEngineObserver +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::NotifyModelChangeL() + { + iEngine->UpdateModelL(iModel->EventsArray(), CEvtMgmtUiEngine::EEvtFilterAll ); + iModel->UpdateEventsStatus( ); + UpdateViewL( ); + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::StartWaitDialogL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::StartWaitDialogL() + { + HBufC* waitText = NULL; + TInt cnt = iContainer->NumberOfMarkedItems(); + if(cnt>1) + { + if( iWaitState == EWaitDlgLaunchToDelete ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_MULTIPLEEVT_DELETE, CEikonEnv::Static() ); + if( iWaitState == EWaitDlgLaunchToChangeStatus && iEvtStatus == EActive ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_MULTIPLEEVT_ACTIVATE, CEikonEnv::Static() ); + if( iWaitState == EWaitDlgLaunchToChangeStatus && iEvtStatus == EDraft ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_MULTIPLEEVT_DRAFT, CEikonEnv::Static() ); + } + else + { + if( iWaitState == EWaitDlgLaunchToDelete ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_SINGLEEVT_DELETE, CEikonEnv::Static() ); + if( iWaitState == EWaitDlgLaunchToChangeStatus && iEvtStatus == EActive ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_SINGLEEVT_ACTIVATE, CEikonEnv::Static() ); + if( iWaitState == EWaitDlgLaunchToChangeStatus && iEvtStatus == EDraft ) + waitText = StringLoader::LoadLC(R_LOCEV_NOTE_SINGLEEVT_DRAFT, CEikonEnv::Static() ); + } + + CAknWaitNoteWrapper* waitNoteWrapper = CAknWaitNoteWrapper::NewL(); + // Required reinterpret_cast as CAknWaitNoteWrapper inherits privately from CActive + CleanupStack::PushL(reinterpret_cast(waitNoteWrapper)); + + // This is a blocking call, remember the wrapper isn't a dialog, so it doesn't need the + // EEikDialogFlagWait flag to make it blocking + waitNoteWrapper->ExecuteL(R_EVTMGMTUI_WAITDLG_CANCEL, *this, *waitText, ETrue); // this is a blocking call, remember the wrapper isn't a dialog, so it doesn't need the EEikDialogFlagWait flag to make it blocking + + CleanupStack::PopAndDestroy(2); //waitText, waitNoteWrapper + + if(iDisplayNote ) + { + iDisplayNote = EFalse; + HBufC* warningMsg = StringLoader::LoadLC( R_EVTUI_MANDATORYFIELDS_WARNING, iCoeEnv ); + CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *warningMsg ); + dlg->PrepareLC(R_EVTUI_MESSAGE_QUERY); + dlg->RunLD(); + CleanupStack::PopAndDestroy(warningMsg); + } + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::DialogDismissedL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::DialogDismissedL(TInt aButtonId) + { + if(aButtonId == EEikBidCancel) + iEngine->CancelRequest();// Cancel + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::IsProcessDone +// --------------------------------------------------------------------------- +// +TBool CEvtMgmtUiStartupView::IsProcessDone() const + { + if(iWaitState == EWaitDlgDestroy) + return ETrue; + else + return EFalse; + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::ProcessFinished +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::ProcessFinished() + { + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::StepL +// --------------------------------------------------------------------------- +// +void CEvtMgmtUiStartupView::StepL() + { + if(iWaitState == EWaitDlgLaunchToDelete) + { + iWaitState = EWaitDlgInitiateProcess; + DeleteEventL(); + } + if(iWaitState == EWaitDlgLaunchToChangeStatus) + { + iWaitState = EWaitDlgInitiateProcess; + ChangeEventStatusL(iEvtStatus); + } + } + +// --------------------------------------------------------------------------- +// void CEvtMgmtUiStartupView::StepL +// --------------------------------------------------------------------------- +// +TInt CEvtMgmtUiStartupView::CycleError(TInt aError) + { + if(aError != KErrNone) + { + CEikonEnv::Static()->AlertWin(KWaitCycleError()); + iWaitState = EWaitDlgDestroy; + } + return KErrNone; + } + +// End of File +