diff -r 3104fc151679 -r 9a48e301e94b uiservicetab/vimpstdetailsviewplugin/src/cvimpstdetailsviewcontainer.cpp --- /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 + +// System includes +#include +#include +#include +#include +#include +// virtual phonebook +#include + +#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 + + + + +