diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/CommandsExtension/src/CPbk2InfoDialogCmd.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2InfoDialogCmd.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,262 @@ +/* +* Copyright (c) 2002-2007 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: A command for launching phonebook info dialog +* +*/ + + + +// INCLUDE FILES +#include "CPbk2InfoDialogCmd.h" + +// Phonebook 2 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Virtual Phonebook +#include + +// System includes +#include +#include + +/// Unnamed namespace for local definitions +namespace { + +const TInt KOneValidStore = 1; + +enum TPbk2InfoDialogCmdState + { + EQuery, + ELaunchDialog, + EComplete + }; + +} /// namespace + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::CPbk2InfoDialogCmd +// -------------------------------------------------------------------------- +// +CPbk2InfoDialogCmd::CPbk2InfoDialogCmd + ( MPbk2ContactUiControl& /*aUiControl*/ ) : + CActive( EPriorityStandard ) + { + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::~CPbk2InfoDialogCmd +// -------------------------------------------------------------------------- +// +CPbk2InfoDialogCmd::~CPbk2InfoDialogCmd() + { + Cancel(); + delete iValidStores; + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::NewL +// -------------------------------------------------------------------------- +// +CPbk2InfoDialogCmd* CPbk2InfoDialogCmd::NewL( + MPbk2ContactUiControl& aUiControl) + { + CPbk2InfoDialogCmd* self = + new( ELeave ) CPbk2InfoDialogCmd(aUiControl); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::ConstructL +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::ConstructL() + { + CActiveScheduler::Add(this); + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::ExecuteLD +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::ExecuteLD() + { + IssueRequest(); + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::AddObserver +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::AddObserver(MPbk2CommandObserver& aObserver) + { + iCommandObserver = &aObserver; + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::ResetUiControl +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::ResetUiControl( + MPbk2ContactUiControl& /*aUiControl*/) + { + // Do nothing + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::RunL +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::RunL() + { + switch (iState) + { + case EQuery: + { + QueryL(); + break; + } + case ELaunchDialog: + { + LaunchDialogL(); + break; + } + case EComplete: // FALLTHROUGH + default: + { + iCommandObserver->CommandFinished(*this); + break; + } + } + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::DoCancel +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::DoCancel() + { + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::RunError +// -------------------------------------------------------------------------- +// +TInt CPbk2InfoDialogCmd::RunError(TInt aError) + { + HandleError(aError); + return KErrNone; + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::IssueRequest +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::IssueRequest() + { + TRequestStatus* status = &iStatus; + User::RequestComplete(status, KErrNone); + SetActive(); + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::HandleError +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::QueryL() + { + iState = EComplete; + + CPbk2ApplicationServices* appServices = CPbk2ApplicationServices::InstanceLC(); + + iValidStores = appServices->StoreValidityInformer().CurrentlyValidStoresL(); + const CPbk2StorePropertyArray& props = appServices->StoreProperties(); + + CleanupStack::PopAndDestroy(); // appServices + + TInt count = iValidStores->Count(); + // Remove stores that hasn't define memory info types + for (TInt i = count - 1; i >= 0; --i) + { + const CPbk2StoreProperty* prop = + props.FindProperty((*iValidStores)[i]); + if (!prop || (prop && prop->MemoryInfoTypes() == 0)) + { + iValidStores->Remove((*iValidStores)[i]); + } + } + + if (iValidStores->Count() > KOneValidStore) + { + HBufC* title = StringLoader::LoadLC + (R_QTN_PHOB_QUERY_TITLE_SELECT_MEM); + CPbk2StoreListQuery* query = CPbk2StoreListQuery::NewL(); + CleanupStack::PushL(query); + HBufC* allText = StringLoader::LoadLC + (R_QTN_PHOB_QUERY_SELECT_MEM_ALL); + query->SetAllItemTextL(*allText, ETrue); + CleanupStack::PopAndDestroy(allText); + CleanupStack::Pop(query); + + // Query modifies iTargetStoreUris -array. + // After the query the must be only one, the selected, store + if (query->ExecuteLD(*title, *iValidStores) == EAknSoftkeyOk) + { + iState = ELaunchDialog; + } + CleanupStack::PopAndDestroy(title); + } + else + { + iState = ELaunchDialog; + } + IssueRequest(); + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::LaunchDialogL +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::LaunchDialogL() + { + CPbk2PhonebookInfoDlg* dlg = CPbk2PhonebookInfoDlg::NewL(); + dlg->ExecuteLD(*iValidStores); + iState = EComplete; + IssueRequest(); + } + +// -------------------------------------------------------------------------- +// CPbk2InfoDialogCmd::HandleError +// -------------------------------------------------------------------------- +// +void CPbk2InfoDialogCmd::HandleError(TInt aError) + { + if (aError != KErrNone) + { + iCommandObserver->CommandFinished(*this); + CCoeEnv::Static()->HandleError(aError); + } + } + +// End of File