--- /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
+
+
+
+
+