/*
* Copyright (c) 2007-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: Container control for touch controls.
*
*/
#ifndef C_BUBBLECTOUCHPANE_H
#define C_BUBBLECTOUCHPANE_H
#include <coecntrl.h>
#include "BMTouchPaneInterface.h"
class CBubbleTouchPaneButton;
class CAknButton;
class TResourceReader;
/**
* Container control for touch buttons.
*
*
* @lib bubblemanager.lib
* @since S60 v5.0
*/
class CBubbleTouchPane : public CCoeControl,
public MBubbleTouchPaneInterface,
public MCoeControlObserver
{
public:
/**
* Two phase constructor.
* @return New instance
*/
static CBubbleTouchPane* NewL();
/**
* Destructor.
*/
virtual ~CBubbleTouchPane();
/**
* To be called when skin is changed and icons
* should be reloaded from skin server.
*/
void HandleResourceChange( TInt aType );
/**
* To be called when BubbleManager is within start and end
* changes block. TouchPane doesn't draw itself during
* update.
* @param aUpdating ETrue when ui update is in progress
* otherwise EFalse.
*/
void SetUpdating( TBool aUpdating );
protected: // From MBubbleTouchPaneInterface.
/**
* From MBubbleTouchPaneInterface.
*/
TInt SetButtonSet( TInt aResourceId );
/**
* From MBubbleTouchPaneInterface.
*/
void SetButtonState( TInt aCommand );
/**
* From MBubbleTouchPaneInterface.
*/
void SetButtonDimmed( TInt aCommand, TBool aDimmed );
/**
* From MBubbleTouchPaneInterface.
*/
TInt NumberOfButtonsInPane() const;
/**
* From MBubbleTouchPaneInterface.
*/
TInt ButtonCommandId( TInt aButtonIndex ) const;
/**
* From MBubbleTouchPaneInterface.
*/
TInt ReplaceButton( TInt aButtonIndex, TInt aResourceId );
/**
* From MBubbleTouchPaneInterface.
*/
TBool ButtonHasState( TInt aButtonIndex, TInt aCommand ) const;
/**
* From MBubbleTouchPaneInterface.
*/
void SetIconProvider(
MBubbleTouchPaneIconProvider* aIconProvider );
protected: // From CCoeControl
/**
* From CCoeControl.
*/
void SizeChanged();
/**
* From CCoeControl.
*/
TInt CountComponentControls() const;
/**
* From CCoeControl.
*/
CCoeControl* ComponentControl( TInt aIndex ) const;
/**
* From CCoeControl.
*/
void HandlePointerEventL( const TPointerEvent& aPointerEvent );
protected: // MCoeControlObserver
/**
* From MCoeControlObserver.
*/
void HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType);
private:
/**
* Handles callback.
*/
static TInt IdleCallback( TAny* aThis );
/**
* Resets and destroyes touch pane buttons.
*/
void DoDeleteButtonsInIdle();
/**
* Creates buttons.
*/
void LoadButtonsFromResourceL( TResourceReader& aReader );
/**
* Sets used button resource.
*/
void SetButtonSetL( TInt aResourceId );
/**
* Replaces button with other.
*/
void ReplaceButtonL( TInt aButtonIndex, TInt aResourceId );
/**
* Set used button layout.
* @param aButtonIndex Button index.
* @param aColumn Column index.
* @param aRow Row index.
*/
void SetButtonLayout( TInt aButtonIndex, TInt aColumn, TInt aRow );
private:
/**
* C++ default constructor.
*/
CBubbleTouchPane();
/**
* Symbian OS default constructor.
*/
void ConstructL();
private: // data
// Array of buttons.
RPointerArray<CBubbleTouchPaneButton> iButtons;
// Owned.
CIdle* iIdleProcessor;
// Async delete information.
TBool iDeleteButtonsAsync;
// Button set id.
TInt iCurrentButtonSetId;
// Array of buttons to be deleted.
RPointerArray<CBubbleTouchPaneButton> iButtonsToBeDeleted;
// Icon provider.
MBubbleTouchPaneIconProvider* iIconProvider;
// UI updating status flag.
TBool iUpdating;
};
#endif // C_BUBBLECTOUCHPANE_H