--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/NamesListExtension/src/Pbk2NlxMenuFiltering.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,288 @@
+/*
+* Copyright (c) 2005-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: Phonebook 2 menu filtering helper.
+*
+*/
+
+
+// INCLUDE FILES
+#include "Pbk2NlxMenuFiltering.h"
+
+#include <MPbk2ContactUiControl.h>
+#include <MPbk2ContactUiControl2.h>
+#include <CPbk2AppUiBase.h>
+#include <MPbk2ApplicationServices.h>
+#include <CVPbkContactManager.h>
+#include <VPbkContactStoreUris.h>
+#include <CVPbkTopContactManager.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkBaseContact.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+#include <CPbk2StoreConfiguration.h>
+#include <CVPbkContactStoreUriArray.h>
+#include <MVPbkContactView.h>
+#include <MPbk2ContactViewSupplier.h>
+#include <MPbk2ContactViewSupplier2.h>
+#include <MPbk2ContactLinkIterator.h>
+#include <MPbk2UiControlCmdItem.h>
+#include <Pbk2Commands.hrh>
+#include "pbk2nameslistex.hrh"
+
+
+const TInt KMinNumberOfTopContactsForRearranging = 2;
+
+TBool Pbk2NlxMenuFiltering::OpenReady( MPbk2ContactUiControl& aControl )
+ {
+
+ MPbk2ContactUiControl2* tempControl =
+ reinterpret_cast<MPbk2ContactUiControl2*>
+ (aControl.ContactUiControlExtension(KMPbk2ContactUiControlExtension2Uid ));
+
+ return (!(tempControl->FocusedCommandItem()) && (aControl.NumberOfContacts() > 0) &&
+ !aControl.ContactsMarked());
+ }
+
+TBool Pbk2NlxMenuFiltering::AddToFavoritesCmdSelected( MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactUiControl2* tempControl =
+ reinterpret_cast<MPbk2ContactUiControl2*>
+ (aControl.ContactUiControlExtension(KMPbk2ContactUiControlExtension2Uid ));
+
+ const MPbk2UiControlCmdItem* cmdItem = tempControl->FocusedCommandItem();
+ if ( cmdItem )
+ {
+ return cmdItem->CommandId() == EPbk2CmdAddFavourites;
+ }
+ return EFalse;
+ }
+
+TBool Pbk2NlxMenuFiltering::MyCardCmdSelected( MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactUiControl2* tempControl =
+ reinterpret_cast<MPbk2ContactUiControl2*>
+ (aControl.ContactUiControlExtension(KMPbk2ContactUiControlExtension2Uid ));
+
+ const MPbk2UiControlCmdItem* cmdItem = tempControl->FocusedCommandItem();
+ if ( cmdItem )
+ {
+ return cmdItem->CommandId() == EPbk2CmdOpenMyCard;
+ }
+ return EFalse;
+ }
+
+TBool Pbk2NlxMenuFiltering::RclCmdSelectOptSelected( MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactUiControl2* tempControl =
+ reinterpret_cast<MPbk2ContactUiControl2*>
+ (aControl.ContactUiControlExtension(KMPbk2ContactUiControlExtension2Uid ));
+
+ const MPbk2UiControlCmdItem* cmdItem = tempControl->FocusedCommandItem();
+ if ( cmdItem )
+ {
+ return cmdItem->CommandId() == EPbk2CmdRcl;
+ }
+ return EFalse;
+ }
+
+TBool Pbk2NlxMenuFiltering::ReadOnlyContactSelectedL( MPbk2ContactUiControl& aControl )
+ {
+ TBool result = EFalse;
+ const MVPbkBaseContact* contact = aControl.FocusedContactL();
+
+ if (contact)
+ {
+ // create link to get store
+ MVPbkContactLink* link = contact->CreateLinkLC();
+ result = link->ContactStore().StoreProperties().ReadOnly();
+ CleanupStack::PopAndDestroy();
+ }
+
+ return result;
+ }
+
+TBool Pbk2NlxMenuFiltering::TopReadyL( MPbk2ContactUiControl& aControl )
+ {
+ CVPbkContactStoreUriArray* currentConfig =
+ Phonebook2::Pbk2AppUi()->ApplicationServices().
+ StoreConfiguration().CurrentConfigurationL();
+ TBool phMemOk = currentConfig->IsIncluded(
+ VPbkContactStoreUris::DefaultCntDbUri() );
+ delete currentConfig;
+
+ return phMemOk &&
+ NonTopContactSelectedL( aControl ) &&
+ !ReadOnlyContactSelectedL( aControl );
+ }
+
+TBool Pbk2NlxMenuFiltering::TopContactSelectedL( MPbk2ContactUiControl& aControl )
+ {
+ TBool result = EFalse;
+ const MVPbkBaseContact* contact = aControl.FocusedContactL();
+
+ if (contact)
+ {
+ result = CVPbkTopContactManager::IsTopContact( *contact );
+ }
+ return result;
+ }
+
+TBool Pbk2NlxMenuFiltering::NonTopContactSelectedL( MPbk2ContactUiControl& aControl )
+ {
+ TBool result = EFalse;
+ const MVPbkBaseContact* contact = aControl.FocusedContactL();
+
+ if (contact)
+ {
+ result = !CVPbkTopContactManager::IsTopContact( *contact );
+ }
+ return result;
+ }
+
+TBool Pbk2NlxMenuFiltering::TopRearrangingReadyL(MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactViewSupplier2* viewSupplierExtension =
+ reinterpret_cast<MPbk2ContactViewSupplier2*>(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ViewSupplier().
+ MPbk2ContactViewSupplierExtension(
+ KMPbk2ContactViewSupplierExtension2Uid ));
+
+ if ( viewSupplierExtension != NULL && TopContactSelectedL( aControl ) )
+ {
+ const MVPbkContactViewBase* topView = viewSupplierExtension->
+ TopContactsViewL();
+ if ( topView )
+ {
+ return topView->ContactCountL() >= KMinNumberOfTopContactsForRearranging;
+ }
+ }
+ return EFalse;
+ }
+
+TBool Pbk2NlxMenuFiltering::TopContactMarkedL( MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactViewSupplier2* viewSupplierExtension =
+ reinterpret_cast<MPbk2ContactViewSupplier2*>(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ViewSupplier().
+ MPbk2ContactViewSupplierExtension(
+ KMPbk2ContactViewSupplierExtension2Uid ));
+
+ MVPbkContactViewBase* topView = NULL;
+ if ( viewSupplierExtension != NULL )
+ {
+ topView = viewSupplierExtension->TopContactsViewL();
+ }
+
+ TBool topIncluded = EFalse;
+ if ( topView )
+ {
+ MPbk2ContactLinkIterator* iterator =
+ aControl.SelectedContactsIteratorL();
+
+ if ( iterator )
+ {
+ CleanupDeletePushL( iterator );
+
+ while( iterator->HasNext()&& !topIncluded )
+ {
+ MVPbkContactLink* link = iterator->NextL();
+ CleanupDeletePushL( link );
+ if ( topView->IndexOfLinkL( *link ) >= 0 )
+ {
+ topIncluded = ETrue;
+ }
+
+ CleanupStack::PopAndDestroy();
+ }
+ CleanupStack::PopAndDestroy(); // iterator
+ }
+ }
+
+ return topIncluded;
+ }
+
+TBool Pbk2NlxMenuFiltering::NonTopContactMarkedL( MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactViewSupplier2* viewSupplierExtension =
+ reinterpret_cast<MPbk2ContactViewSupplier2*>(
+ Phonebook2::Pbk2AppUi()->ApplicationServices().ViewSupplier().
+ MPbk2ContactViewSupplierExtension(
+ KMPbk2ContactViewSupplierExtension2Uid ));
+
+ MVPbkContactViewBase* topView = NULL;
+ if ( viewSupplierExtension != NULL )
+ {
+ topView = viewSupplierExtension->TopContactsViewL();
+ }
+
+ TBool nonTopIncluded = EFalse;
+ if ( topView )
+ {
+ MPbk2ContactLinkIterator* iterator =
+ aControl.SelectedContactsIteratorL();
+
+ if ( iterator )
+ {
+ CleanupDeletePushL( iterator );
+
+ while( iterator->HasNext()&& !nonTopIncluded )
+ {
+ MVPbkContactLink* link = iterator->NextL();
+ CleanupDeletePushL( link );
+ if ( topView->IndexOfLinkL( *link ) == KErrNotFound )
+ {
+ nonTopIncluded = ETrue;
+ }
+ CleanupStack::PopAndDestroy();
+ }
+ CleanupStack::PopAndDestroy(); // iterator
+ }
+ }
+ else
+ {
+ nonTopIncluded = ETrue;
+ }
+
+ return nonTopIncluded;
+ }
+
+TBool Pbk2NlxMenuFiltering::CheckDeletableInMarkedContactsL(
+ MPbk2ContactUiControl& aControl )
+ {
+ MPbk2ContactLinkIterator* iterator =
+ aControl.SelectedContactsIteratorL();
+
+ TBool result = EFalse;
+
+ if ( iterator )
+ {
+ CleanupDeletePushL( iterator );
+
+ while( iterator->HasNext() && !result )
+ {
+ MVPbkContactLink* link = iterator->NextL();
+ if ( link &&
+ !link->ContactStore().StoreProperties().ReadOnly() )
+ {
+ result = ETrue;
+ }
+ delete link;
+ }
+ CleanupStack::PopAndDestroy(); // iterator
+ }
+
+ return result;
+ }
+
+// End of File