williamr@2: /* williamr@2: * Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: * which accompanies this distribution, and is available williamr@2: * at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Volume editor class williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef AKNVOLUMECONTROL_H williamr@2: #define AKNVOLUMECONTROL_H williamr@2: williamr@2: #include williamr@2: williamr@2: #include williamr@2: williamr@2: class CGulIcon; williamr@2: class MAknsSkinInstance; williamr@2: class CVolumeExtension; williamr@2: williamr@2: /** williamr@2: * Used for controlling the volume setting on the phone. williamr@2: */ williamr@2: class CAknVolumeControl : public CAknControl, public MAknNaviDecoratorObserver williamr@2: { williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: * C++ default constructor. williamr@2: */ williamr@2: IMPORT_C CAknVolumeControl(); williamr@2: williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: IMPORT_C ~CAknVolumeControl(); williamr@2: williamr@2: /** williamr@2: * Sets volume. williamr@2: * williamr@2: * @param aValue The new volume. williamr@2: */ williamr@2: IMPORT_C void SetValue(TInt aValue); williamr@2: williamr@2: /** williamr@2: * Gets volume. williamr@2: * williamr@2: * @return The volume setting. williamr@2: */ williamr@2: IMPORT_C TInt Value() const; williamr@2: williamr@2: /** williamr@2: * Sets the range of the volume control. Maximum value must be greater williamr@2: * than the minimum value, or the method will Panic. williamr@2: * williamr@2: * @since 3.2 williamr@2: * @param aMinimumValue The minimum value of the volume control williamr@2: * @param aMaximumValue The maximum value of the volume control williamr@2: * @par Exceptions: williamr@2: * Will panic with EAknPanicInvalidValue if the minimum value is williamr@2: * greater or equal than maximum value. williamr@2: * williamr@2: */ williamr@2: IMPORT_C void SetRange( TInt aMinimumValue, TInt aMaximumValue ); williamr@2: williamr@2: /** williamr@2: * Gets the range of the volume control. williamr@2: * @since 3.2 williamr@2: * @param aMinimumValue The minimum value of the volume control williamr@2: * @param aMaximumValue The maximum value of the volume control williamr@2: */ williamr@2: IMPORT_C void GetRange( TInt& aMinimumValue, TInt& aMaximumValue ); williamr@2: williamr@2: void SuppressDrawing( TBool aSuppress ); williamr@2: public: // from CCoeControl williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Gets minimun size of layout rectangle. williamr@2: * williamr@2: * @return Minimum layout rectangle size. williamr@2: */ williamr@2: TSize MinimumSize(); williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl williamr@2: * williamr@2: * Handles key events. williamr@2: * williamr@2: * @param aKeyEvent Key event to be handled. williamr@2: * @param aType Type of the event. williamr@2: * @return Returns @c EKeyConsumed if key event was handled. williamr@2: */ williamr@2: TKeyResponse OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType); williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Construct item from given resource. williamr@2: * williamr@2: * @param aReader Resource reader reading the wanted resource set. williamr@2: */ williamr@2: IMPORT_C void ConstructFromResourceL(TResourceReader& aReader); williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Handles the change of @c CAknVolumeControl's resources. williamr@2: * williamr@2: * @param aType Type of resource to change williamr@2: */ williamr@2: IMPORT_C void HandleResourceChange(TInt aType); williamr@2: williamr@2: /** williamr@2: * Creates volume bitmap to "list pane for setting item" williamr@2: * (setting option item volume graphic). Ownership of the returned bitmap williamr@2: * is transfered to the caller. williamr@2: * williamr@2: * @param aValue Current value (1-10) williamr@2: * @return Volume bitmap. Ownership of the bitmap is transfered to williamr@2: * the caller. williamr@2: */ williamr@2: IMPORT_C static CFbsBitmap* CreateBitmapL(TInt aValue); williamr@2: williamr@2: /** williamr@2: * Creates general volume icon to "list pane for setting item" williamr@2: * (setting option item volume graphic). Ownership of the returned icon williamr@2: * is transfered to the caller. williamr@2: * williamr@2: * @param aValue Current value (1-10) williamr@2: * @return Volume icon. Ownership of the icon is transfered to williamr@2: * the caller. williamr@2: */ williamr@2: IMPORT_C static CGulIcon* CreateSetStyleListBoxIconL( TInt aValue ); williamr@2: williamr@2: /** williamr@2: * Creates Hi-res volume icon to "list pane for setting item" williamr@2: * (setting option item volume graphic). Ownership of the returned icon williamr@2: * is transfered to the caller. williamr@2: * williamr@2: * @since 3.2 williamr@2: * @param aValue Current value (1-10) williamr@2: * @param aMinimum Minimum for Hi-res volume control williamr@2: * @param aMaximum Maximum for Hi-res volume control williamr@2: * @return Volume icon. Ownership of the icon is transfered to williamr@2: * the caller. williamr@2: */ williamr@2: IMPORT_C static CGulIcon* CreateSetDynRangeStyleListBoxIconL( TInt aValue, williamr@2: TInt aMinimum, williamr@2: TInt aMaximum ); williamr@2: williamr@2: /** williamr@2: * Informs the volume control about whether or not it's placed on the williamr@2: * navi pane's control stack williamr@2: * williamr@2: * @param aIsOnNaviStack @c ETrue if the control is on the navi stack, williamr@2: * @c EFalse otherwise. williamr@2: */ williamr@2: void HandleNaviStackChange( TBool aIsOnNaviStack ); williamr@2: williamr@2: protected: // from CCoeControl williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Handles layout change. williamr@2: */ williamr@2: void SizeChanged(); williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Draws every visible item into the specified rectangle. williamr@2: * williamr@2: * @param aRect the specified rectangle. williamr@2: */ williamr@2: void Draw(const TRect& aRect) const; williamr@2: williamr@2: public: williamr@2: williamr@2: /** williamr@2: * From @c CCoeControl. williamr@2: * williamr@2: * Handles pointer events. williamr@2: * williamr@2: * @param aPointerEvent Pointer event to be handled williamr@2: */ williamr@2: IMPORT_C void HandlePointerEventL(const TPointerEvent& aPointerEvent); williamr@2: williamr@2: /** williamr@2: * From @c MAknNaviDecoratorObserver williamr@2: * williamr@2: * Handles Navidecorator events (Arrow left and arrow right) williamr@2: * williamr@2: * @param aEventID ID of event to be handled williamr@2: */ williamr@2: IMPORT_C void HandleNaviDecoratorEventL( TInt aEventID ); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * From CAknControl williamr@2: */ williamr@2: IMPORT_C void* ExtensionInterface( TUid aInterface ); williamr@2: williamr@2: private: williamr@2: williamr@2: /** williamr@2: * williamr@2: */ williamr@2: void SetVolumeLayout(TInt aStyle); williamr@2: williamr@2: /** williamr@2: * Starts a timer for feedback effect visualization williamr@2: */ williamr@2: void StartTimerL(); williamr@2: williamr@2: /** williamr@2: * A callback function for feedback effect. williamr@2: * williamr@2: * @param aThis Pointer to this volume control. williamr@2: */ williamr@2: static TInt IndicationDrawCallbackL( TAny* aThis ); williamr@2: williamr@2: /** williamr@2: * Implementation of the feedback effect (Blinking when the volume value williamr@2: * is set to the max/min value). williamr@2: */ williamr@2: void SmallDirectionIndicationL(); williamr@2: williamr@2: /** williamr@2: * (Re)create the navi icon williamr@2: */ williamr@2: void CreateNaviIconL(); williamr@2: williamr@2: // Refactored: Used for drawing different styles. williamr@2: void DrawSettingsStyleVolumeControl( const TRect& aRect ) const; williamr@2: void DrawDefaultStyleVolumeControl( const TRect& aRect ) const; williamr@2: void DrawSkinnedDefaultStyleVolumeControl( const TRect& aRect ) const; williamr@2: void DrawDynRangeSettingsStyleVolumeControl( const TRect& aVolumeArea ) const; williamr@2: williamr@2: /** williamr@2: * Calculates the volume icon areas using given volume value. williamr@2: * williamr@2: * @param aVolume Volume used as the ratio between active and inactive areas. williamr@2: * @param aDrawArea The whole drawing area. williamr@2: * @param aActiveRect Drawing area for the active icon. williamr@2: * @param aInactiveRect Drawing area for the inactive icon. williamr@2: */ williamr@2: void CalcVolumeIconAreas( const TInt aVolume, williamr@2: const TRect& aDrawArea, williamr@2: TRect& aActiveRect, williamr@2: TRect& aInactiveRect ) const; williamr@2: williamr@2: /** williamr@2: * Utility function for scaling the value between iMiminumValue and williamr@2: * iMaximumValue to a range of [0-10]. This is needed for old drawing williamr@2: * functions that assume only 10 step volume control. williamr@2: * williamr@2: * @return Colume value scaled to range of [0-10]. williamr@2: */ williamr@2: TInt CAknVolumeControl::ScaledValue() const; williamr@2: williamr@2: williamr@2: private: williamr@2: williamr@2: CFbsBitmap* iBitmap; williamr@2: CFbsBitmap* iMaskBitmap; williamr@2: TPoint iStartPos; williamr@2: CVolumeExtension* iExtension; williamr@2: TInt iSpare1; williamr@2: TPoint iBmpPos; williamr@2: TInt iValue; williamr@2: TInt iStyle; williamr@2: }; williamr@2: williamr@2: #endif // AKNVOLUMECONTROL_H