--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkThumbnailCmd.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 2002 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:
+* Thumbnail command event handling class.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbkThumbnailCmd.h"
+
+#include <eikmenup.h> // CEikMenuPane
+#include <AknWaitDialog.h>
+#include <aknnotewrappers.h>
+#include <sysutil.h>
+#include <StringLoader.h>
+
+#include <PbkView.rsg> // PbkView resource symbols
+#include <PbkView.hrh>
+
+#include "CPbkThumbnailManager.h"
+#include "CPbkThumbnailPopup.h"
+#include <CPbkDrmManager.h>
+
+#include <CPbkContactItem.h>
+#include <MPbkMenuCommandObserver.h>
+
+#include <MGFetch.h>
+
+/// Unnamed namespace for local definitons
+namespace {
+
+#ifdef _DEBUG
+enum TPanicCode
+ {
+ EPanicPreCond_PbkThumbnailSetComplete,
+ EPanicPreCond_PbkThumbnailSetFailed
+ };
+
+void Panic(TPanicCode aReason)
+ {
+ _LIT(KPanicText, "CPbkThumbnailCmd");
+ User::Panic(KPanicText, aReason);
+ }
+#endif // _DEBUG
+
+} // namespace
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+inline CPbkThumbnailCmd::CPbkThumbnailCmd
+ (CPbkContactEngine& aEngine,
+ CPbkThumbnailPopup& aThumbnailPopup) :
+ iEngine(aEngine),
+ iThumbnailPopup(aThumbnailPopup)
+ {
+ }
+
+inline void CPbkThumbnailCmd::ConstructL()
+ {
+ iThumbnailManager = CPbkThumbnailManager::NewL(iEngine);
+ iDrmManager = CPbkDrmManager::NewL();
+ }
+
+CPbkThumbnailCmd* CPbkThumbnailCmd::NewL
+ (CPbkContactEngine& aEngine,
+ CPbkThumbnailPopup& aThumbnailPopup)
+ {
+ CPbkThumbnailCmd* self = new (ELeave)
+ CPbkThumbnailCmd(aEngine, aThumbnailPopup);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CPbkThumbnailCmd::~CPbkThumbnailCmd()
+ {
+ if (iDestroyed && *iDestroyed==EFalse)
+ {
+ *iDestroyed=ETrue;
+ }
+ delete iDrmManager;
+ delete iThumbOperation;
+ delete iWaitNote;
+ delete iThumbnailManager;
+ }
+
+TBool CPbkThumbnailCmd::FetchThumbnailL
+ (CPbkContactItem& aContactItem)
+ {
+ TBool result = EFalse;
+ Cancel();
+
+ // fetch thumbnail from media gallery
+ CDesCArray* selectedFile = new(ELeave) CDesCArrayFlat(1);
+ CleanupStack::PushL(selectedFile);
+ TBool destroyed(EFalse);
+ iDestroyed=&destroyed;
+ TBool res = MGFetch::RunL(*selectedFile, EImageFile, EFalse, this);
+ if ( *iDestroyed==EFalse && res && selectedFile->Count() > 0)
+ {
+ CAknWaitDialog* waitNote =
+ new(ELeave) CAknWaitDialog(reinterpret_cast<CEikDialog**>(&iWaitNote));
+ waitNote->ExecuteLD(R_QTN_GEN_NOTE_FETCHING);
+ CleanupStack::PushL(waitNote);
+
+ TPtrC fileName = (*selectedFile)[0];
+ iThumbOperation =
+ iThumbnailManager->SetThumbnailAsyncL
+ (*this, aContactItem, fileName);
+
+ CleanupStack::Pop(waitNote);
+ iWaitNote = waitNote;
+ iContactItem = &aContactItem;
+ result = ETrue;
+ }
+ iDestroyed = NULL;
+ CleanupStack::PopAndDestroy(selectedFile);
+ return result;
+ }
+
+TBool CPbkThumbnailCmd::RemoveThumbnailL
+ (CPbkContactItem& aContactItem)
+ {
+ Cancel();
+ iThumbnailManager->RemoveThumbnail(aContactItem);
+ if (iThumbnailPopup.ContactId() == aContactItem.Id())
+ {
+ iThumbnailPopup.CancelLoading();
+ }
+ return ETrue;
+ }
+
+void CPbkThumbnailCmd::DynInitMenuPaneL
+ (TInt /*aResourceId*/,
+ CEikMenuPane& aMenuPane,
+ CPbkContactItem& aContactItem)
+ {
+ // if context pane not present, dim all thumbnail related items.
+ if ( !iAvkonAppUi->StatusPane()->
+ PaneCapabilities(TUid::Uid(EEikStatusPaneUidContext)).IsInCurrentLayout() )
+ {
+ aMenuPane.SetItemDimmed(EPbkCmdRemoveThumbnail, ETrue);
+ aMenuPane.SetItemDimmed(EPbkCmdFetchThumbnail, ETrue);
+ }
+
+ // Filter remove thumbnail item
+ else if (!iThumbnailManager->HasThumbnail(aContactItem))
+ {
+ aMenuPane.SetItemDimmed(EPbkCmdRemoveThumbnail, ETrue);
+ }
+ }
+
+void CPbkThumbnailCmd::PbkThumbnailSetComplete
+ (MPbkThumbnailOperation&
+#ifdef _DEBUG
+ aOperation
+#endif
+ )
+ {
+ __ASSERT_DEBUG(&aOperation == iThumbOperation,
+ Panic(EPanicPreCond_PbkThumbnailSetComplete));
+
+ delete iThumbOperation;
+ iThumbOperation = NULL;
+
+ // Display the thumbnail
+ iThumbnailPopup.Load(*iContactItem, NULL );
+
+ // Dismiss the wait note
+ TRAPD(err, iWaitNote->ProcessFinishedL());
+ if (err != KErrNone)
+ {
+ delete iWaitNote;
+ iWaitNote = NULL;
+ }
+ }
+
+void CPbkThumbnailCmd::PbkThumbnailSetFailed
+ (MPbkThumbnailOperation&
+#ifdef _DEBUG
+ aOperation
+#endif
+ ,TInt aError)
+ {
+ __ASSERT_DEBUG(&aOperation == iThumbOperation,
+ Panic(EPanicPreCond_PbkThumbnailSetFailed));
+
+ delete iThumbOperation;
+ iThumbOperation = NULL;
+
+ // Dismiss the wait note
+ TRAPD(err, iWaitNote->ProcessFinishedL());
+ if (err != KErrNone)
+ {
+ delete iWaitNote;
+ iWaitNote = NULL;
+ }
+
+ // Report the failure to the user
+ CCoeEnv::Static()->HandleError(aError);
+ }
+
+TBool CPbkThumbnailCmd::VerifySelectionL
+ (const MDesCArray* aSelectedFiles)
+ {
+ TBool result = EFalse;
+ if (iDestroyed && *iDestroyed==EFalse && aSelectedFiles && aSelectedFiles->MdcaCount() > 0)
+ {
+ // DRM for phonebook thumbnail fetch
+ TPtrC fileName = aSelectedFiles->MdcaPoint(0);
+ if (iDrmManager->IsProtectedFile(fileName))
+ {
+ // show user copyright note
+ HBufC* prompt = CCoeEnv::Static()->AllocReadResourceLC(R_QTN_DRM_NOT_ALLOWED);
+ CAknInformationNote* dlg = new(ELeave) CAknInformationNote(ETrue);
+ dlg->ExecuteLD(*prompt);
+ CleanupStack::PopAndDestroy(); // prompt
+ }
+ else
+ {
+ result = ETrue;
+ }
+ }
+ return result;
+ }
+
+void CPbkThumbnailCmd::Cancel()
+ {
+ iContactItem = NULL;
+ delete iWaitNote;
+ iWaitNote = NULL;
+ delete iThumbOperation;
+ iThumbOperation = NULL;
+ }
+
+TBool CPbkThumbnailCmd::OkToExit()
+ {
+ TBool ret(ETrue);
+ if (iDestroyed && *iDestroyed==EFalse)
+ {
+ // MGFetch call not returned
+ ret=EFalse;
+ }
+ return ret;
+ }
+// End of File