--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2ContactEditorOperator.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,187 @@
+/*
+* 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 server app contact editor operator.
+*
+*/
+
+#include "CPbk2ContactEditorOperator.h"
+
+// Phonebook 2
+#include "CPbk2ServerAppAppUi.h"
+#include <CPbk2ContactEditorDlg.h>
+#include <MPbk2ApplicationServices.h>
+
+// Virtual Phonebook
+#include <MVPbkStoreContact.h>
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
+#include <CVPbkContactManager.h>
+#include <VPbkUtils.h>
+
+// System includes
+#include <AiwContactAssignDataTypes.h>
+
+
+using namespace AiwContactAssign;
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::CPbk2ContactEditorOperator
+// --------------------------------------------------------------------------
+//
+inline CPbk2ContactEditorOperator::CPbk2ContactEditorOperator
+ ( MPbk2ExitCallback& aExitCallback,
+ MPbk2EditedContactObserver& aContactObserver ) :
+ iExitCallback( aExitCallback ),
+ iContactObserver( aContactObserver )
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::~CPbk2ContactEditorOperator
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorOperator::~CPbk2ContactEditorOperator()
+ {
+ if ( iSelfPtr )
+ {
+ *iSelfPtr = NULL;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::NewLC
+// --------------------------------------------------------------------------
+//
+CPbk2ContactEditorOperator* CPbk2ContactEditorOperator::NewLC
+ ( MPbk2ExitCallback& aExitCallback,
+ MPbk2EditedContactObserver& aContactObserver )
+ {
+ CPbk2ContactEditorOperator* self =
+ new ( ELeave ) CPbk2ContactEditorOperator
+ ( aExitCallback, aContactObserver );
+ CleanupStack::PushL( self );
+ return self;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::OpenEditorL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorOperator::OpenEditorL
+ ( MVPbkStoreContact*& aStoreContact, TInt& aIndex,
+ TUint& aFlags, TCoeHelpContext& aHelpContext )
+ {
+ // Set editor flags
+ TUint32 editorFlags = 0;
+ if ( aFlags & EHideEditorExit )
+ {
+ editorFlags |= TPbk2ContactEditorParams::EHideExit;
+ }
+ if ( aFlags & ECreateNewContact )
+ {
+ editorFlags |= TPbk2ContactEditorParams::ENewContact;
+ }
+ else
+ {
+ editorFlags |= TPbk2ContactEditorParams::EModified;
+ }
+
+ TCoeHelpContext* helpContext = NULL;
+ if ( !aHelpContext.IsNull() )
+ {
+ helpContext = &aHelpContext;
+ }
+
+ // Verify syncronization field existance and content
+ CPbk2ServerAppAppUi& appUi = static_cast<CPbk2ServerAppAppUi&>
+ ( *CEikonEnv::Static()->EikAppUi() );
+
+ VPbkUtils::VerifySyncronizationFieldL(
+ appUi.ApplicationServices().ContactManager().FsSession(),
+ aStoreContact->ParentStore().StoreProperties().SupportedFields(),
+ *aStoreContact );
+
+ MVPbkBaseContactField* field = NULL;
+ if ( aIndex >= KErrNone )
+ {
+ field = aStoreContact->Fields().FieldAtLC( aIndex );
+ }
+ else
+ {
+ // We must keep cleanup stack level the same
+ CleanupStack::PushL( field );
+ }
+
+ TPbk2ContactEditorParams params
+ ( editorFlags, field, helpContext, this );
+
+ CPbk2ContactEditorDlg* editor = CPbk2ContactEditorDlg::NewL
+ ( params, aStoreContact, iContactObserver );
+ aStoreContact = NULL; // ownership was taken away
+ iContactEditorEliminator = editor;
+ editor->ResetWhenDestroyed( &iContactEditorEliminator );
+ editor->ExecuteLD();
+
+ aIndex = params.iFocusedIndex;
+
+ CleanupStack::PopAndDestroy( field );
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::RequestExitL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorOperator::RequestExitL( TInt aCommandId )
+ {
+ if ( iContactEditorEliminator )
+ {
+ iContactEditorEliminator->RequestExitL( aCommandId );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::ForceExitL
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorOperator::ForceExit()
+ {
+ if ( iContactEditorEliminator )
+ {
+ iContactEditorEliminator->ForceExit();
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::ResetWhenDestroyed
+// --------------------------------------------------------------------------
+//
+void CPbk2ContactEditorOperator::ResetWhenDestroyed(
+ MPbk2DialogEliminator** aSelfPtr )
+ {
+ iSelfPtr = aSelfPtr;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ContactEditorOperator::OkToExitL
+// --------------------------------------------------------------------------
+//
+TBool CPbk2ContactEditorOperator::OkToExitL( TInt aCommandId )
+ {
+ // Deny editor exit and pass an asynchronous query to the consumer,
+ // which may later approve exit
+ iExitCallback.OkToExitL( aCommandId );
+ return EFalse;
+ }
+
+// End of File