/*
* Copyright (c) 2007 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: Main class for Control Bar component.
*
*/
#ifndef C_FSCONTROLBAR_H
#define C_FSCONTROLBAR_H
//<cmail> SF
#include <alf/alfcontrol.h>
#include <alf/alfenv.h>
//</cmail>
#include "fscontrolbuttonobserver.h"
#include "fscontrolbarobserver.h"
#include "fscontrolbuttonconst.h"
class MFsControlButtonInterface;
class CFsControlButton;
class CFsControlBarModel;
class CFsControlBarVisualiser;
class CAlfTexture;
class CAlfBrush;
class CFsTextStyleManager;
/** default value for focusing control bar */
const TInt KFocusFirstFocusableButton = -1;
/** value for current focused button - no button is focused */
const TInt KNoButtonFocused = -1;
/**
* Main class for ControlBar component
* Control class of ControlBar component.
*
* @code
*
* @endcode
*
* @lib fs_generic.lib
*/
NONSHARABLE_CLASS( CFsControlBar ) :
public CAlfControl,
public MFsControlButtonObserver,
public MAlfActionObserver
{
public:
/**
* Two-phased constructor.
*
* @param aEnv huitk environment instance.
*/
IMPORT_C static CFsControlBar* NewL( CAlfEnv& aEnv );
/**
* Two-phased constructor.
*
* @param aEnv huitk environment instance.
*/
IMPORT_C static CFsControlBar* NewLC( CAlfEnv& aEnv );
/**
* Destructor
*/
virtual ~CFsControlBar();
/**
* Adds button with specified id and layout to control bar.
*
* @param aId unique id of button.
* @param aType type of button.
*/
IMPORT_C void AddButtonL( TInt aId, TFsControlButtonType aType );
/**
* Adds button with specified layout to control bar and return id.
*
* @param aType type of button.
* @return unique id of button.
*/
IMPORT_C TInt AddButtonL( TFsControlButtonType aType );
/**
* Removes button with specified button (and all data it contains)
* from control bar
*
* @param aId id of button to be removed.
* @return KErrNotFound if button's id doesn't exist, otherwise KErrNone.
*/
IMPORT_C TInt RemoveButtonL( TInt aId );
/**
* Retrieves button with specified id from control bar.
*
* @param aId id of button to be retrieved.
* @return button with specified id.
*/
IMPORT_C MFsControlButtonInterface* ButtonById( TInt aId );
/**
* Change focused state.
* When focus is gained it is set to the first focusable button.
*
* @param aFocused ETrue to set the focus to the first button otherwise
* EFalse to lose the focus.
*/
IMPORT_C void SetFocusL( TBool aFocused = ETrue );
/**
* Sets focus to specified button.
*
* @param aButtonId id of button to set focus on.
*/
IMPORT_C void SetFocusByIdL( TInt aButtonId );
/**
* Gets focused button or NULL if not focused.
*
* @return focused button or NULL if bar not focused.
*/
IMPORT_C MFsControlButtonInterface* GetFocusedButton() const;
/**
* Set position and size
*/
virtual void SetRectL( const TRect& aRect );
/**
* Sets height of the bar in pixels.
*
* @param aHeight new height of the bar.
*/
IMPORT_C void SetHeightL( TInt aHeight );
/**
* Retrieves height of the bar in pixels.
*
* @return height of the bar in pixels.
*/
IMPORT_C TInt Height() const;
/**
* Sets width of the bar in pixels.
*
* @param aWidth new width of the bar.
*/
IMPORT_C void SetWidthL( TInt aWidth );
/**
* Retrieves width of the bar in pixels.
*
* @return width of the bar in pixels.
*/
IMPORT_C TInt Width() const;
/**
* Sets controlbar's background color.
*
* @param aColor color of background.
*/
IMPORT_C void SetBackgroundColor( const TRgb& aColor );
/**
* Clear controlbar's background color. It becomes transparent.
*/
IMPORT_C void ClearBackgroundColor();
/**
* Sets bar's background image.
*
* @param aImage background image.
*/
IMPORT_C void SetBackgroundImageL( CAlfTexture& aImage );
/**
* Clears bar's background image.
*/
IMPORT_C void ClearBackgroundImage();
/**
* Adds additional observer for the bar events.
*
* @param aObserver observer of bar's events.
*/
IMPORT_C void AddObserverL( MFsControlBarObserver& aObserver );
/**
* Removes specified observer from the bar events.
*
* @param aObserver observer to be removed.
*/
IMPORT_C void RemoveObserver( MFsControlBarObserver& aObserver );
/**
* Sets transition time for selector.
*
* @param aTransitionTime transition time in miliseconds.
*/
IMPORT_C void SetSelectorTransitionTimeL( TInt aTransitionTime );
/**
* Sets selector's image and opacity.
* Ownership of the brush is gained.
*
* @param aSelectorBrush New selector brush.
* @param aOpacity Selector's opacity.
*/
IMPORT_C void SetSelectorImageL(
CAlfBrush* aSelectorBrush, TReal32 aOpacity = 1.0 );
/**
* Retrieves amount of space in pixels from specified point to the end
* of the screen.
*
* @return Controlbar visual.
*/
IMPORT_C CAlfVisual* Visual();
/**
* Resolve the area reserved for requested layout slot.
*
* @param aIndex Index of requested layout slot. Indexing starts from one.
* @return Size and position of requested layout item.
*/
static TRect GetLayoutRect( TInt aIndex );
// <cmail> Touch
/**
* Disable or enable touch input
*/
IMPORT_C void EnableTouch(TBool aEnabled);
// </cmail>
/**
* Hides or shows selector.
* NOTE: Do not change focus.
*
* @param aShow if ETrue selector is shown.
* @param aFromTouch if method is called after touch event.
*/
IMPORT_C void MakeSelectorVisible( TBool aShow, TBool aFromTouch = EFalse );
// from base class MAlfActionObserver
/**
* From MAlfActionObserver.
* Called by the scheduler when an action command is executed.
*
* @param aActionCommand The command that is being executed.
*/
virtual void HandleActionL( const TAlfActionCommand& aActionCommand );
protected:
// from base class CAlfControl
/**
* From CAlfControl.
* Notifies the owner that the layout of a visual has been recalculated.
* Called only when the EAlfVisualFlagLayoutUpdateNotification flag has
* been set for the visual.
*
* @param aVisual Visual that has been laid out.
*/
virtual void VisualLayoutUpdated( CAlfVisual& aVisual );
/**
* From CAlfControl.
* Called when an input event is being offered to the control.
*
* @param aEvent Event to be handled.
* @return <code>ETrue</code>, if the event was handled. Otherwise
* <code>EFalse</code>.
*/
virtual TBool OfferEventL( const TAlfEvent& aEvent );
// from base class MFsControlButtonObserver
/**
* From MFsControlButtonObserver.
* Invoked when one of button from control bar is pressed.
*
* @param aEvent event type from button.
* @param aButtonId pressed button id.
*/
virtual TBool HandleButtonEvent(
TFsControlButtonEvent aEvent, TInt aButtonId );
private:
/**
* Constructor.
*
* @param aEnv huitk environment instance.
* @param aParent parent control to which events will be sent.
*/
CFsControlBar();
/**
* Constructs and initializes bar control.
*/
void ConstructL( CAlfEnv& aEnv );
/**
* Sends event to observers.
*
* @param aEvent event sent to observers
* @param aData additional data sent with event
*/
void NotifyObservers(
MFsControlBarObserver::TFsControlBarEvent aEvent,
TInt aData = -1 );
/**
* Changes focus to another button or looses focus from control bar.
*
* @param aButton pointer to button which schould be focused.
* If NULL focus is lost by the control bar.
*/
void ChangeFocusL( CFsControlButton* aButton );
/**
* Sets needed variables when bar loses focus.
*
* @param aLooseFocusEvent cause of focus lost.
*/
void LooseFocus(
MFsControlBarObserver::TFsControlBarEvent aLooseFocusEvent );
private: // data
/**
* Control bar's model
* Own.
*/
CFsControlBarModel* iModel;
/**
* Control bar's visualiser
* Own.
*/
CFsControlBarVisualiser* iVisualiser;
/**
* Selected button index.
*/
TInt iSelectedButton;
/**
* Collection of additional Observers.
*/
RPointerArray< MFsControlBarObserver > iObservers;
/**
* Last screen width.
*/
TInt iLastScreenWidth;
/**
* Text style manager.
* Own.
*/
CFsTextStyleManager* iTextStyleManager;
// <cmail> Touch
/**
* Control touch
*/
TBool iTouchEnabled;
TBool iTouchWasEnabled;
// </cmail>
};
#endif // C_FSCONTROLBAR_H