uiservicetab/vimpstui/src/cvimpstuiblockviewcontrol.cpp
changeset 0 5e5d6b214f4f
child 6 78867dafe7eb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstui/src/cvimpstuiblockviewcontrol.cpp	Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,429 @@
+/*
+* 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 cvimpstuiblockviewcontrol.
+ *
+*/
+
+// INCLUDE FILES
+#include "cvimpstuiblockviewcontrol.h"
+#include "cvimpstuiblockview.h"
+#include "vimpstutils.h"
+#include "tvimpstconsts.h"
+#include "vimpstui.hrh"
+
+// system include
+#include	<aknlists.h>
+#include	<eikclbd.h> 
+#include <vimpstuires.rsg>
+
+#include <MPbk2KeyEventHandler.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::CVIMPSTUiBlockViewControl
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiBlockViewControl::CVIMPSTUiBlockViewControl( CVIMPSTUiBlockView& aBlockedView,MPbk2KeyEventHandler& aKeyEventHandler,
+													   	MVIMPSTEngine& aEngine,
+													   	RPointerArray<HBufC>* aBlockedList)
+	:iBlockedView(aBlockedView),
+	 iKeyEventHandler(aKeyEventHandler),
+	 iEngine( aEngine ),
+	 iBlockedList(aBlockedList)
+    {
+    
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::ConstructL
+// --------------------------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::ConstructL()
+    {
+    CreateWindowL();
+    iItemArray = new ( ELeave ) CDesCArrayFlat( KArrayGranularity );   
+    // Create listbox
+    iListBox = new ( ELeave ) CAknSingleGraphicStyleListBox;
+    iListBox->ConstructL( this, EAknListBoxSelectionList );
+    
+    iListBox->SetContainerWindowL(*this);
+    iListBox->CreateScrollBarFrameL(ETrue);
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL
+        (CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+        
+    // set marquee on
+    iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
+   	iListBox->Model()->SetItemTextArray( iItemArray );
+	iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+	
+	iListBox->SetListBoxObserver( this );
+	
+	iCurrentItemIndex = 0;
+	UpdateBlockedListL();
+	ActivateL();
+
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::NewL
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiBlockViewControl* CVIMPSTUiBlockViewControl::NewL( CVIMPSTUiBlockView& aBlockedView,
+        								    MPbk2KeyEventHandler& aKeyEventHandler, 
+        									MVIMPSTEngine& aEngine,
+        									RPointerArray<HBufC>* aBlockedList )
+    {
+    CVIMPSTUiBlockViewControl* self = NewLC(aBlockedView,aKeyEventHandler,aEngine, aBlockedList );
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+
+// --------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::NewLC
+// --------------------------------------------------------------------------
+//
+CVIMPSTUiBlockViewControl* CVIMPSTUiBlockViewControl::NewLC( CVIMPSTUiBlockView& aBlockedView,
+									          MPbk2KeyEventHandler& aKeyEventHandler,
+									          MVIMPSTEngine& aEngine,
+									          RPointerArray<HBufC>* aBlockedList )
+    {
+    CVIMPSTUiBlockViewControl* self =
+        new (ELeave) CVIMPSTUiBlockViewControl(aBlockedView,aKeyEventHandler, aEngine, aBlockedList );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::Destructor
+// -----------------------------------------------------------------------------
+//
+CVIMPSTUiBlockViewControl::~CVIMPSTUiBlockViewControl()
+    {
+   
+	delete iItemArray;
+	iItemArray = NULL;
+    delete iListBox;
+    iListBox = NULL;
+	}
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::HandleControlEventL
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::HandleControlEventL(CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::HandleListBoxEventL
+// Handles list box events
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+												 TListBoxEvent aEventType )
+	{
+	iCurrentItemIndex = iListBox->CurrentItemIndex();
+	if(aEventType == EEventEnterKeyPressed)
+	    {
+	    iBlockedView.HandleCommandL(ECmdUnBlock);                          
+	    }
+	}
+
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::SizeChanged()
+// Called by framework
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::SizeChanged()
+	{
+	if ( iListBox )
+        {
+        iListBox->SetRect(Rect());
+        }  
+    }
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::CountComponentControls()
+// Returns number of controls
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CVIMPSTUiBlockViewControl::CountComponentControls() const
+	{
+	//Only one compound control so returning 1
+	return 1;
+	}
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::ComponentControl( TInt aIndex )
+// Returns control for given index
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CCoeControl* CVIMPSTUiBlockViewControl::ComponentControl( TInt aIndex ) const
+	{
+	if( aIndex == 0 )
+		{
+        return iListBox;
+        }
+    else
+        {
+        return NULL;
+    	}
+	}
+
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::UpdateBlockedListL()
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::UpdateBlockedListL()
+    {
+	iItemArray->Reset();
+	
+	TInt granularity( iItemArray->Count() );
+	++granularity;
+	
+   	CDesCArray* tempArray = new ( ELeave ) CDesCArrayFlat( granularity );
+	CleanupStack::PushL( tempArray );
+    
+    iListBox->Model()->SetItemTextArray( tempArray );
+	iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+	iListBox->HandleItemAdditionL();
+	for ( TInt i =0; i < iBlockedList->Count() ; ++ i)
+	    {
+	    TInt sizeOfItemText;
+	    // Calculating the size of the text that will be entered into listbox.
+	    // 3 * KTab().Length() calculates the length of the tabs that is 
+	    // appended to the actual text.
+	    sizeOfItemText = (*iBlockedList)[i]->Length() + 3 * KTab().Length();
+	    HBufC* itemText = HBufC::NewLC( sizeOfItemText ); // changing stuff..
+	    TPtr itemTextPtr( itemText->Des() );
+	    itemTextPtr.Append( KTab );
+	    itemTextPtr.Append( (*iBlockedList)[i]->Des());
+	    itemTextPtr.Append( KTab );
+	    itemTextPtr.Append( KTab );
+
+	    iItemArray->AppendL( itemTextPtr );
+	    CleanupStack::PopAndDestroy( itemText );
+	    }
+	CleanupStack::PopAndDestroy(tempArray );  // tempArray
+	
+	iItemArray->Sort();
+	iListBox->Model()->SetItemTextArray( iItemArray );
+	iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+
+    iListBox->HandleItemAdditionL();
+
+    if(0==iBlockedList->Count())
+	    {
+	    SetEmptyTextsToListboxL();	
+	    }
+	    
+	if ( iItemArray->MdcaCount() > 0 )
+		{
+		iListBox->SetCurrentItemIndexAndDraw( 0 );
+		}
+    iListBox->UpdateScrollBarsL();
+    SetCurrentIndex(iCurrentItemIndex);
+    UpdateCbaL();
+    }
+    
+    
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::ListBox()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CEikListBox* CVIMPSTUiBlockViewControl::ListBox() const
+	{
+	return iListBox;
+	}
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::GetFocusedItemText
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+HBufC* CVIMPSTUiBlockViewControl::GetFocusedContactLC() const
+	{
+	HBufC* retText = NULL;
+	TInt curIndex = iListBox->CurrentItemIndex();
+	if(KErrNotFound != curIndex)
+	    {
+	    TPtrC ptr= iItemArray->MdcaPoint(curIndex);
+	    ptr.Set(ptr.Mid(1));  // set pointer from next char :since first char is KTab
+        TInt pos=ptr.FindC(KTab);
+        if( pos !=KErrNotFound &&  (pos != ptr.Length()-1))
+            {
+            ptr.Set(ptr.Mid( 0, pos));
+            retText = ptr.AllocLC();
+            }
+	    }
+    return retText;
+	}
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::GetCurrentIndex
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CVIMPSTUiBlockViewControl::GetCurrentIndex() const
+	{
+	return iCurrentItemIndex ;
+	}
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::GetCurrentIndex
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::SetCurrentIndex(TInt aIndex)
+	{
+	if(aIndex>0)
+		{
+	    TInt blockedCount = iListBox->Model()->NumberOfItems();
+		if(blockedCount > 0)
+			{
+			TInt itemIndex = aIndex % blockedCount;
+			iListBox->SetCurrentItemIndex(itemIndex);
+			}
+		}
+	}
+
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::UpdateCbaL()
+// Updates Softkeys according to current focus.
+// ---------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::UpdateCbaL()
+    {
+    TInt cbaRes = R_SERVTAB_SOFTKEYS_EMPTY_EMPTY__BACK;    
+    if ( !iCba ) 
+	    {
+	    iCba = CEikButtonGroupContainer::Current();
+	    }
+
+  	if( iCba )
+        {
+        iCba->SetCommandSetL( cbaRes );
+     	iCba->DrawNow();
+        }
+    }
+
+// ---------------------------------------------------------
+// CVIMPSTUiBlockViewControl::OfferKeyEventL()
+// Handles user key inputs
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TKeyResponse CVIMPSTUiBlockViewControl::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;         
+	        }
+	TKeyResponse result = EKeyWasNotConsumed;
+	iCurrentItemIndex = iListBox->CurrentItemIndex();
+    // Offer key event first to the key event handler
+    if ( (&iKeyEventHandler ) && iKeyEventHandler.Pbk2ProcessKeyEventL
+            ( aKeyEvent, aType ) )
+        {
+        result = EKeyWasConsumed;
+        }
+    switch(aKeyEvent.iCode )
+        {
+      /*  case EKeyEnter:
+           {
+           iBlockedView.HandleCommandL(ECmdUnBlock);
+           result = EKeyWasConsumed;
+           break;
+           } */
+        default:
+           {
+           break;
+           }
+        }
+    if( result == EKeyWasConsumed )
+       {
+       // user might has choosen back/end key/application key etc
+       // application might switch to background 
+       // return from here
+       return result; 
+       }
+    // Not consumed by the key handler, offer to the control next
+    if ( result == EKeyWasNotConsumed )
+        {
+        if ( iListBox )
+            {
+            result = iListBox->OfferKeyEventL(aKeyEvent, aType);
+            }
+        }
+    UpdateCbaL();
+    return result;
+    
+	}
+
+// ---------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::SetEmptyTextsToListboxL()
+// See header for details. 
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::SetEmptyTextsToListboxL()
+    {    
+    HBufC* emptyFinal = VIMPSTUtils::LoadResourceL(R_SERVTAB_BLOCKLIST_BKGD);
+    CleanupStack::PushL(emptyFinal);
+    iListBox->View()->SetListEmptyTextL( *emptyFinal );
+    CleanupStack::PopAndDestroy(emptyFinal);
+    }
+    
+// ---------------------------------------------------------------------------
+// CVIMPSTUiBlockViewControl::SetUpdatingTextsToListboxL()
+// See header for details. 
+// ---------------------------------------------------------------------------
+//
+void CVIMPSTUiBlockViewControl::SetUpdatingTextsToListboxL()
+    {    
+    HBufC* updating = VIMPSTUtils::LoadResourceL(R_SERVTAB_BLOCKLIST_BKGDTO);
+    CleanupStack::PushL(updating);
+    iListBox->View()->SetListEmptyTextL( *updating );
+    CleanupStack::PopAndDestroy(updating);
+    }
+    
+
+//  End of File