phonebookui/Phonebook/View/src/CPbkPhonebookInfoDlg.cpp
changeset 0 e686773b3f54
child 21 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkPhonebookInfoDlg.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,377 @@
+/*
+* Copyright (c) 2002 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: 
+*       Provides methods for Phonebook Info view UI control.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkPhonebookInfoDlg.h"
+
+#include <PbkView.rsg>
+#include <CPbkContactEngine.h>
+#include <StringLoader.h>
+#include <aknPopup.h>
+#include <aknlists.h>
+#include <StringLoader.h>
+
+
+/// Unnamed namespace for local definitions
+namespace
+    {
+    // LOCAL CONSTANTS AND MACROS
+    _LIT( KNumberFormat, "%d" );
+    _LIT( KSeparator, "\t" );
+    const TUint KItemCount = 4;
+    const TInt KKByte = 1024;
+    const TUint KMaxInfoPopupWidth = 16;
+    const TUint KSeparatorSize = 1;
+    }
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// inline because only one call site
+inline CPbkPhonebookInfoDlg::CPbkPhonebookInfoDlg
+        (CPbkContactEngine& aEngine) :
+    iEngine(aEngine), iContactsViewReady(EFalse),
+    iGroupsViewReady(EFalse)
+    {
+    }
+
+
+CPbkPhonebookInfoDlg::~CPbkPhonebookInfoDlg()
+    {
+	if(iDestroyed)
+		{
+		*iDestroyed = ETrue;
+		}
+	delete iListBox;
+
+    if (iAllGroupsView)
+        {
+        iAllGroupsView->Close(*this);
+        }
+    if (iAllContactsView)
+        {
+        iAllContactsView->Close(*this);
+        }
+    }
+
+// inline because only one call site
+inline void CPbkPhonebookInfoDlg::ConstructL()
+    {
+    // Attach to contact views
+    CContactViewBase& allContactsView = iEngine.AllContactsView();
+    allContactsView.OpenL(*this);
+    iAllContactsView = &allContactsView;
+
+    CContactViewBase& allGroupsView = iEngine.AllGroupsViewL();
+    allGroupsView.OpenL(*this);
+    iAllGroupsView = &allGroupsView;
+
+	iListBox = new(ELeave) CAknSingleHeadingPopupMenuStyleListBox;
+	iPopupList = CAknPopupList::NewL(iListBox,
+								R_AVKON_SOFTKEYS_OK_EMPTY,
+                                AknPopupLayouts::EMenuGraphicHeadingWindow);
+	iListBox->ConstructL(iPopupList, EAknListBoxViewerFlags);
+
+    // Set title
+	HBufC* title = StringLoader::LoadLC(R_QTN_PHOB_QTL_PB_INFO);
+	SetTitleL(*title);
+	CleanupStack::PopAndDestroy(); // title
+
+    UpdateDataL();
+
+    iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL
+        (CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+    }
+
+EXPORT_C CPbkPhonebookInfoDlg* CPbkPhonebookInfoDlg::NewL
+        (CPbkContactEngine& aEngine)
+    {
+    CPbkPhonebookInfoDlg* self = new(ELeave) CPbkPhonebookInfoDlg(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+EXPORT_C void CPbkPhonebookInfoDlg::ExecuteLD()
+    {
+	CleanupStack::PushL(this);
+	TBool thisDestroyed(EFalse);
+	iDestroyed = &thisDestroyed;
+	
+    TRAPD(err, iPopupList->ExecuteLD());
+    
+    // Just in case
+	if(!thisDestroyed)
+		{
+		iPopupList = NULL;
+		}
+
+	User::LeaveIfError(err);
+
+    if(thisDestroyed)
+		{
+		CleanupStack::Pop(); // this
+		}
+	else
+		{
+		CleanupStack::PopAndDestroy(); // this
+		}
+	iDestroyed = NULL;
+    }
+
+void CPbkPhonebookInfoDlg::HandleContactViewEvent
+        (const CContactViewBase& aView,
+        const TContactViewEvent& aEvent)
+    {
+    // It's safe to ignore errors
+    TRAP_IGNORE(HandleContactViewEventL(aView,aEvent));
+    }
+
+void CPbkPhonebookInfoDlg::HandleContactViewEventL
+        (const CContactViewBase& aView,
+        const TContactViewEvent& aEvent)
+    {
+    switch (aEvent.iEventType)
+        {
+        case TContactViewEvent::EReady:             // FALLTHROUGH
+        case TContactViewEvent::ESortOrderChanged:  // FALLTHROUGH
+        case TContactViewEvent::EItemAdded:         // FALLTHROUGH
+        case TContactViewEvent::EItemRemoved:
+            {
+            if (&aView == iAllContactsView)
+                {
+                iContactsViewReady = ETrue;
+                }
+            else if (&aView == iAllGroupsView)
+                {
+                iGroupsViewReady = ETrue;
+                }
+            UpdateDataL();
+            break;
+            }
+
+        default:
+            {
+            if (&aView == iAllContactsView)
+                {
+                iContactsViewReady = EFalse;
+                }
+            else if (&aView == iAllGroupsView)
+                {
+                iGroupsViewReady = EFalse;
+                }
+            break;
+            }
+        }
+    }
+
+
+void CPbkPhonebookInfoDlg::SetTitleL(const TDesC &aTitle)
+	{
+	iPopupList->SetTitleL(aTitle);
+	}
+
+MDesCArray* CPbkPhonebookInfoDlg::ConstructDataArrayL()
+	{
+	CDesCArray* array = new(ELeave) CDesCArrayFlat(KItemCount);
+	CleanupStack::PushL(array);
+
+	// Names
+	HBufC* contacts = ContactsEntryLC();
+	array->AppendL(*contacts);
+	CleanupStack::PopAndDestroy(contacts);
+
+	// Groups
+	HBufC* groups = GroupsEntryLC();
+	array->AppendL(*groups);
+	CleanupStack::PopAndDestroy(groups);
+
+    // Used memory
+	HBufC* usedMem = UsedMemoryEntryLC();
+	array->AppendL(*usedMem);
+	CleanupStack::PopAndDestroy(usedMem);
+
+    // Free memory
+	HBufC* freeMem = FreeMemoryEntryLC();
+	array->AppendL(*freeMem);
+	CleanupStack::PopAndDestroy(freeMem);
+
+	CleanupStack::Pop(array); 
+	return array;
+	}
+
+HBufC* CPbkPhonebookInfoDlg::ContactsEntryLC()
+	{
+    HBufC* dataStr = NULL;
+
+    if (iContactsViewReady)
+        {
+        // Get contact count
+        const TInt contacsCount = iAllContactsView->CountL();
+
+        // Format contacts string
+        HBufC* contactsText = NULL;
+        if (contacsCount == 1)
+            {
+            contactsText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_ONE_NAME);
+            }
+        else
+            {
+            contactsText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_NAMES);
+            }
+
+        // Format value string
+        TBuf<KMaxInfoPopupWidth> valueStr;
+        valueStr.Format(KNumberFormat, contacsCount);
+
+        // Format the string to be returned
+	    dataStr = HBufC::NewL(contactsText->Length() +
+            KSeparatorSize + valueStr.Length());
+	    TPtr dataPtr(dataStr->Des());
+	    dataPtr.Append(valueStr);
+        // Convert digits
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion(dataPtr);
+	    dataPtr.Append(KSeparator);
+	    dataPtr.Append(*contactsText);
+
+        CleanupStack::PopAndDestroy(contactsText);
+        }
+    else
+        {
+        dataStr = HBufC::NewL(KNullDesC().Length());
+    	TPtr dataPtr(dataStr->Des());
+	    dataPtr = KNullDesC;
+        }
+
+    CleanupStack::PushL(dataStr);
+    return dataStr;
+	}
+
+HBufC* CPbkPhonebookInfoDlg::GroupsEntryLC()
+	{
+    HBufC* dataStr = NULL;
+
+    if (iGroupsViewReady)
+        {
+        // Get group count
+        const TInt groupCount = iAllGroupsView->CountL();
+
+        // Format group string
+        HBufC* groupsText = NULL;
+        if (groupCount == 1)
+            {
+            groupsText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_ONE_GROUP);
+            }
+        else
+            {
+            groupsText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_GROUPS);
+            }
+
+        // Format value string
+        TBuf<KMaxInfoPopupWidth> valueStr;
+        valueStr.Format(KNumberFormat, groupCount);
+
+        // Format the string to be returned
+	    dataStr = HBufC::NewL(groupsText->Length() +
+            KSeparatorSize + valueStr.Length());
+	    TPtr dataPtr(dataStr->Des());
+	    dataPtr.Append(valueStr);
+        // Convert digits
+        AknTextUtils::DisplayTextLanguageSpecificNumberConversion(dataPtr);
+	    dataPtr.Append(KSeparator);
+	    dataPtr.Append(*groupsText);
+
+        CleanupStack::PopAndDestroy(groupsText);
+        }
+    else
+        {
+        dataStr = HBufC::NewL(KNullDesC().Length());
+    	TPtr dataPtr(dataStr->Des());
+	    dataPtr = KNullDesC;
+        }
+
+    CleanupStack::PushL(dataStr);
+    return dataStr;
+	}
+
+HBufC* CPbkPhonebookInfoDlg::UsedMemoryEntryLC()
+	{
+    // Format used memory amount
+    HBufC* usedMemoryAmount = StringLoader::LoadLC(R_QTN_SIZE_KB,
+        (iEngine.Database().FileSize() + KKByte/2) / KKByte);
+
+    // Format used memory string
+    HBufC* usedMemoryText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_RESERVED);
+
+    // Format the string to be returned
+	HBufC* dataStr = HBufC::NewL(usedMemoryText->Length() +
+        KSeparatorSize + usedMemoryAmount->Length());
+	TPtr dataPtr(dataStr->Des());
+	dataPtr.Append(*usedMemoryAmount);
+    // Convert digits
+    AknTextUtils::DisplayTextLanguageSpecificNumberConversion(dataPtr);
+	dataPtr.Append(KSeparator);
+	dataPtr.Append(*usedMemoryText);
+
+    CleanupStack::PopAndDestroy(2); // usedMemoryText, usedMemoryAmount
+    CleanupStack::PushL(dataStr);
+    return dataStr;
+	}
+
+HBufC* CPbkPhonebookInfoDlg::FreeMemoryEntryLC()
+	{
+    TVolumeInfo volInfo;
+    User::LeaveIfError(CCoeEnv::Static()->FsSession().Volume(volInfo,EDriveC));
+
+    // Format free memory amount
+    HBufC* freeMemoryAmount = StringLoader::LoadLC(R_QTN_SIZE_KB,
+        (I64LOW(volInfo.iFree) / KKByte));
+
+    // Format used memory string
+    HBufC* freeMemoryText = StringLoader::LoadLC(R_QTN_PHOB_PB_INFO_FREE);
+
+    // Format the string to be returned
+	HBufC* dataStr = HBufC::NewL(freeMemoryText->Length() +
+        KSeparatorSize + freeMemoryAmount->Length());
+	TPtr dataPtr(dataStr->Des());
+	dataPtr.Append(*freeMemoryAmount);
+    // Convert digits
+    AknTextUtils::DisplayTextLanguageSpecificNumberConversion(dataPtr);
+	dataPtr.Append(KSeparator);
+	dataPtr.Append(*freeMemoryText);
+
+    CleanupStack::PopAndDestroy(2); // freeMemoryText, freeMemoryAmount
+    CleanupStack::PushL(dataStr);
+    return dataStr;
+	}
+
+void CPbkPhonebookInfoDlg::UpdateDataL()
+    {
+    // Construct and set data
+	MDesCArray* array = ConstructDataArrayL();
+    if (iListBox)
+        {
+	    iListBox->Model()->SetItemTextArray(array);
+        iListBox->DrawNow();
+        }
+    }
+
+//  End of File