/*
* 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 header file
*
*/
#ifndef XNCONTROLADAPTER_H
#define XNCONTROLADAPTER_H
// System includes
#include <e32base.h>
#include <coecntrl.h>
#include <aknappui.h>
#include <aknlongtapdetector.h>
// Forward declarations
class CXnNodePluginIf;
class CXnComponent;
class CXnControlAdapterImpl;
class CXnProperty;
class CXnNode;
// Class declaration
/**
* Control adapter interface class
*
* @ingroup group_xnlayoutengine
* @lib xnlayoutengine.lib
* @since Series 60 3.1
*/
class CXnControlAdapter : public CCoeControl,
public MCoeControlObserver,
public MAknLongTapDetectorCallBack
{
public:
// Data types
enum TModeEvent
{
EEventNone = 0,
EEventBackground,
EEventLight,
EEventDisplay,
EEventVisibility
};
/**
* Two-phased constructor.
*/
IMPORT_C static CXnControlAdapter* NewL( CXnNodePluginIf& aNode );
/**
* Destructor.
*/
IMPORT_C virtual ~CXnControlAdapter();
public:
// New functions
/**
* Sets component pointer.
*
* @since Series 60 3.1
* @param aComponent Component pointer.
*/
IMPORT_C void SetComponent( CXnComponent* aComponent );
/**
* Set component visibility
*
* @since Series 60 3.1
* @param aVisible ETrue for making visible, EFalse for making invisible
*/
IMPORT_C void SetVisible( TBool aVisible );
/**
* Gets the component pointer.
*
* @since Series 60 3.1
* @return Component pointer.
*/
IMPORT_C CXnComponent* Component();
/**
* Checks if the control should be drawn, according to visibility and
* display properties.
*
* @since Series 60 3.1
* @return ETrue if drawing is ok, EFalse otherwise
*/
IMPORT_C TBool IsDrawingAllowed() const;
/**
* Gets content bitmaps. Ownership is not transferred.
*
* @since Series 60 3.1
* @param aBitmap Bitmap to draw
* @param aMask Mask to use
*/
IMPORT_C void ContentBitmaps( CFbsBitmap*& aBitmap, CFbsBitmap*& aMask );
/**
* Sets content bitmaps. Ownership is transferred.
*
* @since Series 60 3.1
* @param aBitmap Bitmap to draw
* @param aMask Mask to use
*/
IMPORT_C void SetContentBitmaps( CFbsBitmap* aBitmap, CFbsBitmap* aMask );
/**
* Sets content bitmaps. Ownership is transferred.
*
* @since Series 60 3.1
* @param aBitmapUrl Url of the bitmap to draw
* @param aMaskUrl Url of the bitmap mask to use
*/
IMPORT_C void SetContentBitmaps( const TDesC& aBitmapUrl,
const TDesC& aMaskUrl );
/**
* Load a bitmap from the server. Ownership is transferred.
*
* @since Series 60 3.1
* @param aBitmapUrl Url of the bitmap to load
* @return Bitmap
*/
IMPORT_C CFbsBitmap* LoadBitmap( const TDesC& aBitmapUrl );
/**
* Load a bitmap and mask from the server. Ownership is transferred.
*
* @since Series 60 3.1
* @param aBitmapUrl Url of the bitmap to load
* @param aMaskUrl Url of the mask to load, if any
* @param aBitmap Fetched bitmap
* @param aMask Fetched mask
*/
IMPORT_C void GetBitmapAndMask(
const TDesC& aBitmapUrl,
const TDesC& aMaskUrl,
CFbsBitmap*& aBitmap,
CFbsBitmap*& aMask );
/**
* Skin change notification.
*
* @since Series 60 3.1
*/
IMPORT_C virtual void SkinChanged();
/**
* Draws the control using a client-specified gc.
*
* @param aRect TRect to draw
* @param aGc Gc used for drawing
*/
IMPORT_C virtual void Draw( const TRect& aRect, CWindowGc& aGc ) const;
/**
* Enter power save mode. This is done when application goes to background
* or lights go off.
* Derived classes should override this function and stop animations, timers
* etc. when the function is called.
*/
IMPORT_C void EnterPowerSaveModeL( TModeEvent aEvent = EEventNone );
/*
* Template method, called by EnterPowerSaveModeL(). Additional
* implementations are done in derived classes.
*/
IMPORT_C virtual void DoEnterPowerSaveModeL( TModeEvent aEvent );
/**
* Exit power save mode. This is done when application comes to foreground
* or lights go on.
* Derived classes should override this function and restart animations,
* timers etc. when the function is called.
*/
IMPORT_C void ExitPowerSaveModeL( TModeEvent aEvent = EEventNone );
/*
* Template method, called by ExitPowerSaveModeL(). Additional
* implementations are done in derived classes.
*/
IMPORT_C virtual void DoExitPowerSaveModeL( TModeEvent aEvent );
/**
* Sets the application local zoom
*
* @param aZoom application local zoom
* @since 3.1
*/
IMPORT_C virtual void SetLocalUiZoomL( TAknUiZoom aZoom );
/**
* This called to measure adaptive content dimensions
*
* @since 3.2
* @param aAvailableSize where the component's content must fit
* @return The measure content dimensions
*/
IMPORT_C virtual TSize MeasureAdaptiveContentL(
const TSize& aAvailableSize );
/**
* Add a child adapter
* @since Series 60 3.1
* @param aChild Child adapter
* @param aNode Child layout node.
*/
void AppendChildL(CXnControlAdapter& aChild, CXnNode& aNode);
/**
* Resets the stylus state counter, so that the next tap causes 1st stylus
* action.
*
* @since 3.2
*/
IMPORT_C void ResetStylusCounter();
/**
* Sets the control blank
*
* @since S60 5.1
* @param aBlank, ETrue sets blank, EFalse resets blank
*/
IMPORT_C void SetBlank( TBool aBlank );
/**
* Gets the control's long tap detector
*
* @since 5.0
*/
IMPORT_C CAknLongTapDetector* LongTapDetector() const;
/**
* Gets the control's associated window.
*
* @since 3.2
*/
inline RWindow& Window() const;
/**
* Gets the component of this control which is grabbing the pointer.
*
* @since 5.0
*/
inline CCoeControl* GrabbingComponent() const;
public:
/**
* From CCoeControl.
* Handles key events.
*
* @since Series 60 3.1
* @param aKeyEvent Key event.
* @param aType Event type.
* @return Key response
*/
IMPORT_C TKeyResponse OfferKeyEventL(
const TKeyEvent& aKeyEvent,
TEventCode aType );
/**
* From CCoeControl.
* Handles control events.
*
* @since Series 60 3.1
* @param aControl Control.
* @param aEventType Event type.
*/
IMPORT_C void HandleControlEventL(
CCoeControl* aControl,
TCoeEvent aEventType );
/**
* From CCoeControl.
* Handles pointer events
*
* This method must always be called, even when it's overridden by derived
* classes
*
* @param aPointerEvent pointer event
*/
IMPORT_C void HandlePointerEventL( const TPointerEvent& aPointerEvent );
/**
* From CCoeControl.
* Handles pointer events
*
* This method must always be called, even when it's overridden by derived
* classes
*
* @param aDrawNow Contains the value that was passed to it by SetFocus().
*/
IMPORT_C void FocusChanged( TDrawNow aDrawNow );
/**
* From MAknLongTapDetectorCallBack.
* Handles the long tap events.
*
* @since Series 60 3.1
* @param aPenEventLocation Long tap event location relative to parent
* control.
* @param aPenEventScreenLocation Long tap event location relative to
* screen.
*/
IMPORT_C void HandleLongTapEventL(
const TPoint& aPenEventLocation,
const TPoint& aPenEventScreenLocation );
protected:
// New functions
/**
* C++ default constructor.
*/
IMPORT_C CXnControlAdapter();
/**
* Two-phased constructor.
*/
IMPORT_C void ConstructL( CXnNodePluginIf& aNode );
/**
* Const-version of getting the component pointer.
* For internal use only.
*
* @since Series 60 3.1
* @return Component pointer.
*/
CXnComponent* Component() const;
/**
* Draws content image.
*
* @since Series 60 3.1
*/
IMPORT_C void DrawContentImage() const;
protected:
/**
* From CCoeControl.
* Draws the control.
*
* This method must always be called, even when it's overridden by derived
* classes
*
* @param aRect TRect to draw
*/
IMPORT_C virtual void Draw( const TRect& aRect ) const;
/**
* From CCoeControl.
* Return a child control by index.
*
* This method must not be overridden by derived classes
*
* @param aIndex Index of the child to return
* @return Control at the given index
*/
IMPORT_C CCoeControl* ComponentControl( TInt aIndex ) const;
/**
* From CCoeControl.
* Return count of children.
*
* This method must not be overridden by derived classes.
*
* @return Count of children
*/
IMPORT_C TInt CountComponentControls() const;
/**
* From CCoeControl.
* Size change notification
*/
IMPORT_C virtual void SizeChanged();
public:
/**
* From CCoeAppUiBase.
* Informs the components about the screen layout switch.
*/
IMPORT_C virtual void HandleScreenDeviceChangedL();
/**
* Informs the components about the property change.
*/
IMPORT_C void HandlePropertyChangeL( CXnProperty* aProperty = NULL );
/*
* Template method, called by HandlePropertyChangeL().
* Additional implementations are done in derived classes.
*/
IMPORT_C virtual void DoHandlePropertyChangeL(
CXnProperty* aProperty = NULL );
/**
* Sets the state of the long tap animation
*/
IMPORT_C void EnableLongTapAnimation( const TBool aAnimation );
/**
* Remove all child adapters
*/
void RemoveChildAdapters();
/**
* Set Longtap delays
*/
void SetLongTapDelays( const TInt aStartDelay, const TInt aLongTapDelay );
/**
* Get child adapter list i.e which are not window owning controls
*/
RPointerArray< CXnControlAdapter >& ChildAdapters();
/**
* Determines wheter control refuses focus loss
*/
virtual TBool RefusesFocusLoss() const { return EFalse; };
/**
* Routes the data stream for the external rendering plugin.
*
* @since Series 60 5.2
* @param aData Data stream.
* @param aType Type of the stream.
* @param aIndex Index of the data.
*/
IMPORT_C virtual void SetDataL( const TDesC8& aData, const TDesC& aType, TInt aIndex );
private:
// Data
/**
* class implementation.
* Own.
*/
CXnControlAdapterImpl* iImpl;
/**
* Avkon long tap detector implementation.
* Own.
*/
CAknLongTapDetector* iLongTapDetector;
/**
* Long tap delay
*/
TInt iCurrentLongTapTimeDelay;
/**
* Start Long tap delay
*/
TInt iCurrentLongTapStartDelay;
};
// Inline functions
#include "xncontroladapter.inl"
#endif