phonebookui/Phonebook2/NamesListExtension/src/Pbk2NlxMenuFiltering.cpp
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /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