uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewcontainer.cpp
branchRCL_3
changeset 29 9a48e301e94b
parent 0 5e5d6b214f4f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewcontainer.cpp	Wed Sep 01 12:33:36 2010 +0100
@@ -0,0 +1,413 @@
+/*
+* Copyright (c) 2008 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:  Implementation of detailsview plugin control container
+ *
+*/
+
+
+// INCLUDE FILES
+#include "cvimpstdetailsviewcontainer.h"
+
+#include "cvimpstdetailsheadercontrol.h"
+#include "cvimpstdetailsviewlistboxmodel.h"
+#include "cvimpstdetailsviewbrandhandler.h"
+#include "mvimpstdetailspresencehandler.h"
+#include "cvimpstfieldpropertyarray.h"
+#include "cvimpstfieldproperty.h"
+#include "vimpstdetailsview.hrh"
+#include <vimpstdetailsviewpluginrsc.rsg>
+
+// System includes
+#include <aknlists.h>
+#include <bautils.h>
+#include <layoutmetadata.cdl.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsBasicBackgroundControlContext.h>
+// virtual phonebook 
+#include <MVPbkStoreContact.h>
+
+#include "vimpstextentionuiuid.h"
+#include "meco.hlp.hrh"
+
+_LIT(KVIMPSTDetailsViewDllResFileName, "\\resource\\vimpstdetailsviewpluginrsc.rsc" );
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::ConstructL()
+	{
+	// Create the listbox
+	RFs& fsSession( CCoeEnv::Static()->FsSession() );
+    TFileName fileName( KVIMPSTDetailsViewDllResFileName );
+    BaflUtils::NearestLanguageFile( fsSession , fileName);
+   
+    iResourceFile.OpenL(fsSession, fileName);
+    iResourceFile.ConfirmSignatureL();
+  
+    // Create the header
+    iHeaderCtrl = CVIMPSTDetailsHeaderControl::NewL( iBrandHandler, iPresenceHandler );
+    iHeaderCtrl->SetContainerWindowL( *this );
+
+     // Get the skin background for the view
+    iBackground = CAknsBasicBackgroundControlContext::NewL(
+        					KAknsIIDQsnBgAreaMain, TRect( 0, 0, 0, 0 ), EFalse );
+    
+    
+    iListBox = new(ELeave) CAknFormDoubleGraphicStyleListBox;
+
+	iListBox->ConstructL(this, EAknListBoxLoopScrolling);
+	iListBox->View()->SetListEmptyTextL(KNullDesC);
+	iListBox->SetContainerWindowL(*this);
+	iListBox->CreateScrollBarFrameL(ETrue);
+	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+	    CEikScrollBarFrame::EAuto);
+	iListBox->SetMopParent(this);
+
+	iListBox->ItemDrawer()->FormattedCellData()->EnableMarqueeL( ETrue );
+
+	CAknIconArray* iconArray = iBrandHandler.LoadIconsLC();
+	// Set icon array
+	iListBox->ItemDrawer()->ColumnData()->SetIconArray(iconArray);
+	CleanupStack::Pop(); // iconArray
+	
+    // Read field property resource strucutre array
+    HBufC8* fieldBuffer = iResourceFile.AllocReadLC( R_VIMPST_FIELD_PROPERTIES ) ;
+  	// reader ownership to model
+	iListBoxModel = CVIMPSTDetailsViewListBoxModel::NewL(*iListBox, iPresenceHandler, fieldBuffer);
+	CleanupStack::Pop(); // fieldBuffer
+	iListBox->Model()->SetItemTextArray(iListBoxModel);
+	iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
+
+	 //Set listbox observer
+    iListBox->SetListBoxObserver( this );
+	iListBox->ActivateL();
+ 
+    }
+        
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::CVIMPSTDetailsViewContainer()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewContainer::CVIMPSTDetailsViewContainer(const TUid& aPluginUid,
+														CVIMPSTDetailsViewBrandHandler& aBrandHandler,
+														MVIMPSTDetailsPresenceHandler& aPresenceHandler,
+														TInt aFocusedListIndex )
+	 : 
+    iPluginUid(aPluginUid),
+    iBrandHandler( aBrandHandler ),
+    iPresenceHandler( aPresenceHandler ),
+    iFocusedListIndex( aFocusedListIndex )
+	{
+	//No implementation needed.
+	}
+
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::~CVIMPSTDetailsViewContainer()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewContainer::~CVIMPSTDetailsViewContainer()
+	{
+	delete iBackground;
+    delete iListBoxModel;
+    delete iListBox;
+    delete iHeaderCtrl;
+    iResourceFile.Close();
+	}
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::Draw()
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::Draw(const TRect& /*aRect*/) const
+    {
+    // Draw the background using skin
+    if ( iBackground )
+        {
+        AknsDrawUtils::Background( 
+            AknsUtils::SkinInstance(), iBackground, this, SystemGc(), Rect() );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::CountComponentControls
+// --------------------------------------------------------------------------
+//
+TInt CVIMPSTDetailsViewContainer::CountComponentControls() const
+	{
+	// two control has been used , one header control and another list box
+	return 2;
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::ComponentControl
+// --------------------------------------------------------------------------
+//
+CCoeControl* CVIMPSTDetailsViewContainer::ComponentControl(TInt aIndex) const
+	{
+	switch ( aIndex )
+		{
+		case 0:
+		    return iHeaderCtrl;
+		case 1:
+		    return iListBox;
+		default:
+		    return NULL;
+		}
+	}
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::MopSupplyObject()
+// -----------------------------------------------------------------------------
+//
+TTypeUid::Ptr CVIMPSTDetailsViewContainer::MopSupplyObject(TTypeUid aId)
+    {
+    // For skinning
+    if ( iBackground && aId.iUid == MAknsControlContext::ETypeId )
+        {
+        return MAknsControlContext::SupplyMopObject( aId, iBackground );
+        }
+    return CCoeControl::MopSupplyObject( aId );
+    }
+ 
+ // -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::FocusChanged()
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::FocusChanged( TDrawNow aDrawNow )
+    {
+    // For enabling animated hilight (if in skin supports it)
+    CCoeControl::FocusChanged( aDrawNow );
+    if( iListBox )
+        {
+        iListBox->SetFocus( IsFocused(), aDrawNow );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::ListBox
+// --------------------------------------------------------------------------
+//
+CAknFormDoubleGraphicStyleListBox& CVIMPSTDetailsViewContainer::ListBox() const
+	{
+	return *iListBox;
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::ListBoxModel
+// --------------------------------------------------------------------------
+//
+CVIMPSTDetailsViewListBoxModel& CVIMPSTDetailsViewContainer::ListBoxModel() const
+	{
+	return *iListBoxModel;
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::OfferKeyEventL
+// --------------------------------------------------------------------------
+//
+TKeyResponse CVIMPSTDetailsViewContainer::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	//Temporary solution for handling key events.
+	TKeyResponse result = EKeyWasNotConsumed;
+
+	switch (aKeyEvent.iCode)
+	    {
+	    case EKeyLeftArrow:
+	    case EKeyRightArrow:
+	        return result;
+	    }
+
+	result = iListBox->OfferKeyEventL(aKeyEvent, aType);
+
+    /* FIX for  KBAA-7R3AXC bug */
+	if (result == EKeyWasNotConsumed && IsFocused())
+	  {
+		  // Ignore Send Key up and down events to prevent Dialer appearance
+		  // on top of cca application.
+		  if ((aType == EEventKeyDown || aType == EEventKeyUp)
+			  && aKeyEvent.iScanCode == EStdKeyYes)
+		  {
+			  result = EKeyWasConsumed;
+		  }
+	  }
+
+	return result;
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::SizeChanged
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::SizeChanged()
+	{
+    TRect drawRect( Rect() );
+    
+    // Listbox and header
+    if (!Layout_Meta_Data::IsLandscapeOrientation()) 
+        {// Portrait
+        AknLayoutUtils::LayoutControl(
+            iListBox, drawRect, AknLayoutScalable_Apps::cl_listscroll_pane(0));
+        TRect listRect = iListBox->Rect();
+        listRect.iTl.iX = Rect().iTl.iX;
+        listRect.iBr.iX = Rect().iBr.iX;
+        iListBox->SetRect(listRect);
+        TAknLayoutRect headerRect;
+        headerRect.LayoutRect(Rect(), AknLayoutScalable_Apps::cl_header_pane(0));
+        iHeaderCtrl->SetRect(headerRect.Rect());
+        }
+    else 
+        {// Landscape
+        AknLayoutUtils::LayoutControl(
+                iListBox, drawRect, AknLayoutScalable_Apps::cl_listscroll_pane(1));
+        TRect listRect = iListBox->Rect();
+        listRect.iBr.iX = Rect().iBr.iX;
+        iListBox->SetRect(listRect);
+        TAknLayoutRect headerRect;
+        headerRect.LayoutRect(Rect(), AknLayoutScalable_Apps::cl_header_pane(1));
+        iHeaderCtrl->SetRect(headerRect.Rect());
+        }
+   // Background skin
+    if ( iBackground )
+        {
+        iBackground->SetRect( drawRect );
+        }
+            
+    DrawNow();
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::HandleResourceChange
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::HandleResourceChange(TInt aType)
+	{
+	CCCAppViewPluginAknContainer::HandleResourceChange(aType);
+	}
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::GetHelpContext
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::GetHelpContext(TCoeHelpContext& aContext ) const
+	{
+	TUid KHelpUid = { KHELPUID };
+	aContext.iMajor =  KHelpUid;
+	aContext.iContext = KSERVTAB_HLP_CONTACT_DETAILS;
+	}
+
+// -----------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::HandleListBoxEventL()
+// -----------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::HandleListBoxEventL(
+    CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/ )
+    {
+    // Handle pointer events
+    }
+	
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::PresenceChangedL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::PresenceChangedL()
+	{
+	iListBox->HandleItemRemovalL();
+	iListBoxModel->AddFieldsDataL();
+	iHeaderCtrl->LabelsSizeChangedL();
+	iHeaderCtrl->HeaderSizeChangedL();
+	} 
+	
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::GetTitleTextL
+// --------------------------------------------------------------------------
+//
+HBufC* CVIMPSTDetailsViewContainer::GetTitleTextLC( TStoreType aStoreType )
+	{
+	TInt count = 0;
+	HBufC* titleText = NULL;
+	
+	if( iListBoxModel )
+		{
+		count = iListBoxModel->FieldsCount();	
+		}
+	if( aStoreType == EStoreLocal &&  count >0 )
+		{
+		CVIMPSTFieldPropertyArray& fieldArry = iListBoxModel->FieldsArray();
+		
+		CVIMPSTFieldProperty* field = fieldArry.GetFieldById( EVIMPSTFieldIdFirstName );
+		TPtrC firstName = field ? field->FieldDataL() : KNullDesC;
+		
+		field = fieldArry.GetFieldById( EVIMPSTFieldIdLastName );
+		TPtrC lastName = field ? field->FieldDataL() : KNullDesC;
+		if( firstName.Length() || lastName.Length() )
+			{
+			titleText = HBufC::NewLC( firstName.Length() + lastName.Length() +1 ); // pushed on clean up stack
+			if( titleText)
+				{
+				TPtr titleTextPtr( titleText->Des() );
+				titleTextPtr.Append(firstName);
+				titleTextPtr.Append(KSpace);
+				titleTextPtr.Append(lastName);	
+				}
+			}
+		}
+	else if( count >0)
+		{
+		CVIMPSTFieldPropertyArray& fieldArry = iListBoxModel->FieldsArray();
+		CVIMPSTFieldProperty* field = fieldArry.GetFieldById( EVIMPSTFieldIdImpp );
+		TPtrC title = field ? field->FieldDataL() : KNullDesC;
+		titleText = iListBoxModel->DisplayId( title ).AllocLC(); // pushed on clean up stack	
+		}
+	return titleText;
+	}	  
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::CreatePresentationL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::CreatePresentationL(MVPbkStoreContact& aContact,TDesC& aServiceName, TStoreType aStoreType )
+	{
+	iListBoxModel->CreateListPresentationL( aContact,
+										   iFocusedListIndex,
+										   aServiceName, aStoreType);
+	
+	iHeaderCtrl->CreateHeaderPresentationL( aContact );
+	iHeaderCtrl->HeaderSizeChangedL();	
+	}
+
+// --------------------------------------------------------------------------
+// CVIMPSTDetailsViewContainer::CreateEmptyPresentationL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTDetailsViewContainer::CreateEmptyPresentationL()
+	{
+	if( !iListBoxModel->MdcaCount() ) 
+		{
+	 	iListBoxModel->SetEmptyTextsToListboxL();
+		iHeaderCtrl->ClearL(); // clear the header data	
+		}
+	}		
+// End of File
+
+
+
+
+