phonebookui/Phonebook2/CommonUI/src/CPbk2ControlContainer.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2ControlContainer.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,370 @@
+/*
+* Copyright (c) 2002-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: 
+*       Common control container class for Phonebook 2 application.
+*
+*/
+
+
+// INCLUDE FILES
+#include "CPbk2ControlContainer.h"
+
+// Phonebook 2
+#include <MPbk2KeyEventHandler.h>
+#include <MPbk2PointerEventHandler.h>
+
+// SYSTEM INCLUDES
+#include <AknUtils.h>
+
+// Debugging headers
+#include <Pbk2Debug.h>
+
+/// Unnamed namespace for local definitions
+namespace {
+
+#ifdef _DEBUG
+
+enum TPanicCode
+    {
+    EPanicPostCond_Constructor = 1,
+    EPanicPreCond_ConstructL,
+    EPanicPostCond_ConstructL,
+    EPanicPostCond_DestroyControl,
+    EPanicPreCond_SetCoeControlL,
+    EPanicPostCond_SetCoeControlL,
+    EPanicPreCond_ComponentControl,
+    };
+
+void Panic(TPanicCode aReason)
+    {
+    _LIT( KPanicText, "CPbk2ControlContainerImpl" );
+    User::Panic( KPanicText, aReason );
+    }
+
+#endif // _DEBUG
+
+} // namespace
+
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::CPbk2ControlContainerImpl
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2ControlContainerImpl::CPbk2ControlContainerImpl
+        ( MPbk2KeyEventHandler* aKeyEventHandler,
+          MPbk2PointerEventHandler* aPointerHandler ) :
+            iKeyEventHandler( aKeyEventHandler ),
+            iPointerEventHandler( aPointerHandler )
+    {
+    SetComponentsToInheritVisibility( ETrue );
+    __ASSERT_DEBUG(!iControl, Panic(EPanicPostCond_Constructor));
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::~CPbk2ControlContainerImpl
+// --------------------------------------------------------------------------
+//
+EXPORT_C CPbk2ControlContainerImpl::~CPbk2ControlContainerImpl()
+    {
+    if (iOwnsControl)
+        {
+        delete iControl;
+        }
+    delete iLongTapDetector;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::ConstructL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::ConstructL
+        ( MObjectProvider& aProvider )
+    {
+    // PreCond
+    __ASSERT_DEBUG(!iControl, Panic(EPanicPreCond_ConstructL));
+
+    SetMopParent(&aProvider);
+
+    // Create a window, this is the top-level container control
+    CreateWindowL();
+
+    // PostCond
+    __ASSERT_DEBUG(!iControl && OwnsWindow(), Panic(EPanicPostCond_ConstructL));
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::CoeControl
+// --------------------------------------------------------------------------
+//
+EXPORT_C CCoeControl* CPbk2ControlContainerImpl::CoeControl() const
+    {
+    return iControl;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::DestroyControl
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::DestroyControl()
+    {
+    if (iOwnsControl)
+        {
+        delete iControl;
+        iControl = NULL;
+        __ASSERT_DEBUG(!CoeControl(), Panic(EPanicPostCond_DestroyControl));
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::KeyEventHandler
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2KeyEventHandler*
+        CPbk2ControlContainerImpl::KeyEventHandler() const
+    {
+    return iKeyEventHandler;
+    }
+    
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::PointerEventHandler
+// --------------------------------------------------------------------------
+//
+EXPORT_C MPbk2PointerEventHandler*
+        CPbk2ControlContainerImpl::PointerEventHandler() const
+    {
+    return iPointerEventHandler;
+    }    
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::SetKeyEventHandler
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::SetKeyEventHandler
+        (MPbk2KeyEventHandler* aKeyEventHandler)
+    {
+    iKeyEventHandler = aKeyEventHandler;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::SetHelpContext
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::SetHelpContext
+        (const TCoeHelpContext& aContext)
+    {
+    iHelpContext = aContext;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::GetHelpContext
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::GetHelpContext
+        (TCoeHelpContext& aContext) const
+    {
+    aContext = iHelpContext;
+    }
+    
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::LongTapDetectorL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CAknLongTapDetector& CPbk2ControlContainerImpl::LongTapDetectorL()
+    {
+    if ( !iLongTapDetector )
+        {
+        iLongTapDetector = CAknLongTapDetector::NewL( this );
+        }
+    return *iLongTapDetector;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::SetCoeControl
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::SetCoeControl(
+        CCoeControl* aControl,
+        const TRect& aRect,
+        TBool aOwnsControl /* = ETrue */ )
+    {
+    __ASSERT_DEBUG(OwnsWindow(), Panic(EPanicPreCond_SetCoeControlL));
+
+    // Set the control
+    if (aControl != iControl)
+        {
+        if (iOwnsControl)
+            {
+            delete iControl;
+            }
+        iControl = aControl;
+        }
+
+    // Store ownership request
+    iOwnsControl = aOwnsControl;
+    RemoveForegroundObserver();
+
+    // Set rectangle
+    SetRect(aRect);
+
+    __ASSERT_DEBUG(CoeControl()==aControl, Panic(EPanicPostCond_SetCoeControlL));
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::OfferKeyEventL
+// --------------------------------------------------------------------------
+//
+EXPORT_C TKeyResponse CPbk2ControlContainerImpl::OfferKeyEventL
+        (const TKeyEvent& aKeyEvent, TEventCode aType)
+    {
+    PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING
+    ("CPbk2ControlContainerImpl::OfferKeyEventL(0x%x),Code=%d,Mod=%x,Type=%d"), 
+        this, aKeyEvent.iCode, aKeyEvent.iModifiers, aType );
+        
+    TKeyResponse ret = EKeyWasNotConsumed;
+
+    // Offer key event first to the key event handler
+    if ( iKeyEventHandler && iKeyEventHandler->Pbk2ProcessKeyEventL
+            ( aKeyEvent, aType ) )
+        {
+        ret = EKeyWasConsumed;
+        }
+    // Not consumed by the key handler, offer to the control next
+    if ( ( ret == EKeyWasNotConsumed ) && iControl )
+        {
+        ret = iControl->OfferKeyEventL( aKeyEvent, aType );
+        }
+    return ret;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::CountComponentControls
+// --------------------------------------------------------------------------
+//
+EXPORT_C TInt CPbk2ControlContainerImpl::CountComponentControls() const
+    {
+    // iControl is the only subcontrol
+    return iControl ? 1 : 0;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::ComponentControl
+// --------------------------------------------------------------------------
+//
+EXPORT_C CCoeControl* CPbk2ControlContainerImpl::ComponentControl
+        ( TInt PBK2_DEBUG_ONLY( aIndex ) ) const
+    {
+    // PreCond: Assert that the control is assigned and aIndex is sensible
+    __ASSERT_DEBUG( iControl && aIndex == 0,
+        Panic( EPanicPreCond_ComponentControl ) );
+
+    // iControl is the only subcontrol
+    return iControl;
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::SizeChanged
+// This control is only a container; sets iControl's rectangle
+// to this control's rectangle.
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::SizeChanged()
+    {
+    if ( iControl )
+        {
+        // Set the control's rectangle to fill this container's rectangle
+        iControl->SetRect( Rect() );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::FocusChanged
+// Forwards focus changed events.
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CPbk2ControlContainerImpl::FocusChanged( TDrawNow aDrawNow )
+    {
+    if ( iControl && !IsNonFocusing() )
+        {
+        iControl->SetFocus( IsFocused(), aDrawNow );
+        }
+    
+    if ( iObserver && iControl )
+        {
+        TRAP_IGNORE( iObserver->HandleForegroundEventL( IsFocused() ) );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::HandlePointerEventL
+// --------------------------------------------------------------------------
+//    
+EXPORT_C void CPbk2ControlContainerImpl::HandlePointerEventL(
+        const TPointerEvent& aPointerEvent )
+    {    
+    if ( AknLayoutUtils::PenEnabled() )
+        { 
+        // Offer pointer event first to the control
+        if (  iControl )
+            {
+            iControl->HandlePointerEventL( aPointerEvent );
+            }           
+            
+        // Offer pointer event next to the pointer event handler        
+        if ( iPointerEventHandler )    
+            {
+            iPointerEventHandler->Pbk2ProcessPointerEventL( aPointerEvent );
+            }             
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::HandleLongTapEventL
+// --------------------------------------------------------------------------
+//    
+EXPORT_C void CPbk2ControlContainerImpl::HandleLongTapEventL(
+        const TPoint& aPenEventLocation, 
+        const TPoint& aPenEventScreenLocation )
+    {
+    if ( AknLayoutUtils::PenEnabled() )
+        { 
+        // Offer long tap event to the pointer event handler
+        if ( iPointerEventHandler )    
+            {
+            iPointerEventHandler->Pbk2HandleLongTapEventL(
+                aPenEventLocation, aPenEventScreenLocation );
+            }             
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::AddForegroundObserver
+// --------------------------------------------------------------------------
+// 
+EXPORT_C void CPbk2ControlContainerImpl::AddForegroundObserver
+        ( MPbk2ControlContainerForegroundEventObserver* aObserver )
+    {
+    iObserver = aObserver;
+    }
+
+
+// --------------------------------------------------------------------------
+// CPbk2ControlContainerImpl::RemoveForegroundObserver
+// --------------------------------------------------------------------------
+// 
+EXPORT_C void CPbk2ControlContainerImpl::RemoveForegroundObserver()
+    {
+    iObserver = NULL;
+    }
+
+//  End of File