diff -r 000000000000 -r f72a12da539e idlehomescreen/xmluirendering/uiengine/src/xncontroladapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/uiengine/src/xncontroladapter.cpp Thu Dec 17 08:40:49 2009 +0200 @@ -0,0 +1,584 @@ +/* +* 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: Xuikon control adapter source file +* +*/ + + +// System includes +#include + +// User includes +#include "xncontroladapter.h" +#include "xncontroladapterimpl.h" +#include "xnproperty.h" +#include "xnnodepluginif.h" +#include "xnnode.h" +#include "xnuiengine.h" +#include "xncomponent.h" +#include "xncomponentnodeimpl.h" +#include "xntype.h" + +#include "xnviewnodeimpl.h" +#include "xneditmode.h" + +// Constants +const TInt KLongTapStartDelay( 500000 ); // 0.5s +const TInt KLongTapTimeDelay( 1500000 ); // 1.5s + +// ----------------------------------------------------------------------------- +// CreateLongTapDetectorL +// Checks wheter longtap detector is needed for this node +// ----------------------------------------------------------------------------- +// +static TBool CreateLongTapDetectorL( CXnNode& aNode ) + { + if ( AknLayoutUtils::PenEnabled() ) + { + if ( aNode.Type()->Type() == KMenuBarNode ) + { + RPointerArray< CXnNode >& children( aNode.Children() ); + + for ( TInt i = 0; i < children.Count(); i++ ) + { + CXnProperty* prop( children[i]->GetPropertyL( + XnPropertyNames::common::KLongTap ) ); + + if ( prop && prop->StringValue() == XnPropertyNames::KTrue ) + { + return ETrue; + } + } + } + else + { + CXnProperty* prop( aNode.GetPropertyL( + XnPropertyNames::common::KLongTap ) ); + + if ( prop && prop->StringValue() == XnPropertyNames::KTrue ) + { + return ETrue; + } + } + } + + return EFalse; + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::NewL +// Two-phased constructor. Can leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C CXnControlAdapter* CXnControlAdapter::NewL( CXnNodePluginIf& aNode ) + { + CXnControlAdapter* self = new ( ELeave ) CXnControlAdapter; + CleanupStack::PushL( self ); + self->ConstructL( aNode ); + CleanupStack::Pop(); + return self; + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::~CXnControlAdapter +// Destructor. +// ----------------------------------------------------------------------------- +// +EXPORT_C CXnControlAdapter::~CXnControlAdapter() + { + delete iImpl; + delete iLongTapDetector; + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::CXnControlAdapter +// C++ default constructor. Must not leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C CXnControlAdapter::CXnControlAdapter() + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::ConstructL +// 2nd phase constructor. Can leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::ConstructL( CXnNodePluginIf& aNode ) + { + iImpl = CXnControlAdapterImpl::NewL( aNode, *this, SystemGc() ); + + if ( CreateLongTapDetectorL( aNode.Node() ) ) + { + iLongTapDetector = CAknLongTapDetector::NewL( this ); + + iLongTapDetector->SetTimeDelayBeforeAnimation( KLongTapStartDelay ); + iLongTapDetector->SetLongTapDelay( KLongTapTimeDelay ); + } + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetComponent +// Sets component object to adapter. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetComponent( CXnComponent* aComponent ) + { + iImpl->SetComponent( aComponent ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::Component +// Returns component attached to this adapter +// ----------------------------------------------------------------------------- +// +CXnComponent* CXnControlAdapter::Component() const + { + return const_cast< CXnComponent* >( iImpl->Component() ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::Component +// Gets component object from adapter. +// ----------------------------------------------------------------------------- +// +EXPORT_C CXnComponent* CXnControlAdapter::Component() + { + return iImpl->Component(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::OfferKeyEventL +// Handles key events. +// ----------------------------------------------------------------------------- +// +EXPORT_C TKeyResponse CXnControlAdapter::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + return iImpl->OfferKeyEventL( aKeyEvent, aType ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::HandleControlEventL +// Handles control events. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::HandleControlEventL( + CCoeControl* /*aControl*/, + TCoeEvent /*aEventType*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::HandleLongTapEventL +// Handles the long tap events. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::HandleLongTapEventL( + const TPoint& aPenEventLocation, + const TPoint& aPenEventScreenLocation ) + { + CXnNode* node( &Component()->Node()->Node() ); + + CXnUiEngine* engine( node->UiEngine() ); + + engine->DisableRenderUiLC(); + + iImpl->HandleLongTapEventL( aPenEventLocation, aPenEventScreenLocation ); + + CleanupStack::PopAndDestroy(); // DisableRenderUiLC; + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::EnableLongTapAnimation +// Handles the long tap events. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::EnableLongTapAnimation( const TBool aAnimation ) + { + if ( iLongTapDetector ) + { + iLongTapDetector->EnableLongTapAnimation( aAnimation ); + } + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::HandlePointerEventL +// Handle pointer events +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + TBool consumed( EFalse ); + + switch( aPointerEvent.iType ) + { + case TPointerEvent::EButton1Down: + case TPointerEvent::EButton1Up: + case TPointerEvent::EDrag: + consumed = iImpl->HandlePointerEventL( aPointerEvent ); + break; + default: + break; + } + + if ( !consumed ) + { + CCoeControl::HandlePointerEventL( aPointerEvent ); + } + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::Draw +// Draws the control +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::Draw( const TRect& aRect ) const + { + iImpl->Draw( aRect ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::Draw +// Draws the control +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::Draw( const TRect& aRect, CWindowGc& aGc ) const + { + iImpl->Draw( aRect, aGc ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::ComponentControl +// Return a child control by index +// ----------------------------------------------------------------------------- +// +EXPORT_C CCoeControl* CXnControlAdapter::ComponentControl( TInt aIndex ) const + { + return iImpl->ComponentControl( aIndex ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::CountComponentControls +// Return count of children +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CXnControlAdapter::CountComponentControls() const + { + return iImpl->CountComponentControls(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetVisible +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetVisible( TBool aVisible ) + { + MakeVisible( aVisible ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::AppendChildL +// ----------------------------------------------------------------------------- +// +void CXnControlAdapter::AppendChildL(CXnControlAdapter& aChild, CXnNode& aNode) + { + iImpl->AppendChildL(aChild, aNode); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::IsDrawingAllowed +// Checks whether drawing is allowed +// ----------------------------------------------------------------------------- +// +EXPORT_C TBool CXnControlAdapter::IsDrawingAllowed() const + { + return iImpl->IsDrawingAllowed(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::ContentBitmaps +// Gets content bitmaps +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::ContentBitmaps( + CFbsBitmap*& aBitmap, + CFbsBitmap*& aMask ) + { + iImpl->ContentBitmaps( aBitmap, aMask ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetContentBitmaps +// Sets content bitmaps +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetContentBitmaps( + CFbsBitmap* aBitmap, + CFbsBitmap* aMask ) + { + iImpl->SetContentBitmaps( aBitmap, aMask ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetContentBitmaps +// Sets content bitmaps +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetContentBitmaps( + const TDesC& aBitmapUrl, + const TDesC& aMaskUrl ) + { + TRAP_IGNORE( iImpl->SetContentBitmapsL( aBitmapUrl, aMaskUrl ) ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::DrawContentImage +// Draws content image +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::DrawContentImage() const + { + iImpl->DrawContentImage(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SizeChanged +// Control size change notification +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SizeChanged() + { + iImpl->SizeChanged(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SkinChanged +// Skin change notification +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SkinChanged() + { + TRAP_IGNORE( Component()->Node()->SetDirtyL() ); + + iImpl->SkinChanged(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::FocusChanged +// Focus change notification +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::FocusChanged( TDrawNow /*aDrawNow*/ ) + { + TRAP_IGNORE( iImpl->FocusChangedL( IsFocused() ) ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::LoadBitmap +// Load a bitmap from the server. Ownership is transferred. +// ----------------------------------------------------------------------------- +// +EXPORT_C CFbsBitmap* CXnControlAdapter::LoadBitmap( const TDesC& aBitmapUrl ) + { + return iImpl->LoadBitmap( aBitmapUrl ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::GetBitmapAndMask +// Load a bitmap and mask from the server. Ownership is transferred. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::GetBitmapAndMask( + const TDesC& aBitmapUrl, + const TDesC& aMaskUrl, + CFbsBitmap*& aBitmap, + CFbsBitmap*& aMask ) + { + iImpl->GetBitmapAndMask( aBitmapUrl, aMaskUrl, aBitmap, aMask ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::EnterPowerSaveModeL +// Enter power save mode +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::EnterPowerSaveModeL( TModeEvent aEvent ) + { + iImpl->StopHighlightAnimation(); + DoEnterPowerSaveModeL( aEvent ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::DoEnterPowerSaveModeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::DoEnterPowerSaveModeL( TModeEvent /* aEvent */ ) + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::ExitPowerSaveModeL +// Exit power save mode +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::ExitPowerSaveModeL( TModeEvent aEvent ) + { + iImpl->StartHighlightAnimation(); + DoExitPowerSaveModeL( aEvent ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::DoExitPowerSaveModeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::DoExitPowerSaveModeL( TModeEvent /*aEvent*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetLocalUiZoomL +// Set local UI zoom level +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetLocalUiZoomL( TAknUiZoom /*aZoom*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::HandleScreenDeviceChangedL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::HandleScreenDeviceChangedL() + { + CXnNode& node( Component()->Node()->Node() ); + + if ( CreateLongTapDetectorL( node ) ) + { + if ( !iLongTapDetector ) + { + iLongTapDetector = CAknLongTapDetector::NewL( this ); + } + } + else + { + delete iLongTapDetector; + iLongTapDetector = NULL; + } + + Component()->Node()->SetDirtyL(); + + iImpl->HandleScreenDeviceChangedL(); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::HandlePropertyChangeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::HandlePropertyChangeL( CXnProperty* aProperty ) + { + // Check component focus. + CXnComponent* component( iImpl->Component() ); + + if ( component ) + { + CXnNodePluginIf* node( component->Node() ); + + if ( node ) + { + if ( node->IsFocusedState() ) + { + iImpl->StartHighlightAnimation(); + } + else + { + iImpl->StopHighlightAnimation(); + } + } + } + + if ( iImpl->UpdateBackgroundImageL( aProperty) == + CXnControlAdapterImpl::EPropertyChangeNotConsumed ) + { + DoHandlePropertyChangeL( aProperty ); + } + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::DoHandlePropertyChangeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::DoHandlePropertyChangeL( CXnProperty* aProperty ) + { + iImpl->DoHandlePropertyChangeL( aProperty ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::MeasureAdaptiveContentL +// Measures the content dimensions +// ----------------------------------------------------------------------------- +// +EXPORT_C TSize CXnControlAdapter::MeasureAdaptiveContentL( + const TSize& aAvailableSize ) + { + return iImpl->MeasureAdaptiveContentL( aAvailableSize ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::ResetStylusCounter +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::ResetStylusCounter() + { + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::SetBlank +// +// ----------------------------------------------------------------------------- +// +EXPORT_C void CXnControlAdapter::SetBlank( TBool aBlank ) + { + iImpl->SetBlank( aBlank ); + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::LongTapDetector +// ----------------------------------------------------------------------------- +// +EXPORT_C CAknLongTapDetector* CXnControlAdapter::LongTapDetector() const + { + return iLongTapDetector; + } + +// ----------------------------------------------------------------------------- +// CXnControlAdapter::RemoveChildAdapters +// ----------------------------------------------------------------------------- +// +void CXnControlAdapter::RemoveChildAdapters() + { + iImpl->RemoveChildAdapters(); + } + +// ----------------------------------------------------------------------------- +// ----------------------------------------------------------------------------- +// +RPointerArray& CXnControlAdapter::ChildAdapters() + { + return iImpl->ChildAdapters(); + }