diff -r 5f0182e07bfb -r 5456b4e8b3a8 idlehomescreen/xmluirendering/uiengine/src/xnviewcontroladapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/idlehomescreen/xmluirendering/uiengine/src/xnviewcontroladapter.cpp Wed Sep 01 12:32:46 2010 +0100 @@ -0,0 +1,252 @@ +/* +* 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: View control adapter +* +*/ + +// System includes + +// User includes +#include "xnappuiadapter.h" +#include "xnuiengine.h" +#include "xnnodepluginif.h" +#include "xnnode.h" + +#include "xndomdocument.h" +#include "xndomnode.h" +#include "xnproperty.h" + +#include "xnviewcontroladapter.h" + +// Constants + +// ============================ LOCAL FUNCTIONS ================================ +// ----------------------------------------------------------------------------- +// ResetGrabbingL +// Removes recursively grabbing controls +// ----------------------------------------------------------------------------- +// +static void ResetGrabbingL( CXnControlAdapter* aControl, + const TPointerEvent& aEvent ) + { + if ( aControl ) + { + CCoeControl* grabber( aControl->GrabbingComponent() ); + + if ( grabber ) + { + // cancel longtap detector before reset grabbing. + CAknLongTapDetector* detector = aControl->LongTapDetector(); + if ( detector && detector->IsActive() ) + { + detector->Cancel(); + } + grabber->IgnoreEventsUntilNextPointerUp(); + + aControl->CCoeControl::HandlePointerEventL( aEvent ); + + CXnControlAdapter* adapter = + dynamic_cast< CXnControlAdapter* >( grabber ); + + ResetGrabbingL( adapter, aEvent ); + } + } + } + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::NewL +// Symbian static 1st phase constructor +// ----------------------------------------------------------------------------- +// +CXnViewControlAdapter* CXnViewControlAdapter::NewL( CXnNodePluginIf& aNode ) + { + CXnViewControlAdapter* self = new( ELeave ) CXnViewControlAdapter( aNode ); + + CleanupStack::PushL( self ); + self->ConstructL( aNode ); + CleanupStack::Pop( self ); + + return self; + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::ConstructL( CXnNodePluginIf& aNode ) + { + CreateWindowL(); + + CXnControlAdapter::ConstructL( aNode ); + + if( Window().SetTransparencyAlphaChannel() == KErrNone ) + { + Window().SetBackgroundColor( ~0 ); + } + + Window().SetPointerGrab( EFalse ); + + EnableDragEvents(); + + ActivateL(); + + SetComponentsToInheritVisibility( ETrue ); + + iAppUi.UiStateListener().AddObserver( *this ); + + // By default all views are invisible during construction phase + CXnDomStringPool* sp( aNode.Node().DomNode()->StringPool() ); + + CXnProperty* prop = CXnProperty::NewL( + XnPropertyNames::style::common::KDisplay, + XnPropertyNames::style::common::display::KNone, + CXnDomPropertyValue::EString, *sp ); + CleanupStack::PushL( prop ); + + aNode.SetPropertyWithoutNotificationL( prop ); + CleanupStack::Pop( prop ); + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::CXnViewControlAdapter +// C++ default constructor +// ----------------------------------------------------------------------------- +// +CXnViewControlAdapter::CXnViewControlAdapter( CXnNodePluginIf& aNode ) + : iNode( aNode ), iAppUi( static_cast< CXnAppUiAdapter& >( *iAvkonAppUi ) ) + { + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::~CXnViewControlAdapter +// C++ destructor +// ----------------------------------------------------------------------------- +// +CXnViewControlAdapter::~CXnViewControlAdapter() + { + iAppUi.UiStateListener().RemoveObserver( *this ); + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::MakeVisible +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::MakeVisible( TBool aVisible ) + { + if ( aVisible == IsVisible() ) + { + return; + } + + if ( aVisible ) + { + if ( !iAppUi.UiEngine().IsEditMode() ) + { + Window().SetPointerGrab( ETrue ); + } + } + else + { + Window().SetPointerGrab( EFalse ); + + ResetGrabbing(); + } + + CCoeControl::MakeVisible( aVisible ); + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::Draw +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::Draw( const TRect& aRect ) const + { + SystemGc().Clear( aRect ); + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::HandlePointerEventL +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::HandlePointerEventL( + const TPointerEvent& aPointerEvent ) + { + if ( iForegroundStatus != EBackground ) + { + iAppUi.UiEngine().DisableRenderUiLC(); + + CXnControlAdapter::HandlePointerEventL( aPointerEvent ); + + iAppUi.UiEngine().RenderUIL(); + + CleanupStack::PopAndDestroy(); + } + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::ResetGrabbing() +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::ResetGrabbing() + { + TPointerEvent event; + + event.iModifiers = 0; + event.iPosition = TPoint(); + event.iParentPosition = TPoint(); + event.iType = TPointerEvent::EButton1Up; + + TRAP_IGNORE( ResetGrabbingL( this, event ) ); + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::NotifyForegroundChanged() +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::NotifyForegroundChanged( TForegroundStatus aStatus ) + { + iForegroundStatus = aStatus; + if ( aStatus == EBackground || aStatus == EPartialForeground ) + { + ResetGrabbing(); + } + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::NotifyLightStatusChanged() +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::NotifyLightStatusChanged( TBool /*aLightsOn*/ ) + { + } + +// ----------------------------------------------------------------------------- +// CXnViewControlAdapter::NotifyInCallStateChaged() +// +// ----------------------------------------------------------------------------- +// +void CXnViewControlAdapter::NotifyInCallStateChaged( TBool /*aInCall*/ ) + { + } + +// End of file