--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2AssignSelectFieldDlg.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,247 @@
+/*
+* 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 select field dialog for assign service.
+*
+*/
+
+
+#include "CPbk2AssignSelectFieldDlg.h"
+
+// Phonebook 2
+#include "MPbk2SelectFieldProperty.h"
+#include "CPbk2KeyEventDealer.h"
+#include <MPbk2ExitCallback.h>
+
+// System includes
+#include <avkon.hrh>
+#include <eikcmobs.h>
+#include <eikappui.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+#ifdef _DEBUG
+enum TPanicCode
+ {
+ EPanicPreCond_ResetWhenDestroyed = 1
+ };
+
+void Panic( TInt aReason )
+ {
+ _LIT( KPanicText, "CPbk2AssignSelectFieldDlg" );
+ User::Panic( KPanicText, aReason );
+ }
+
+#endif // _DEBUG
+
+} /// namespace
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::CPbk2AssignSelectFieldDlg
+// --------------------------------------------------------------------------
+//
+CPbk2AssignSelectFieldDlg::CPbk2AssignSelectFieldDlg
+ ( MPbk2ExitCallback& aExitCallback ):
+ iExitCallback( aExitCallback )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::~CPbk2AssignSelectFieldDlg
+// --------------------------------------------------------------------------
+//
+CPbk2AssignSelectFieldDlg::~CPbk2AssignSelectFieldDlg()
+ {
+ // Tells ExecuteLD this object has been destroyed
+ if ( iDestroyedPtr )
+ {
+ *iDestroyedPtr = ETrue;
+ }
+
+ if ( iSelfPtr )
+ {
+ *iSelfPtr = NULL;
+ }
+
+ delete iDealer;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::ConstructL
+// --------------------------------------------------------------------------
+//
+inline void CPbk2AssignSelectFieldDlg::ConstructL()
+ {
+ iDealer = CPbk2KeyEventDealer::NewL( *this );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::NewL
+// --------------------------------------------------------------------------
+//
+CPbk2AssignSelectFieldDlg* CPbk2AssignSelectFieldDlg::NewL
+ ( MPbk2ExitCallback& aExitCallback )
+ {
+ CPbk2AssignSelectFieldDlg* self =
+ new ( ELeave ) CPbk2AssignSelectFieldDlg( aExitCallback );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::ExecuteLD
+// --------------------------------------------------------------------------
+//
+TInt CPbk2AssignSelectFieldDlg::ExecuteLD
+ ( MPbk2SelectFieldProperty& aProperty )
+ {
+ CleanupStack::PushL( this );
+
+ iProperty = &aProperty;
+
+ aProperty.PrepareL();
+
+ TBool thisDestroyed = EFalse;
+ iDestroyedPtr = &thisDestroyed;
+
+ TInt result = aProperty.ExecuteL();
+
+ if ( thisDestroyed )
+ {
+ // This object has been destroyed
+ CleanupStack::Pop( this );
+ }
+ else
+ {
+ iProperty = NULL;
+ // If end key has been pressed the property dialog
+ // returns with KErrCancel. If also abort is ordered we
+ // must change the return value to KErrAbort
+ if ( iExitRecord.IsSet( EAbortOrdered ) && result == KErrCancel )
+ {
+ result = KErrAbort;
+ }
+
+ CleanupStack::PopAndDestroy( this );
+ }
+
+ return result;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::RequestExitL
+// --------------------------------------------------------------------------
+//
+void CPbk2AssignSelectFieldDlg::RequestExitL( TInt aCommandId )
+ {
+ if ( iProperty )
+ {
+ iProperty->Cancel( aCommandId );
+ iProperty = NULL;
+ }
+
+ if ( aCommandId == EEikBidCancel )
+ {
+ // End key exit
+ iExitRecord.Set( EAbortApproved );
+ ExitApplication( EAknCmdExit );
+ }
+ else
+ {
+ delete this;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::ForceExit
+// --------------------------------------------------------------------------
+//
+void CPbk2AssignSelectFieldDlg::ForceExit()
+ {
+ if ( iProperty )
+ {
+ // Command id does not matter much, it shouldn't however be
+ // EEikBidCancel since that indicates end key and causes
+ // application exit
+ iProperty->Cancel( EAknSoftkeyClose );
+ iProperty = NULL;
+ }
+
+ delete this;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::ResetWhenDestroyed
+// --------------------------------------------------------------------------
+//
+void CPbk2AssignSelectFieldDlg::ResetWhenDestroyed
+ ( MPbk2DialogEliminator** aSelfPtr )
+ {
+ __ASSERT_DEBUG( !aSelfPtr || *aSelfPtr == this,
+ Panic( EPanicPreCond_ResetWhenDestroyed ) );
+
+ iSelfPtr = aSelfPtr;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::Pbk2ProcessKeyEventL
+// --------------------------------------------------------------------------
+//
+TBool CPbk2AssignSelectFieldDlg::Pbk2ProcessKeyEventL
+ ( const TKeyEvent& aKeyEvent, TEventCode aType )
+ {
+ TBool ret = EFalse;
+
+ if ( aType == EEventKey && aKeyEvent.iCode == EKeyEscape )
+ {
+ // We need to catch end key pressed events for quering
+ // the client is it ok to exit
+ iExitRecord.Set( EAbortOrdered );
+
+ // If exit callback returned EFalse, the exit is cancelled
+ if ( !iExitCallback.OkToExitL( EEikBidCancel ) )
+ {
+ iExitRecord.Clear( EAbortApproved );
+ }
+
+ ret = ETrue;
+ }
+
+ return ret;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2AssignSelectFieldDlg::ExitApplication
+// --------------------------------------------------------------------------
+//
+void CPbk2AssignSelectFieldDlg::ExitApplication( TInt aCommandId )
+ {
+ if ( iExitRecord.IsSet( EAbortOrdered ) &&
+ iExitRecord.IsSet( EAbortApproved ) )
+ {
+ CEikAppUi* appUi = static_cast<CEikAppUi*>
+ ( CCoeEnv::Static()->AppUi() );
+ MEikCommandObserver* cmdObs =
+ static_cast<MEikCommandObserver*>( appUi );
+
+ // Dialog is closed so there is nothing to do if
+ // ProcessCommandL leaves. Of course it shouldn't leave in
+ // practice because it's exit command.
+ TRAP_IGNORE( cmdObs->ProcessCommandL( aCommandId ) );
+ }
+ }
+
+// End of File