phonebookui/Phonebook/View/src/CPbkObserverAdapter.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook/View/src/CPbkObserverAdapter.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,251 @@
+/*
+* Copyright (c) 2002-2004 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:  
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "CPbkObserverAdapter.h"
+#include <MPbkImageOperationObservers.h>
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+/// Unnamed namespace for local definitions
+namespace {
+
+// LOCAL CONSTANTS AND MACROS
+/// Panic codes 
+enum TPanicCode
+    {    
+    EPanicPreCond_PbkThumbnailGetComplete=1,
+    EPanicPreCond_PbkThumbnailGetFailed,
+    EPanicPreCond_PbkThumbnailSetComplete,
+    EPanicPreCond_PbkThumbnailSetFailed,
+    EPanicPreCond_PbkThumbnailGetImageComplete,
+    EPanicPreCond_PbkThumbnailGetImageFailed,
+    EPanicPreCond_PbkThumbnailGetObserver,
+    EPanicPreCond_PbkThumbnailSetObserver,
+    EPanicPreCond_PbkThumbnailGetImageObserver 
+
+    };
+
+void Panic(TPanicCode aReason)
+    {
+    _LIT(KPanicText, "CPbkObserverAdapter");
+    User::Panic(KPanicText, aReason);
+    }
+
+}  // namespace
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CPbkObserverAdapter::CPbkObserverAdapter
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CPbkObserverAdapter::CPbkObserverAdapter()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPbkObserverAdapter::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPbkObserverAdapter::ConstructL()
+    {
+    }
+
+// -----------------------------------------------------------------------------
+// CPbkObserverAdapter::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CPbkObserverAdapter* CPbkObserverAdapter::NewL()
+    {
+    CPbkObserverAdapter* self = new( ELeave ) CPbkObserverAdapter;
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+    
+// Destructor
+CPbkObserverAdapter::~CPbkObserverAdapter()
+    {    
+    }
+
+void CPbkObserverAdapter::DoSetImageGetObserver(MPbkImageGetObserver& 
+    aPbkImageGetObserver)
+    {
+    iPbkImageGetObserver = &aPbkImageGetObserver;
+    }
+
+MPbkImageGetObserver* CPbkObserverAdapter::ImageGetObserver()
+    {
+    return iPbkImageGetObserver;
+    }
+
+void CPbkObserverAdapter::PbkThumbnailGetComplete
+    (MPbkThumbnailOperation& aOperation, CFbsBitmap* aBitmap)
+    {
+    __ASSERT_ALWAYS(iPbkImageGetObserver, Panic(
+        EPanicPreCond_PbkThumbnailGetComplete));
+
+    // MPbkImageOperation and MPbkThumbnailOperation are identical. 
+    // Both contain only the destructor. More complex implementation avoided 
+    // by using reinterpret cast. Otherwise there might be a need to generate 
+    // a new thumbnail operation adapter instance when MPbkImageGetObserver's 
+    // method is called once.
+    
+// TODO reinterpret_cast causes a crash 
+// TO BE CONTINUED wrapper needed for MPbkImageOperation and MPbkThumbnailOperation conversion
+    iPbkImageGetObserver->PbkImageGetComplete(
+        reinterpret_cast<MPbkImageOperation&>(aOperation),aBitmap);
+    }
+
+void CPbkObserverAdapter::PbkThumbnailGetFailed
+    (MPbkThumbnailOperation& aOperation, TInt aError)
+    {
+    __ASSERT_ALWAYS(iPbkImageGetObserver, Panic(
+        EPanicPreCond_PbkThumbnailGetFailed));
+    // MPbkImageOperation and MPbkThumbnailOperation are identical. 
+    iPbkImageGetObserver->PbkImageGetFailed(
+        reinterpret_cast<MPbkImageOperation&>(aOperation), aError);
+    }
+
+
+void CPbkObserverAdapter::DoSetImageSetObserver(MPbkImageSetObserver& 
+    aPbkImageSetObserver)
+    {
+    iPbkImageSetObserver = &aPbkImageSetObserver;
+    }
+
+MPbkImageSetObserver* CPbkObserverAdapter::ImageSetObserver()
+    {
+    return iPbkImageSetObserver;
+    }
+
+void CPbkObserverAdapter::PbkThumbnailSetComplete(
+    MPbkThumbnailOperation& aOperation)
+    {
+    __ASSERT_ALWAYS(iPbkImageSetObserver, Panic(
+        EPanicPreCond_PbkThumbnailSetComplete));
+    // MPbkImageOperation and MPbkThumbnailOperation are identical.
+    iPbkImageSetObserver->PbkImageSetComplete(
+        reinterpret_cast<MPbkImageOperation&>(aOperation));
+    }
+void CPbkObserverAdapter::PbkThumbnailSetFailed(
+    MPbkThumbnailOperation& aOperation, TInt aError)
+    {
+    __ASSERT_ALWAYS(iPbkImageGetObserver, Panic(
+        EPanicPreCond_PbkThumbnailSetFailed));
+    // MPbkImageOperation and MPbkThumbnailOperation are identical.
+    iPbkImageSetObserver->PbkImageSetFailed(
+        reinterpret_cast<MPbkImageOperation&>(aOperation), aError);
+    }
+
+void CPbkObserverAdapter::DoSetImageGetImageObserver(MPbkImageGetImageObserver& 
+            aPbkImageGetImageObserver)
+    {
+    iPbkImageGetImageObserver = &aPbkImageGetImageObserver;
+    }
+
+MPbkImageGetImageObserver* CPbkObserverAdapter::ImageGetImageObserver()
+    {
+    return iPbkImageGetImageObserver;
+    }
+
+void CPbkObserverAdapter::PbkThumbnailGetImageComplete
+    (MPbkThumbnailOperation& aOperation, CPbkImageDataWithInfo* aImageData)
+    {
+    __ASSERT_ALWAYS(iPbkImageGetImageObserver, 
+        Panic(EPanicPreCond_PbkThumbnailGetImageComplete));
+    // MPbkImageOperation and MPbkThumbnailOperation are identical.
+    iPbkImageGetImageObserver->PbkImageGetImageComplete(
+        reinterpret_cast<MPbkImageOperation&>(aOperation), aImageData);
+    }
+
+void CPbkObserverAdapter::PbkThumbnailGetImageFailed
+    (MPbkThumbnailOperation& aOperation, TInt aError)
+    {
+    __ASSERT_ALWAYS(iPbkImageGetImageObserver, 
+        Panic(EPanicPreCond_PbkThumbnailGetImageFailed));
+    // MPbkImageOperation and MPbkThumbnailOperation are identical.
+    iPbkImageGetImageObserver->PbkImageGetImageFailed(
+        reinterpret_cast<MPbkImageOperation&>(aOperation), aError);        
+    }
+
+void CPbkObserverAdapter::SetPbkImageGetObserver(MPbkImageGetObserver& aObserver)
+    {
+    // TODO: Multiple observer might need to be supported
+    DoSetImageGetObserver(aObserver);
+    }
+
+MPbkThumbnailGetObserver& CPbkObserverAdapter::PbkThumbnailGetObserver()
+    {
+    MPbkImageGetObserver* currentObserver = ImageGetObserver();
+    if (!currentObserver)
+        {
+        // Observer must be set before use of this function
+        Panic( EPanicPreCond_PbkThumbnailGetObserver );
+        }
+    return *this;
+    }
+
+void CPbkObserverAdapter::SetPbkImageSetObserver(MPbkImageSetObserver& aObserver)
+    {
+    // TODO: Multiple observer might need to be supported
+    DoSetImageSetObserver(aObserver);
+    }
+
+MPbkThumbnailSetObserver& CPbkObserverAdapter::PbkThumbnailSetObserver()
+    {
+    MPbkImageSetObserver* currentObserver = ImageSetObserver();
+    if (!currentObserver)
+        {
+        // Observer must be set before use of this function
+        Panic( EPanicPreCond_PbkThumbnailSetObserver );
+        }
+    return *this;
+    }
+
+void CPbkObserverAdapter::SetPbkImageGetImageObserver(
+        MPbkImageGetImageObserver& aObserver)
+    {
+    // TODO: Multiple observer might need to be supported
+    DoSetImageGetImageObserver(aObserver);
+    }
+
+MPbkThumbnailGetImageObserver& CPbkObserverAdapter::PbkThumbnailGetImageObserver()
+    {
+    MPbkImageGetImageObserver* currentObserver = ImageGetImageObserver();
+
+    if (!currentObserver)
+        {
+        // Observer must be set before use of this function
+        Panic( EPanicPreCond_PbkThumbnailGetImageObserver );
+        }
+    return *this;
+    }
+
+//  End of File