--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uifw/AvKon/src/aknemptycontrol.cpp Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,222 @@
+/*
+* Copyright (c) 2005-2008 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: Implementation for an empty control, which only draws the
+* background, to be used on empty areas of status pane.
+*
+*/
+
+
+// INCLUDE FILES
+#include <bacntf.h>
+#include <eikspane.h>
+#include <aknconsts.h>
+#include <AknsDrawUtils.h>
+#include <AknsUtils.h>
+#include <AknUtils.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <AknTasHook.h>
+
+#include "aknemptycontrol.h"
+#include "AknStatuspaneUtils.h"
+
+
+// ============================ MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::CAknEmptyControl
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CAknEmptyControl::CAknEmptyControl()
+ {
+ AKNTASHOOK_ADD( this, "CAknEmptyControl" );
+ iIsActiveIdle = AknStatuspaneUtils::IsActiveIdle();
+ }
+
+
+// ---------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CAknEmptyControl::~CAknEmptyControl()
+ {
+ AKNTASHOOK_REMOVE();
+ AknsUtils::DeregisterControlPosition( this );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::ConstructFromResourceL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknEmptyControl::ConstructFromResourceL( TResourceReader& /*aReader*/ )
+ {
+ MakeVisible( ETrue );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::HandlePointerEventL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknEmptyControl::HandlePointerEventL(
+ const TPointerEvent& aPointerEvent )
+ {
+ if ( !PassPointerEventToAdjacentControlL( aPointerEvent ) )
+ {
+ CAknControl::HandlePointerEventL( aPointerEvent );
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::SizeChanged
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknEmptyControl::SizeChanged()
+ {
+ // No fading if staconpane is active.
+ Window().SetNonFading( AknStatuspaneUtils::StaconPaneActive() );
+
+ AknsUtils::RegisterControlPosition( this );
+ DrawableWindow()->SetOrdinalPosition( -1 ); // Send to back
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::Draw
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CAknEmptyControl::Draw( const TRect& /*aRect*/ ) const
+ {
+ if ( iIsActiveIdle )
+ {
+ return;
+ }
+
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ CWindowGc& gc = SystemGc();
+ MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
+ TRect rect( Rect() );
+ AknsDrawUtils::Background( skin, cc, this, gc, rect );
+ }
+
+
+// ---------------------------------------------------------------------------
+// CAknEmptyControl::PassPointerEventToAdjacentControlL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TBool CAknEmptyControl::PassPointerEventToAdjacentControlL(
+ const TPointerEvent& aPointerEvent )
+ {
+ TBool pointerEventPassedOn( EFalse );
+
+ CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current();
+ if ( statusPane )
+ {
+ TInt currentLayoutResId( statusPane->CurrentLayoutResId() );
+
+ switch ( currentLayoutResId )
+ {
+ case R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL:
+ case R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE:
+ {
+ TRect statusPaneRect;
+ AknLayoutUtils::LayoutMetricsRect(
+ AknLayoutUtils::EStatusPane, statusPaneRect );
+
+ // Check if the pointer event happened in the navi
+ // pane touch responsive area.
+ TAknLayoutRect layoutRect;
+ layoutRect.LayoutRect(
+ statusPaneRect,
+ AknLayoutScalable_Avkon::aid_touch_navi_pane() );
+ TRect naviPaneTouchRect( layoutRect.Rect() );
+
+ if ( naviPaneTouchRect.Contains( aPointerEvent.iPosition ) )
+ {
+ CAknNavigationControlContainer* naviPane =
+ static_cast<CAknNavigationControlContainer*>(
+ statusPane->ControlL(
+ TUid::Uid( EEikStatusPaneUidNavi ) ) );
+ if ( naviPane )
+ {
+ // Pass the event directly to the decorator
+ // because navi pane doesn't handle the events.
+ CAknNavigationDecorator* naviPaneControl =
+ static_cast<CAknNavigationDecorator*>(
+ naviPane->Top() );
+
+ if ( naviPaneControl )
+ {
+ // The position of the pointer event position
+ // needs to be modified so that it's relative
+ // to the navi pane area.
+ TRect naviPaneRect( naviPaneControl->Rect() );
+
+ TPointerEvent naviPaneRelativePointerEvent(
+ aPointerEvent );
+
+ naviPaneRelativePointerEvent.iPosition.iX =
+ naviPaneRelativePointerEvent.iPosition.iX -
+ naviPaneTouchRect.iTl.iX -
+ Rect().iTl.iX;
+
+ naviPaneRelativePointerEvent.iPosition.iY -=
+ ( naviPaneTouchRect.iBr.iY -
+ naviPaneRect.Height() );
+
+ // Pass the modified event to the navi decorator.
+ naviPaneControl->HandlePointerEventL(
+ naviPaneRelativePointerEvent );
+ pointerEventPassedOn = ETrue;
+ }
+ }
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+ return pointerEventPassedOn;
+ }
+
+// -----------------------------------------------------------------------------
+// CAknEmptyControl::HandleResourceChange
+// -----------------------------------------------------------------------------
+//
+void CAknEmptyControl::HandleResourceChange( TInt aType )
+ {
+ CCoeControl::HandleResourceChange( aType );
+
+ if ( aType == KEikDynamicLayoutVariantSwitch ||
+ aType == KAknsMessageSkinChange )
+ {
+ DrawDeferred();
+ }
+ }
+// End of File