--- a/uiservicetab/vimpstui/src/cvimpstuisinglelistboxtabviewcontrol.cpp Thu Aug 19 09:41:53 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1191 +0,0 @@
-/*
-* 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 for CVIMPSTUiDoubleListBoxTabViewControl.
-*
-*/
-
-
-// INCLUDE FILES
-#include "cvimpstuisinglelistboxtabviewcontrol.h"
-
-#include "cvimpstuisinglelistboxarray.h"
-#include "tvimpstenums.h"
-#include "mvimpstcmdhandler.h"
-#include "cvimpstuibranddata.h"
-#include "imcvuiliterals.h"
-#include "cvimpstuilistboxmodel.h"
-#include "vimpstutilsdialog.h"
-#include "vimpstui.hrh"
-#include "cvimpstuitabbedview.h"
-#include "mvimpstengine.h"
-#include "cvimpststoragemanagerfactory.h"
-#include "mvimpststorageserviceview.h"
-
-// system include
-#include <aknenv.h>
-#include <aknlists.h>
-#include <AknIconArray.h>
-#include <eikclbd.h>
-#include <aknsfld.h>
-#include <AknUtils.h>
-#include <AknLayout.lag>
-#include <StringLoader.h>
-// Pbk2
-#include <MPbk2KeyEventHandler.h>
-#include <vimpstuires.rsg>
-
-
-#include <MVPbkContactStoreListObserver.h>
-#include "mvimpstenginepresencesubservice.h"
-#include "uiservicetabtracer.h"
-
-#include <aknlayoutscalable_avkon.cdl.h>
-// imlauncher
-#include <imcvlauncher.h>
-const TInt KTextLimit( 40 ); // Text-limit for find-field
-
-const TInt KMinContact(1); // minmimum number of contacts to show findpane
-
-// ================= MEMBER FUNCTIONS =======================
-// --------------------------------------------------------------------------
-// CVIMPSTUiDoubleListBoxTabViewControl::HandleAvatarChangeL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleAvatarChangeL( const TDesC& /*aUserId*/ )
- {
-
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiDoubleListBoxTabViewControl::CVIMPSTUiDoubleListBoxTabViewControl
-// --------------------------------------------------------------------------
-//
-CVIMPSTUiSingleListBoxTabViewControl::CVIMPSTUiSingleListBoxTabViewControl(CVIMPSTUiTabbedView& aTabbedView, MPbk2KeyEventHandler* aKeyEventHandler,
- MVIMPSTCmdHandler& aCommandHandler,
- TUint32 aServiceId,
- CVIMPSTUiBrandData& aBrandHandler,
- MVIMPSTEngine& aEngine,
- CEikButtonGroupContainer* aCba)
- :iTabbedView(aTabbedView),
- iKeyEventHandler(aKeyEventHandler),
- iCommandHandler(aCommandHandler),
- iArrayProcess(iCommandHandler.GetProcessInterface()),
- iServiceId(aServiceId),
- iBrandHandler(aBrandHandler),
- iEngine(aEngine),
- iCba(aCba)
- {
-
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::ConstructL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::ConstructL()
- {
- TRACER_AUTO;
- CreateWindowL();
-
- // register to get the call back for any array data change
- iArrayProcess.AddObserver(this);
-
- // Create and construct listbox
- iListBox = new ( ELeave ) CVIMPSTUiSingleStyleListBox;
-
- iListBox->ConstructL(this);
-
- iListBox->SetContactListModelL(iArrayProcess);
-
- iListBox->SetListBoxObserver( this );
-
- iListBox->SetContainerWindowL(*this);
- iListBox->CreateScrollBarFrameL(ETrue);
- iListBox->ScrollBarFrame()->SetScrollBarVisibilityL
- (CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
- // set marquee on
- iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
- // If engine is uninstalled, do not construct the list view.
- // Display empty message
- if (iEngine.IsUnInstalled())
- {
- SetListEmptyTextL( R_QTN_SERVTAB_SWUPDATE_RESTART );
- return;
- }
- else
- {
- // Construction of the listbox view. Engine is not uninstalled.
- CVIMPSTUiSingleListboxArray* friendsArray =
- CVIMPSTUiSingleListboxArray::NewL(iArrayProcess,
- iListBox->ItemDrawer()->ColumnData(), *iListBox);
- // now set the array
- iListBox->Model()->SetItemTextArray(friendsArray);
-
- iListBox->Model()->SetOwnershipType(ELbmOwnsItemArray);
- // if there is any contact other than owndata , show findpane
- if (iListBox->Model()->NumberOfItems() > KMinContact)
- {
- // Create find-pane
- ActivateFindPaneL();
- }
- LoadBitmapsL();
- SetCbaLockL(EFalse);
- }
-
-
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::NewL
-// --------------------------------------------------------------------------
-//
-CVIMPSTUiSingleListBoxTabViewControl* CVIMPSTUiSingleListBoxTabViewControl::NewL
- (CVIMPSTUiTabbedView& aTabbedView,MPbk2KeyEventHandler* aKeyEventHandler,
- MVIMPSTCmdHandler& aCommandHandler, TUint32 aServiceId,
- CVIMPSTUiBrandData& aBrandHandler,
- MVIMPSTEngine& aEngine,
- CEikButtonGroupContainer* aCba)
- {
- TRACER_AUTO;
- CVIMPSTUiSingleListBoxTabViewControl* self = NewLC(aTabbedView,aKeyEventHandler,
- aCommandHandler, aServiceId, aBrandHandler,aEngine,aCba);
- CleanupStack::Pop(self);
- return self;
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::NewLC
-// --------------------------------------------------------------------------
-//
-CVIMPSTUiSingleListBoxTabViewControl* CVIMPSTUiSingleListBoxTabViewControl::NewLC
- (CVIMPSTUiTabbedView& aTabbedView,MPbk2KeyEventHandler* aKeyEventHandler,
- MVIMPSTCmdHandler& aCommandHandler, TUint32 aServiceId,
- CVIMPSTUiBrandData& aBrandHandler,
- MVIMPSTEngine& aEngine,
- CEikButtonGroupContainer* aCba)
- {
- TRACER_AUTO;
- CVIMPSTUiSingleListBoxTabViewControl* self =
- new (ELeave) CVIMPSTUiSingleListBoxTabViewControl(aTabbedView,aKeyEventHandler,
- aCommandHandler, aServiceId, aBrandHandler,aEngine,aCba);
- CleanupStack::PushL(self);
- self->ConstructL();
- return self;
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::~CVIMPSTUiSingleListBoxTabViewControl
-// --------------------------------------------------------------------------
-//
-CVIMPSTUiSingleListBoxTabViewControl::~CVIMPSTUiSingleListBoxTabViewControl()
- {
-
- delete iListBox;
- iArrayProcess.RemoveObserver();
- if( iFindbox )
- {
- delete iFindbox;
- iFindbox = NULL;
- }
-
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleAddition
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleAdditionL(TVIMPSTEnums::TItem aType, TInt aIndex)
- {
- if(iListBox )
- {
- iListBox->HandleItemAdditionL();
- UpdateViewL(aIndex,aType) ;
- }
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleAddition
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleDeletionL(TVIMPSTEnums::TItem aType, TInt aIndex )
- {
- if(iListBox)
- {
- iListBox->HandleItemRemovalL();
- TInt count = iListBox->Model()->NumberOfItems();
- if( count == aIndex )
- {
- aIndex = 0;
- }
- UpdateViewL(aIndex,aType) ;
- }
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleItemAdditionL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleItemAdditionL()
- {
- if(iListBox)
- {
- iListBox->HandleItemAdditionL();
- TInt index = CurrentItemIndex();
- TVIMPSTEnums::TItem type = iArrayProcess.GetType(index);
- UpdateViewL(index,type) ;
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleItemRemovalL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleItemRemovalL()
- {
- if(iListBox)
- {
- iListBox->HandleItemRemovalL();
- TInt index = CurrentItemIndex();
- TVIMPSTEnums::TItem type = iArrayProcess.GetType(index);
- UpdateViewL(index,type) ;
- }
- }
-
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SizeChanged
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SizeChanged()
- {
- SetLayout(); //layouting controls
- if ( iFindbox && iFindPaneIsVisible )
- {
- iFindbox->MakeVisible( ETrue );
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::CountComponentControls
-// --------------------------------------------------------------------------
-//
-TInt CVIMPSTUiSingleListBoxTabViewControl::CountComponentControls() const
- {
- // return number of controls inside this container
- if( !iFindbox )
- {
- // Find-pane does not exist when there is no data in listbox,
- // so only one control exists (listbox)
- return 1; //Ignore CodeScanner warning
- }
- else
- {
- // listbox and findbox exists. that makes it two
- return 2; //Ignore CodeScanner warning
- }
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::FocusChanged
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::FocusChanged( TDrawNow aDrawNow )
- {
- if ( iFindbox && iFindbox->IsVisible() )
- {
- iFindbox->SetFocus( IsFocused(), aDrawNow );
- if ( aDrawNow == EDrawNow && IsFocused() )
- {
- iFindbox->DrawDeferred();
- }
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::ComponentControl
-// --------------------------------------------------------------------------
-//
-CCoeControl* CVIMPSTUiSingleListBoxTabViewControl::ComponentControl(TInt aIndex) const
- {
- // return iListBox;
- switch ( aIndex )
- {
- // the caller wants to have the first control
- // so it's always listbox
- case 0:
- {
- return iListBox;
- }
- // the caller wants to have the second control
- // so it's always the findbox if it exists
- case 1:
- {
- if( iFindbox )
- {
- return iFindbox;
- }
- return NULL;
- }
- default:
- {
- return NULL;
- }
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::OfferKeyEventL
-// --------------------------------------------------------------------------
-//
-TKeyResponse CVIMPSTUiSingleListBoxTabViewControl::OfferKeyEventL
- (const TKeyEvent& aKeyEvent,TEventCode aType)
- {
- if ( !aKeyEvent.iCode )
- {
- //The character code generated
- //for an EEventKey, or 0 for a down or up event.
- //For down or up key return key consumed.. handle only the events
-
- if((EEventKeyDown == aType) && (EStdKeyDevice3 == aKeyEvent.iScanCode))
- {
- //for setting the command to be executed for the "Selection key"
- //in case of selection key, container's OfferKeyEventL() is called only for EEventKeyDown and EEventKeyUp
- //and not for EEventKey
- UpdateCbaL();
- }
- return EKeyWasConsumed;
- }
- UpdateCbaL();
- TKeyResponse ret = EKeyWasNotConsumed;
- // Offer key event first to the key event handler
- if ( iKeyEventHandler && iKeyEventHandler->Pbk2ProcessKeyEventL
- ( aKeyEvent, aType ) )
- {
- ret = EKeyWasConsumed;
- }
-
- switch ( aKeyEvent.iCode )
- {
- case EKeyBackspace:
- {
- if ( iFindbox )
- {
- if( iFindbox->TextLength() == 0 )
- {
- TVIMPSTEnums::TItem item = iArrayProcess.GetType( CurrentItemIndex() );
- if(TVIMPSTEnums::EContactItem == item)
- {
- TInt index = CurrentItemIndex();
- if( iArrayProcess.IsConversationExist(index) )
- {
- iTabbedView.CloseConversationL();
- ret = EKeyWasConsumed;
- }
- else if(TVIMPSTEnums::EContactItem == iArrayProcess.GetType( index ) )
- {
- if( TVIMPSTEnums::ESVCERegistered == iArrayProcess.GetLoginState() )
- {
- iTabbedView.DeleteContactL();
- }
- ret = EKeyWasConsumed;
- }
- }
- }
- }
- break;
- }
-
- // Case to handle send key press consumption.
- case EKeyYes:
- {
- TInt index = iListBox->CurrentItemIndex();
- if( TVIMPSTEnums::EOwnStatusItem == iArrayProcess.GetType( index ) )
- {
- ret = EKeyWasConsumed;
- }
- break;
- }
- default:
- break;
- }
-
- if( EKeyPhoneSend == aKeyEvent.iCode && ret != EKeyWasConsumed )
- {
- if( iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EVoip))
- {
- iTabbedView.MakeVoipCallL();
- ret = EKeyWasConsumed;
- }
-
- }
- if( ret == EKeyWasConsumed )
- {
- // user might has choosen back/end key/application key etc
- // application might switch to background
- // return from here
- return ret;
- }
- if ( iFindPaneIsVisible && iFindbox )
- {
- ret = iFindbox->OfferKeyEventL( aKeyEvent, aType ) ;
- }
- // Not consumed by the key handler and findpane , offer to the control next
- if ( ret == EKeyWasNotConsumed )
- {
- ret = iListBox->OfferKeyEventL( aKeyEvent, aType );
- }
- iTabbedView.UpdateToolbarL();
- return ret;
- }
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::CurrentItemIndex
-// --------------------------------------------------------------------------
-//
-TInt CVIMPSTUiSingleListBoxTabViewControl::CurrentItemIndex() const
- {
- if( !iListBox )
- {
- return KErrNotFound;
- }
- if( !iListBox->View() )
- {
- // CurrentItemIndex panics if the listbox has no view
- return KErrNotFound;
- }
-
- TInt curIndex( iListBox->CurrentItemIndex() );
- if ( curIndex < 0 )
- {
- return KErrNotFound;
- }
- CVIMPSTUiListBoxModel* model =
- static_cast<CVIMPSTUiListBoxModel*>( iListBox->Model() );
-
- if( model )
- {
- return model->FilteredItemIndex( curIndex );
- }
- return KErrNotFound;
- }
-
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetCurrentItemIndex
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SetCurrentItemIndex(TInt aIndex)
- {
- if (iListBox->CurrentItemIndex() != aIndex &&
- aIndex >= 0 &&
- aIndex < iListBox->Model()->NumberOfItems() )
- {
- iListBox->SetCurrentItemIndex(aIndex);
- TRAP_IGNORE(UpdateCbaL());
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetCurrentItemIndexAndDraw
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SetCurrentItemIndexAndDraw(TInt aIndex)
- {
- SetCurrentItemIndex(aIndex);
- this->DrawDeferred();
- }
-
-
-// --------------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetListEmptyTextL
-// --------------------------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SetListEmptyTextL(TInt aResourceId)
- {
- HBufC* msgText;
- TRACER_AUTO;
- // Get Service Name from Engine , load string from resource and display.
- // This text is shown to tell the user to restart phone to get the service again.
- TPtrC serviceNamePtr(iEngine.ServiceName());
- msgText = StringLoader::LoadLC(aResourceId, serviceNamePtr, iCoeEnv);
- iListBox->View()->SetListEmptyTextL(*msgText);
- TRACE( "Display Text %S", msgText );
-
- CleanupStack::PopAndDestroy(msgText);
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::LoadBitmapsL
-// Called by framework when the view size is changed
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::LoadBitmapsL()
- {
-
-
- CColumnListBoxData* listBoxData = iListBox->ItemDrawer()->ColumnData();
- if ( !listBoxData )
- {
- //No listbox data
- User::Leave( KErrNotFound );
- }
-
- CAknIconArray* icons = iBrandHandler.LoadIconsLC( );
-
- CArrayPtr<CGulIcon>* oldIconArray = listBoxData->IconArray();
- if( oldIconArray )
- {
- oldIconArray->ResetAndDestroy();
- delete oldIconArray;
- listBoxData->SetIconArray( NULL );
- }
-
- // Set icon-array to listbox's drawer
- listBoxData->SetIconArray( icons );
- CleanupStack::Pop( icons );
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleListBoxEventL(
-// CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/ )
-// From MEikListBoxObserver, Handles event's generated by listbox
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleListBoxEventL(
- CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
- {
- iTabbedView.UpdateToolbarL();
- UpdateCbaL();
- switch(aEventType)
- {
- case EEventItemSingleClicked:
- {
- TBool presenceEnabled = iEngine.IsSubServiceEnabled(TVIMPSTEnums::EPresence);
- TBool imEnabled = iEngine.IsSubServiceEnabled(TVIMPSTEnums::EIM);
- TBool voipEnabled = iEngine.IsSubServiceEnabled(TVIMPSTEnums::EVoip);
-
- TInt index = CurrentItemIndex();
- TVIMPSTEnums::TItem itemType = iArrayProcess.GetType(index);
- TVIMPSTEnums::TVIMPSTRegistrationState serviceState = iTabbedView.GetServiceState();
-
- if(TVIMPSTEnums::EOwnStatusItem == itemType &&
- TVIMPSTEnums::ESVCENotRegistered == serviceState)
- {
- iTabbedView.HandleCommandL( ECmdLogin );
- }
- else if(TVIMPSTEnums::EOwnStatusItem == itemType
- && presenceEnabled &&
- TVIMPSTEnums::ESVCERegistered == serviceState )
- {
- iTabbedView.HandleCommandL( ECmdChangeStatus );
- }
- else if( ( TVIMPSTEnums::EContactItem == itemType ||
- TVIMPSTEnums::EUnknonContactItem == itemType )&& imEnabled &&
- TVIMPSTEnums::ESVCERegistered == serviceState )
- {
- iTabbedView.HandleCommandL( ECmdOpenConversation );
- }
- else if ( itemType == TVIMPSTEnums::EFriendRequestItem
- && TVIMPSTEnums::ESVCERegistered == serviceState)
- {
- iTabbedView.HandleCommandL( ECmdOpenFriendRequest );
- }
- else if( TVIMPSTEnums::EContactItem == itemType )
- {
- if( !(TVIMPSTEnums::ESVCEUpdatingContacts == serviceState ||
- TVIMPSTEnums::ESVCENetworkConnecting == serviceState ||
- TVIMPSTEnums::ESVCENetworkDisConnecting == serviceState))
- {
- iTabbedView.HandleCommandL( ECmdContactDetails );
- }
- }
- break;
- }
- // Add enter key handling
- case EEventEnterKeyPressed:
- {
- CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
- TInt commandId( iCba->ButtonGroup()->CommandId( CEikButtonGroupContainer::EMiddleSoftkeyPosition));
-
- iTabbedView.HandleCommandL(commandId);
- break;
- }
- default:
- {
- break;
- }
- }
-
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SendMessageL(
-// CEikListBox* /*aListBox*/, TListBoxEvent /*aEventType*/ )
-// From MEikListBoxObserver, Handles event's generated by listbox
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SendMessageL()
- {
- TInt index = CurrentItemIndex();
- TPtrC seletctedItem = iArrayProcess.GetItemUserId(index) ;
- if( index< 0 )
- {
- // return if item not found.
- return;
- }
- if(seletctedItem.Length())
- {
- // No need to check for the presence of the contact as in singleline
- // list box there is no presence, hence directly open the ocnversation view.
- TVwsViewId activeViewId;
- CCoeEnv::Static()->AppUi()->GetActiveViewId( activeViewId );
-
- iArrayProcess.ResetPendingMsg( index );
- // imlauncher call for luanching the conversationview with seletced user id
- IMCVLauncher::LaunchImConversationViewL(activeViewId, iServiceId, seletctedItem );
- }
- else
- {
- //When there is no XSP Id present it comes to here
- //Displaying a note that there is no XSP ID
- HBufC* note = NULL;
- note = StringLoader::LoadLC( R_QTN_SERVTAB_NOXSP_ERROR );
- VIMPSTUtilsDialog::DisplayNoteDialogL( *note );
- CleanupStack::PopAndDestroy( note );
- }
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::UpdateViewL
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::UpdateViewL(
- TInt aIndex, TVIMPSTEnums::TItem aType)
- {
- TRACER_AUTO;
- TInt index = KErrNotFound;
- if( aIndex < 0 )
- {
- aIndex = CurrentItemIndex()<0?0:CurrentItemIndex();
- }
- switch(aType)
- {
- case TVIMPSTEnums::EContactItem:
- case TVIMPSTEnums::EOwnStatusItem:
- {
- /*Not attempting to get the index of contact because aIndex is the
- same as this index and we pass it on to the contactlistboxmodel's
- visibleitem method*/
- CVIMPSTUiListBoxModel* list =
- static_cast<CVIMPSTUiListBoxModel*>( iListBox->Model() );
- index = list->VisibleItemIndex(aIndex);
- if( index != KErrNotFound && iFindbox )
- {
- if(iClrFindPaneFlag)
- {
- iFindbox->SetSearchTextL( KNullDesC );
- iFindbox->DrawNow();
- iClrFindPaneFlag = EFalse;
- }
- else
- {
- TBuf<KTextLimit> temp;
- iFindbox->GetSearchText(temp);
- if(0 != temp.Compare(KNullDesC))
- {
- ((CAknFilteredTextListBoxModel*) iListBox->Model() )
- ->Filter()->HandleOfferkeyEventL();
- }
- }
- }
- break;
- }
- default:
- {
- //nothing to do
- break;
- }
- }
- iListBox->DrawNow();
- SetCurrentItemIndex(aIndex);
- SetFocusAndMakeItemVisible();
- TInt count = iArrayProcess.Count();
- if(count > KMinContact && ! iFindPaneIsVisible)
- {
- ActivateFindPaneL();
- }
- else if(count <= KMinContact && iFindPaneIsVisible) // extra check needed here to improve performance
- {
- DeactivateFindPaneL();
- }
-
- //Update the Toolbar after moving the focus to the current item.
- iTabbedView.UpdateToolbarL();
- UpdateCbaL();
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::ActivateFindPaneL()
-// Activates find-pane
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::ActivateFindPaneL()
- {
- TRACER_AUTO;
- if( !iFindbox )
- {
- iFindbox = CAknSearchField::NewL( *this,
- CAknSearchField::ESearch,
- NULL, KTextLimit );
- static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() )
- ->CreateFilterL( iListBox, iFindbox );
-
- }
- iFindbox->SetObserver( this );
- iFindbox->ActivateL();
- iFindbox->ResetL();
- iFindbox->SetSearchTextL( KNullDesC );
-
- iFindPaneIsVisible = ETrue;
- SetLayout();
-
- if( IsActivated() )
- {
- iFindbox->MakeVisible( ETrue );
- iFindbox->SetFocus( ETrue );
- iListBox->SizeChanged();
- DrawNow();
- }
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::DeactivateFindPaneL()
-// De-activates find-pane
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::DeactivateFindPaneL()
- {
- TRACER_AUTO;
- if( !iFindbox )
- {
- return;
- }
- static_cast<CAknFilteredTextListBoxModel*>( iListBox->Model() )
- ->Filter()->ResetFilteringL();
-
-
- iFindbox->MakeVisible( EFalse );
- iFindbox->SetFocus( EFalse );
-
- iFindPaneIsVisible = EFalse;
- SetLayout();
-
- if( IsActivated() )
- {
- DrawNow();
- }
- }
-
-
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetLayout()
-// Layouts current components according to AVKON LAF
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SetLayout()
- {
- const TRect rect( Rect() );
- if( iListBox && iFindPaneIsVisible )
- {
-
- TAknWindowLineLayout empty;
- empty.iC = 0;
- empty.il = 0;
- empty.it = 0;
- empty.ir = 0;
- empty.ib = 0;
- empty.iW = ELayoutEmpty;
- empty.iH = ELayoutEmpty;
-
- TAknWindowLineLayout findPane = AknLayoutScalable_Avkon::find_pane().LayoutLine();
- TAknWindowLineLayout listPane;
-
- // listPane should equal to parent's rect
- listPane.il = Rect().iTl.iX;
- listPane.ir = ELayoutEmpty;
- listPane.it = Rect().iTl.iY;
- listPane.ib = ELayoutEmpty;
- // this check is required since it's not guaranteed that listbox's SetRect
- // has been called when this code is executed
- if ( Size().iWidth > 0 )
- {
- listPane.iW = Size().iWidth;
- listPane.ir = ELayoutEmpty;
- }
- else
- {
- listPane.iW = ELayoutEmpty;
- listPane.ir = 0;
- }
- // but findpane's height should be subtracted
- listPane.iH = Size().iHeight - findPane.iH;
-
- // findPane's width should equal to listPane's width
- findPane.iW = listPane.iW;
- CAknFilteredTextListBoxModel* m = static_cast <CAknFilteredTextListBoxModel*> ( iListBox->Model() );
- if ( m->Filter() )
- {
- m->Filter()->SetParentControl( this );
- }
- TAknLayoutRect lrect;
- lrect.LayoutRect( Rect(), empty );
- AknLayoutUtils::LayoutControl( iFindbox, lrect.Rect(), findPane );
- AknLayoutUtils::LayoutControl( iListBox, Rect(), listPane );
-
- }
- else if( iListBox )
- {
- AknLayoutUtils::LayoutControl( iListBox,
- rect,
- AKN_LAYOUT_WINDOW_list_gen_pane( 0 ) );
- }
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleControlEventL
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent aEventType)
- {
- // We only observe iFindbox
- if( EEventStateChanged == aEventType )
- {
-
- ((CAknFilteredTextListBoxModel*) iListBox->Model() )
- ->Filter()->HandleOfferkeyEventL();
-
- }
- iListBox->DrawNow();
- iTabbedView.UpdateToolbarL();
- }
-
-// ---------------------------------------------------------
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::CheckAndSetLastItemFlag()
-// Checks if the last contact is focused and Sets the iLastItemFlag
-// ---------------------------------------------------------
-void CVIMPSTUiSingleListBoxTabViewControl::CheckAndSetLastItemFlag()
- {
- if(iListBox->CurrentItemIndex() == (iArrayProcess.Count() - 1))
- {
- iLastItemFlag = ETrue;
- }
- else
- {
- iLastItemFlag = EFalse;
- }
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetFocusAndMakeItemVisible()
-// Compares the Saved Contact in iFocussedID with the contacts in the List and focuses if it is found
-// ---------------------------------------------------------
-void CVIMPSTUiSingleListBoxTabViewControl::SetFocusAndMakeItemVisible()
- {
- TInt count = iArrayProcess.Count();
- TInt index = CurrentItemIndex();
- if( index == count )
- {
- if( iLastItemFlag )
- {
- index = count - 1;
- iLastItemFlag = EFalse;
- }
- else
- {
- return;//do nothing let list box handle this.
- }
- }
-
- CVIMPSTUiListBoxModel* model =
- static_cast<CVIMPSTUiListBoxModel*>( iListBox->Model() );
-
- if( model )
- {
- index = model->VisibleItemIndex( index );
- }
-
- iListBox->ScrollToMakeItemVisible( index );
- SetCurrentItemIndex(index);
- iListBox->DrawNow();
-
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::GetFocussedId()
-// To get the pointer to the iFocussedID
-// ---------------------------------------------------------
-TPtrC CVIMPSTUiSingleListBoxTabViewControl::GetFocussedId()
- {
- TInt index = CurrentItemIndex();
- if( index < 0 )
- {
- index = 0;
- }
- return iCommandHandler.GetProcessInterface().GetItemUserId( index );
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetFocussedId()
-// Saves the Contact ID in iFocussedID
-// ---------------------------------------------------------
-void CVIMPSTUiSingleListBoxTabViewControl::SetFocussedId(const TDesC& aContact)
- {
- TInt index = iCommandHandler.GetProcessInterface().GetSelectedItemIndex( aContact );
- if( index < 0 )
- {
- index = 0;
- }
- SetCurrentItemIndex( index );
- SetFocusAndMakeItemVisible();
- }
-
-// --------------------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetClrFindPaneFlag(TBool aFlag)
-// --------------------------------------------------------------------
-
-void CVIMPSTUiSingleListBoxTabViewControl::SetClrFindPaneFlag(TBool aFlag)
- {
- iClrFindPaneFlag = aFlag;
- }
-// ---------------------------------------------------------
-// CVIMPSTUiDoubleListBoxTabViewControl::CoeControl()
-// ---------------------------------------------------------
-
-CCoeControl* CVIMPSTUiSingleListBoxTabViewControl::CoeControl()
- {
- return this; // return this pointer since its a parent class pointer of CCoeControl
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::SetCbaLockL()
-// Sets the lock status of cba keys.
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::SetCbaLockL( TBool aLock )
- {
- iCbaLock = aLock;
- if( !aLock )
- {
- UpdateCbaL();
- }
- }
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::UpdateCbaL()
-// Updates Softkeys according to current focus.
-// ---------------------------------------------------------
-//
-void CVIMPSTUiSingleListBoxTabViewControl::UpdateCbaL( TBool aUseDefaultCba /*= EFalse*/ )
- {
- TRACER_AUTO;
- TInt cbaRes = R_SERVTAB_SOFTKEYS_OPTIONS_EXIT__EMPTY;
- iCurrentCmdToExe = -1;
- if( !iCbaLock )
- {
- TInt index = CurrentItemIndex();
- //if invalid index then dont set any command
- if(KErrNotFound == index)
- {
- if ( iCba )
- {
- iCba->SetCommandSetL( cbaRes );
- iCba->DrawNow();
- }
- return;
- }
-
- TVIMPSTEnums::TItem itemtype = iArrayProcess.GetType(index);
- TVIMPSTEnums::TVIMPSTRegistrationState servicestate = iEngine.ServiceState();
- TBool updateinvalid( iLastFocusedItemType == TVIMPSTEnums::EInvalid );
-// if ( !iCba )
-// {
-// iCba = CEikButtonGroupContainer::Current();
-// }
-
- // default softkeys
- if( aUseDefaultCba || updateinvalid )
- {
- if( aUseDefaultCba )
- {
- iLastFocusedItemType = TVIMPSTEnums::EOwnStatusItem;
- }
- else
- {
- iLastFocusedItemType = itemtype;
- }
-
- if( iCba )
- {
- if ( itemtype == TVIMPSTEnums::EOwnStatusItem && TVIMPSTEnums::ESVCENetworkConnecting == servicestate )
- {
- if(iTabbedView.CancelLoginSupportedL())
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_CANCEL__EXIT;
- iCurrentCmdToExe = ECmdCancelLogin;
- }
- else
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTIONS_EXIT__EMPTY;
- iCurrentCmdToExe = -1;
- }
- }
- else if ( itemtype == TVIMPSTEnums::EOwnStatusItem && TVIMPSTEnums::ESVCEWaitingForNetwork == servicestate )
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_CHANGECONN__EXIT;
- iCurrentCmdToExe = ECmdChangeConnectioninOnlineState;
- }
- else
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_LOGIN__EXIT;
- iCurrentCmdToExe = ECmdLogin;
- }
- iCba->SetCommandSetL( cbaRes );
- iCba->DrawNow();
- }
- }
-
- // collapse softkey ( when focus is on contact )
- else if( updateinvalid || itemtype == TVIMPSTEnums::EContactItem )
- {
- iLastFocusedItemType = itemtype;
- if( iCba )
- {
- // Options/Collapse/Chat
- if(TVIMPSTEnums::ESVCERegistered == servicestate)
- {
- // im is supported
- if(iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM))
- {
- iCba->SetCommandSetL( R_SERVTAB_SOFTKEYS_OPTION_OPENCONV__EXIT );
- iCurrentCmdToExe = ECmdOpenConversation;
- }
- else //im is not supporteed
- {
- iCba->SetCommandSetL( R_SERVTAB_SOFTKEYS_OPTIONS_DETAILS__EXIT );
- iCurrentCmdToExe = ECmdContactDetails;
- }
- }
- else if(TVIMPSTEnums::ESVCENotRegistered == servicestate)
- {
- iCba->SetCommandSetL( R_SERVTAB_SOFTKEYS_OPTIONS_DETAILS__EXIT );
- iCurrentCmdToExe = ECmdContactDetails;
- }
- iCba->DrawNow();
- }
- }
- else if( itemtype == TVIMPSTEnums::EUnknonContactItem )
- {
- iLastFocusedItemType = itemtype;
- if(TVIMPSTEnums::ESVCERegistered == servicestate &&
- iEngine.IsSubServiceSupportedL(TVIMPSTEnums::EIM))
- {
- iCba->SetCommandSetL( R_SERVTAB_SOFTKEYS_OPTION_OPENCONV__EXIT );
- iCurrentCmdToExe = ECmdOpenConversation;
- }
- else //im is not supporteed
- {
- iCba->SetCommandSetL( R_SERVTAB_SOFTKEYS_OPTIONS_EXIT__EMPTY );
- iCurrentCmdToExe = -1;
- }
- iCba->DrawNow();
- }
- // Focus on own contact item
- else if( updateinvalid || itemtype == TVIMPSTEnums::EOwnStatusItem )
- {
- iLastFocusedItemType = itemtype;
- if( iCba )
- {
- if ( itemtype == TVIMPSTEnums::EOwnStatusItem && TVIMPSTEnums::ESVCERegistered == servicestate )
- {
- // Own status
- // Options/Back/Change status
- //Get Presence SubService
- MVIMPSTEngineSubService* subService =
- (iEngine.SubService(TVIMPSTEnums::EPresence));
- TBool changeownstatussupported = EFalse;
- if(subService)
- {
- MVIMPSTEnginePresenceSubService& presence =
- MVIMPSTEnginePresenceSubService::Cast (*subService);
- changeownstatussupported = presence.IsChangeOwnStatusSupported();
- }
- if(changeownstatussupported)
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTIONS_EXIT__CHANGESTATUS;
- iCurrentCmdToExe = ECmdChangeStatus;
- }
- //else its cbres is set to options exit empty
- }
- else if ( itemtype == TVIMPSTEnums::EOwnStatusItem && TVIMPSTEnums::ESVCENetworkConnecting == servicestate )
- {
- if(iTabbedView.CancelLoginSupportedL())
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_CANCEL__EXIT;
- iCurrentCmdToExe = ECmdCancelLogin;
- }
- else
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTIONS_EXIT__EMPTY;
- iCurrentCmdToExe = -1;
- }
- }
- else if ( itemtype == TVIMPSTEnums::EOwnStatusItem && TVIMPSTEnums::ESVCEWaitingForNetwork == servicestate )
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_CHANGECONN__EXIT;
- iCurrentCmdToExe = ECmdChangeConnectioninOnlineState;
- }
- else
- {
- cbaRes = R_SERVTAB_SOFTKEYS_OPTION_LOGIN__EXIT;
- iCurrentCmdToExe = ECmdLogin;
- }
- //add for connecting state and waiting for connection state.
- iCba->SetCommandSetL( cbaRes );
- iCba->DrawNow();
- }
- }
- }
- }
-
-// ---------------------------------------------------------
-// CVIMPSTUiSingleListBoxTabViewControl::HandleAvatarRefreshL()
-// ---------------------------------------------------------
-void CVIMPSTUiSingleListBoxTabViewControl::HandleAvatarRefreshL( const TDesC&/* aUserId */,TBool /*aBlock*/)
- {
- //no avatar implementation for single list box.
- }
-
-// End of File