phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxMoveTopContactsDlg.cpp
changeset 0 e686773b3f54
child 68 9da50d567e3c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxMoveTopContactsDlg.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,308 @@
+/*
+* Copyright (c) 2005-2007 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:  Phonebook 2 move top contacts dialog.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbk2NlxMoveTopContactsDlg.h"
+
+// Phonebook 2
+#include <MPbk2AppUi.h>
+#include <MPbk2ApplicationServices.h>
+#include <MPbk2ContactViewSupplier.h>
+#include <Pbk2UIControls.rsg>
+
+// Virtual Phonebook
+#include <CVPbkContactLinkArray.h>
+#include <CVPbkContactManager.h>
+#include <MVPbkContactViewBase.h>
+#include <MVPbkContactLink.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkStoreContact.h>
+
+#include <avkon.rsg>
+#include <aknlists.h>
+#include <akntitle.h>
+#include <aknnavi.h>
+
+#include <eikclbd.h>
+#include <CPbk2IconArray.h>
+
+#include "CPbk2NlxReorderingModel.h"
+#include "Pbk2NlxUIControls.hrh"
+#include <Pbk2ExNamesListRes.rsg> 
+
+#include <Pbk2Debug.h>
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::CPbk2NlxMoveTopContactsDlg
+// --------------------------------------------------------------------------
+inline CPbk2NlxMoveTopContactsDlg::CPbk2NlxMoveTopContactsDlg(
+		CPbk2NlxReorderingModel& aModel ):
+		iModel(aModel)
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::~CPbk2NlxMoveTopContactsDlg
+// --------------------------------------------------------------------------
+CPbk2NlxMoveTopContactsDlg::~CPbk2NlxMoveTopContactsDlg()
+    {
+    TRAP_IGNORE(RestoreTitlePaneTextL());
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::ConstructL
+// --------------------------------------------------------------------------
+inline void CPbk2NlxMoveTopContactsDlg::ConstructL()
+    {
+    CAknDialog::ConstructL( R_AVKON_MENUPANE_EMPTY );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::NewL
+// --------------------------------------------------------------------------
+CPbk2NlxMoveTopContactsDlg* CPbk2NlxMoveTopContactsDlg::NewL(
+		CPbk2NlxReorderingModel& aModel )
+    {
+    CPbk2NlxMoveTopContactsDlg* dlg = new ( ELeave )
+    	CPbk2NlxMoveTopContactsDlg( aModel );
+    CleanupStack::PushL( dlg );
+    dlg->ConstructL();
+    CleanupStack::Pop( dlg );
+    return dlg;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::ExecuteLD
+// --------------------------------------------------------------------------
+TInt CPbk2NlxMoveTopContactsDlg::ExecuteLD()
+    {
+    return CEikDialog::ExecuteLD( R_PBK2_MOVE_TOP_CONTACTS_DLG );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::PostLayoutDynInitL
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::PostLayoutDynInitL()
+	{
+	iPrevSelectedItem = iModel.FocusedContactIndex();
+	if ( iPrevSelectedItem != KErrNotFound )
+	    {
+	    iListBox->SetCurrentItemIndexAndDraw( iPrevSelectedItem );
+	    }
+	CEikCaptionedControl* capControl = Line(ECtrlTopContactList);
+	capControl->SetPointerEventObserver(this);
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::PreLayoutDynInitL
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::PreLayoutDynInitL()
+    {
+    CAknDialog::PreLayoutDynInitL();
+    iListBox = static_cast<CEikColumnListBox*>(Control(ECtrlTopContactList));
+    
+    // set our model
+    iListBox->Model()->SetItemTextArray( &iModel );
+    iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
+    
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray(
+            iModel.TakeIconArray() );
+    iModel.SetContactUpdater( this );
+    
+    //setup scrollbar
+    iListBox->CreateScrollBarFrameL( ETrue );
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+    		CEikScrollBarFrame::EOff,
+    		CEikScrollBarFrame::EAuto );
+    iListBox->HandleItemAdditionL();
+    
+    iListBox->SetListBoxObserver( this );
+    iListBox->SetObserver( this );
+    
+    SetNewTitleTextL();
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::SetNewTitleTextL
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::SetNewTitleTextL ()
+	{
+	CAknTitlePane* title = static_cast<CAknTitlePane*>(CEikonEnv::Static()->
+			AppUiFactory()->StatusPane()->ControlL(
+					TUid::Uid ( EEikStatusPaneUidTitle) ) );
+
+	// Store old one
+	iOldTitleText = title->Text()->AllocL ();
+
+	// Clear the navi pane
+	// Get pointer to status-pane
+	CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->
+	StatusPane ();
+	// Get pointer to navi-pane
+	CAknNavigationControlContainer * naviPane =
+		static_cast<CAknNavigationControlContainer*>(statusPane->ControlL(
+				TUid::Uid ( EEikStatusPaneUidNavi) ) );
+	naviPane->PushDefaultL (ETrue);
+
+	// Set the new text
+	HBufC* tempTitle= CEikonEnv::Static()->AllocReadResourceLC(
+			R_PBK2_MOVE_TOP_CONTACTS_DLG_TITLE );
+	title->SetTextL ( *tempTitle);
+	CleanupStack::PopAndDestroy (tempTitle);
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::RestoreTitlePaneTextL() 
+// --------------------------------------------------------------------------
+//
+void CPbk2NlxMoveTopContactsDlg::RestoreTitlePaneTextL()
+	{
+	CAknTitlePane* title = static_cast<CAknTitlePane*>(CEikonEnv::Static()->
+			AppUiFactory()->StatusPane()->ControlL(
+					TUid::Uid ( EEikStatusPaneUidTitle) ) );
+	if ( iOldTitleText )
+		{
+		title->SetTextL(*iOldTitleText);
+		delete iOldTitleText;
+		iOldTitleText = NULL;
+		}
+	else
+		{
+		title->SetTextToDefaultL();
+		}
+
+	// restore the navi pane
+	// Get pointer to status-pane
+	CEikStatusPane* statusPane =
+		CEikonEnv::Static()->AppUiFactory()->StatusPane();
+	// Get pointer to navi-pane
+	CAknNavigationControlContainer
+			* naviPane =
+					static_cast<CAknNavigationControlContainer*>(
+							statusPane->ControlL(
+									TUid::Uid( EEikStatusPaneUidNavi) ) );
+	naviPane->Pop();
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::OkToExitL
+// --------------------------------------------------------------------------
+TBool CPbk2NlxMoveTopContactsDlg::OkToExitL( TInt aButtonId )
+    {
+	iModel.SetFocusedContactL( iListBox->CurrentItemIndex() );
+	iModel.SetContactUpdater( NULL ); //stop updating contacts
+	return CEikDialog::OkToExitL( aButtonId );
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::OfferKeyEventL
+// --------------------------------------------------------------------------
+TKeyResponse CPbk2NlxMoveTopContactsDlg::OfferKeyEventL
+        ( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse result = EKeyWasNotConsumed;
+        {
+        result = CEikDialog::OfferKeyEventL( aKeyEvent, aType );
+        }
+
+    return result;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::HandleResourceChange
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::HandleResourceChange( TInt aType )
+    {
+    CAknDialog::HandleResourceChange(aType);
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::PointerEvent
+// --------------------------------------------------------------------------
+bool CPbk2NlxMoveTopContactsDlg::PointerEvent(
+		CEikCaptionedControl* /*aControl*/,
+		const TPointerEvent& aPointerEvent )
+	{
+	if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+		{
+		TInt itemUnder;
+		if ( iListBox->View()->XYPosToItemIndex( aPointerEvent.iPosition,
+				itemUnder) )
+			{
+			iPrevSelectedItem = itemUnder;
+			}
+		}
+	return ETrue;
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::HandleListBoxEventL
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::HandleListBoxEventL(
+		CEikListBox* /*aListBox*/,
+		TListBoxEvent aEventType)
+	{
+	if( AknLayoutUtils::PenEnabled() )  
+		{
+		if ( aEventType == EEventItemDraggingActioned )
+		    {
+		    ContinueDragL();
+		    }
+		}	
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::HandleControlEventL
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::HandleControlEventL( 
+		CCoeControl* aControl, 
+		TCoeEvent aEventType )
+	{
+	CEikDialog::HandleControlEventL( aControl, aEventType );
+	if ( aEventType == EEventStateChanged )
+	    {
+	    ContinueDragL();
+	    }
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::ContinueDrag
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::ContinueDragL()
+	{
+	if (iPrevSelectedItem != iListBox->CurrentItemIndex())
+	    {
+    	iModel.Move( iPrevSelectedItem, iListBox->CurrentItemIndex() );
+    	iListBox->DrawNow();
+    	iPrevSelectedItem = iListBox->CurrentItemIndex();
+	    }
+	}
+
+// --------------------------------------------------------------------------
+// CPbk2NlxMoveTopContactsDlg::UpdateContact
+// --------------------------------------------------------------------------
+void CPbk2NlxMoveTopContactsDlg::UpdateContact( const MVPbkContactLink& aContactLink )
+    {
+    TInt index = iModel.ContactIndex( aContactLink );
+    if ( index >= iListBox->TopItemIndex() &&
+         index <= iListBox->BottomItemIndex() )
+        {
+        iListBox->DrawItem(index);
+        }
+    }
+// End of File