--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/classicui_plat/volume_popup_api/inc/AknVolumePopup.h Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,527 @@
+/*
+* Copyright (c) 2004-2006 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: Popup Volume Indicator
+*
+*/
+
+
+#ifndef AKN_VOLUME_POPUP_H
+#define AKN_VOLUME_POPUP_H
+
+// INCLUDES
+#include <coecntrl.h>
+#include <avkon.rsg>
+
+// CONSTANTS
+const TInt KTextLen = 64;
+const TInt KWindowPosition = 10; // window group's priority
+const TInt KInactivityTime = 2000000; // 2 seconds - close window after this
+_LIT( KVolumePopupWgName, "VolumePopup" ); // window groups name
+
+/**
+* AknVolume is showed, press speaker icon with the pen, speaker
+* icon will be replaced to the mute icon. Value() should reurn
+* KVolumePopupMutedValue, but volume level before muted should
+* be saved. After press the mute icon again, speaker icon
+* should display again and Value()should return the saved value.
+*/
+const TInt KVolumePopupMutedValue = 0;
+const TInt KVolumePopupLevelNotFound = 0;
+// FORWARD DECLARATIONS
+class CAknVolumeControl;
+class CEikLabel;
+class CFbsBitmap;
+class CAknsBasicBackgroundControlContext;
+class CAknButton;
+class CAknSlider;
+class CAknControl;
+class CAknVolumePopupExtension;
+// CLASS DECLARATION
+
+/**
+* Sidekey Popup volume indicator
+*
+* @lib avkon.lib
+* @since 2.8
+*
+* How to use: <br>
+* ----------- <br>
+* // create control <br>
+* iVolumePopup = CAknVolumePopup::NewL();
+*
+* // set title text <br>
+* iVolumePopup->SetTitleText( _L("Ringer / Profile") );
+*
+* // set range <br>
+* iVolumePopup->SetRange( iMinimumValue, iMaximumValue ); //iMinimumValue<=iVolume && iVolume<=iMaximumValue <br>
+*
+* // set value <br>
+* iVolumePopup->SetValue( iVolume );
+*
+* // display it <br>
+* iVolumePopup->ShowVolumePopupL(); // will close itself after 1s unless another call to ShowVolumePopupL() is made <br>
+*
+* // if non volume key is pressed <br>
+* iVolumePopup->CloseVolumePopup();
+*
+*/
+
+NONSHARABLE_CLASS(CAknVolumePopup) : public CCoeControl,
+ public MCoeControlObserver,
+ public MCoeControlBackground
+ {
+public: // Enumerations
+ /**
+ * Elements that currently support custom graphics.
+ *
+ * @since 5.0
+ */
+ enum TVolumeGfxElements
+ {
+
+ /**
+ * Speaker component of the volume when unmute.
+ */
+ EElemSpeaker = 100,
+
+ /**
+ * Mute component of the volume when mute.
+ */
+ EElemMute,
+
+ /**
+ * Plus Button component of the volume when button active.
+ */
+ EElemPlusButtonActive,
+
+ /**
+ * Plus Button component of the volume when button dimmed.
+ */
+ EElemPlusButtonInActive,
+
+ /**
+ * Plus Button component of the volume when button pressed.
+ */
+ EElemPlusButtonSelected,
+
+ /**
+ * Minus Button component of the volume when button active.
+ */
+ EElemMinusButtonActive,
+
+ /**
+ * Minus Button component of the volume when button dimmed.
+ */
+ EElemMinusButtonInActive,
+
+ /**
+ * Minus Button component of the volume when button pressed.
+ */
+ EElemMinusButtonSelected
+ };
+// Constructors and destructor
+ public:
+ /** deprecated */
+ IMPORT_C static CAknVolumePopup* NewL( const TUid aSharedDataVolumeUid,
+ const TDesC& aKey,
+ TInt aMinimumValue = 0 );
+
+ /**
+ * deprecated.
+ * Two-phased constructor.
+ * Use NewL() to create old volume popup control.
+ * @param aMinimumValue deprecated
+ */
+ IMPORT_C static CAknVolumePopup* NewL( TInt aMinimumValue = 0 );
+
+ /**
+ * Two-phased constructor utilizing custom resource defined by client.
+ * Use either this or NewL().
+ * ConstructFromResourceL() can create dynimic_range volume control
+ * @param aResourceId Resource ID for DYNAMIC_VOLUME or VOLUME resource.
+ *
+ */
+ IMPORT_C static CAknVolumePopup* ConstructFromResourceL( TInt aResourceId );
+
+ /**
+ * Two-phased constructor utilizing custom resource defined by client.
+ * if aIsVertical is ETrue, there would be a vertical slider
+ * if aIsVertical is EFalse, there would be a volume control, but not
+ * dynimic_range volume control
+
+ * @since 5.0
+ * @param aParent Pointer to the parent control.
+ * @param aIsVertical A flag for create a vertical slider volume or not.
+ */
+ IMPORT_C static CAknVolumePopup* NewL( CCoeControl* aParent,
+ TBool aIsVertical );
+
+ /**
+ * Destructor
+ */
+ virtual ~CAknVolumePopup();
+
+// from CCoeControl
+ public:
+ TInt CountComponentControls() const;
+ CCoeControl* ComponentControl(TInt aIndex) const;
+ void Draw(const TRect& aRect) const;
+ void HandlePointerEventL(const TPointerEvent &aPointerEvent);
+ TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType );
+ void PositionChanged();
+
+// from MCoeControlObserver
+ public:
+ void HandleControlEventL(CCoeControl* aControl,TCoeEvent aEventType);
+
+// from MCoeControlBackground
+ public:
+ void Draw(CWindowGc &aGc, const CCoeControl &aControl, const TRect &aRect) const;
+
+// New functions
+ public:
+ /** deprecated */
+ IMPORT_C TKeyResponse HandleVolumeKeyEventL(const TKeyEvent& aEvent, TEventCode aType);
+
+ /**
+ * Set new volume value to volume control or vertical slider control
+ * will show muted icon or text, if value is 0
+ * The first call to this method will set the value to be the default value.
+ * @param aValue new value
+ */
+ IMPORT_C void SetValue(TInt aValue);
+
+ /**
+ * Sets the range of the volume control or vertical slider control.
+ * Maximum value must be greater
+ * than the minimum value, or the method will Panic.
+ * Volume value should be within the range.
+ * If the default value is greater than the Maximum value, it will be set to maximum value.
+ * if the default value is smaller than the Minimum value, it will be set to minimum value.
+ *
+ * @since 3.2
+ * @param aMinimumValue The minimum value of the volume/vertical slider control
+ * @param aMaximumValue The maximum value of the volume/vertical slider control
+ * @par Exceptions:
+ * Will panic with EAknPanicInvalidValue if the minimum value is greater
+ * or equal than maximum value.
+ *
+ */
+ IMPORT_C void SetRange( TInt aMinimumValue, TInt aMaximumValue );
+
+ /**
+ * Gets the range of the volume control or vertical slider.
+ * @since 3.2
+ * @param aMinimumValue The minimum value of the volume/vertical slider control
+ * @param aMaximumValue The maximum value of the volume/vertical slider control
+ */
+ IMPORT_C void GetRange( TInt& aMinimumValue, TInt& aMaximumValue );
+
+ /**
+ * get volume control or vertical slider control value
+ */
+ IMPORT_C TInt Value() const;
+
+ /**
+ * Set title part of label text
+ * @param aText title part of text
+ */
+ IMPORT_C void SetTitleTextL( const TDesC& aText );
+
+ /** deprecated */
+ IMPORT_C void ShowProfileName( TBool aShowProfile );
+
+ /**
+ * Show the popup window - it will
+ * close itself after a second of inactivity
+ */
+ IMPORT_C void ShowVolumePopupL();
+
+ /**
+ * close the popup window - actually this only hides it
+ */
+ IMPORT_C void CloseVolumePopup();
+
+ /**
+ * Set value type for vertical slider control
+ *
+ * @since 5.0
+ * @param aValueType A type of value, should be EAknSliderValueNone,
+ * EAknSliderValueBareFigure,EAknSliderValuePercentage,
+ * EAknSliderValueFraction or EAknSliderValueDecimal.
+ *
+ * If EAknSliderValueNone is set as value type, the speaker icon will
+ * be displayed instead of value text;
+ *
+ * If one of other value types except EAknSliderValueNone is set as
+ * value type, the speaker icon will not be shown, only the value text
+ * can be seen.
+ *
+ * The default value type is EAknSliderValueNone.
+ */
+ IMPORT_C void SetValueType( TInt aValueType );
+
+ /**
+ * Sets the step size. The step size must divide evenly into the Range. This
+ * routine should be called after SetRange if either is called.
+ *
+ * @since 5.0
+ * @param aStepSize The value of the step size
+ */
+ IMPORT_C void SetStepSize( TInt aStepSize );
+
+ /**
+ * As default adjustment indicator is displayed.
+ * this function can be used to sets switch for adjustment indicator on/off.
+ *
+ * @since 5.0
+ * @param aFlag A bool value for switch adjustment indicator on/off.
+ */
+ IMPORT_C void SetAdjustmentIndicatorDisplay( TBool aFlag );
+
+ /**
+ * Time out for dispear the volume control can be defined.
+ * Only used for floating Slider popup( no Parent defined).
+ * If parent is set, Timeout doesn't take effect, the contol
+ * is alway shown until user close it manually.
+ *
+ * @since 5.0
+ * @param aSecond A time value as second.
+ */
+ IMPORT_C void SetTimeOutAsSecond( TInt aSecond );
+
+ /**
+ * Decimal place can be set by the user.
+ * Only used for Slider popup, the value must be 0 ~ 9
+ *
+ * @since 5.0
+ * @param aDecimalPlace A decimal place.
+ */
+ IMPORT_C void SetDecimalPlaces( TInt aDecimalPlaces );
+
+ /**
+ * Allows setting custom graphics for a certain vertical volume element.
+ * Existing icons (custom or default) for the element are discarded.
+ *
+ * Vertical volume takes care of scaling the given icons to the correct size,
+ * provided that they have been created with @c AknIconUtils or @c AknsUtils
+ * interfaces. It also handles re-scaling the icons if the volume layout
+ * changes.
+ *
+ * If the custom icons are created by using skin items (e.g. using color
+ * from skin), remember to change the icons whenever skin changes, see
+ * @c CCoeControl::HandleResourceChange.
+ *
+ * @param aElement The element ID to which the icons are assigned, one of
+ * @c TVolumeGfxElements and TSliderGfxElements.
+ *
+ * @param aBitmap The icon used for the element, must be non-NULL,
+ * ownership is transferred to volume.
+ *
+ * @param aMask Optional mask for the aBitmap, can be NULL, ownership
+ * is transferred to volume.
+ *
+ * @par Exceptions:
+ * Will panic with EAknPanicInvalidValue if the element ID is invalid or
+ * aBitmap is NULL.
+ *
+ * @since 5.0
+ */
+ IMPORT_C void SetGraphics( TInt aElement,
+ CFbsBitmap* aBitmap,
+ CFbsBitmap* aMask );
+ /**
+ * If muted icon is used, the speaker icon will change to mute
+ * icon when volume value is minimized. If not, the speaker icon will
+ * not be changed.
+ * @since 5.0
+ * @param aFlag - A flag for changing to mute icon or not.
+ */
+ IMPORT_C void UseMutedIcon( TBool aFlag );
+
+ /**
+ * If enabled, volumepopup will close itself when user touches outside,
+ * Enabled as default.
+ * @since 5.0
+ * @param aEnable - ETrue then close volumepopup when user touches outside.
+ */
+ IMPORT_C void ClosePopupWhenTappedOutside( TBool aEnable );
+
+ /**
+ * Set default value for volume popup with value field.
+ * Tapping the value field will set the volume value to be the default value,
+ * also the first set value with SetValue call will set that value to be
+ * the default value.
+ * @since 5.0
+ * @param aValue new value
+ */
+ IMPORT_C void SetDefaultValue( TInt aValue );
+
+ /**
+ * If enabled, the value field displayed in volumepopup will be inactive.
+ * Enabled as default
+ * @since 5.0
+ * @param aEnable - ETrue Disable the default value feature of volumepopup
+ */
+ IMPORT_C void EnableResetViaValueField( TBool aEnabled=ETrue );
+
+
+
+ protected: // From CCoeControl
+ void SizeChanged();
+
+ void HandleResourceChange( TInt aType );
+
+ private:
+ /**
+ * C++ default constructor.
+ */
+ CAknVolumePopup(TInt aFlags);
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ * @param aParent Pointer to the parent control.
+ * @param aIsVertical A flag for create a vertical slider volume or not.
+ * @param aResourceId Resource ID for volume.
+ */
+ void ConstructL( CCoeControl* aParent,
+ TBool aIsVertical,
+ TInt aResourceId = R_AVKON_POPUP_VOLUME_INDICATOR );
+
+ /** Prohibit copy constructor if not deriving from CBase.*/
+ CAknVolumePopup( const CAknVolumePopup& );
+
+ /** Prohibit assigment operator if not deriving from CBase.*/
+ CAknVolumePopup& operator=( const CAknVolumePopup& );
+
+ static void CleanupShowVolumePopup(TAny* aThis);
+
+ void SetSpeakerMuted(TBool aMuted);
+ void MutePressed();
+ void StartTimer();
+ void ResetTimer();
+ static TInt TimerExpired(TAny* aPtr);
+
+ /**
+ * Show text "Muted" instead of volume slider if volume = 0
+ * @param aShowMuteAsLabel ETrue = show text
+ *
+ * Not exported yet
+ */
+ /*IMPORT_C*/ void ShowMuteAsLabel( TBool aShowMuteAsLabel );
+
+ /**
+ * When the volume value is minimum or mute, volume control is
+ * invisible, but the if vertical slider is used, it can be seen.
+ * @param aVisibility A flag for the volume control's visiblility.
+ */
+ void SetVisibilityL( TBool aVisibility );
+
+ void CreateControlsL();
+ void CreateSpeakerL();
+ void SetControlIconL( TInt aElement,
+ CFbsBitmap* aBitmap,
+ CFbsBitmap* aMask );
+ void CreateLeftRightButtonL();
+ void CreateUpDownButtonL();
+ void SetValueTextL();
+
+ void DoSetValueTextL( TDes& aTextBuf, TInt aValue );
+
+ void GetMarkerRect( TRect& aRect );
+
+ /**
+ * From @c CCoeControl.
+ *
+ * Retrieves an object of the same type as that encapsulated in aId. Other
+ * than in the case where @c NULL is returned, the object returned must be
+ * of the same object type - that is, the @c ETypeId member of the object
+ * pointed to by the pointer returned by this function must be equal to the
+ * @c iUid member of @c aId.
+ *
+ * @param aId An encapsulated object type ID.
+ * @return Encapsulates the pointer to the object provided. Note that the
+ * encapsulated pointer may be @c NULL.
+ */
+ TTypeUid::Ptr MopSupplyObject( TTypeUid aId );
+ void SetVolumeLayout();
+ void SetLabelColor();
+ /**
+ * Set new volume value to volume control or vertical slider control
+ * will show muted icon or text, if value is 0
+ * @param aValue new value (1-10)
+ */
+ void DoSetValue(TInt aValue);
+// member data
+ private:
+ RWindowGroup iWindowGroup;
+
+ /** title & profile text */
+ CEikLabel* iLabel;
+ /** text to show instead of volume control */
+ CEikLabel* iMutedLabel;
+
+ /** spare */
+ HBufC* iSpare;
+ /** muted label text */
+ HBufC* iMutedText;
+
+ // icons
+ CAknButton* iSpeaker;
+
+ /** current volume setting */
+ TInt iVolume;
+ // show normal / muted icon */
+ TBool iMuted;
+ /** is control visible? */
+ TBool iVisible;
+ /** show "Muted" instead of volume control */
+ TBool iShowMuteAsLabel;
+ /** saved volume setting */
+ TInt iStoredLevel;
+ /** only used for vertical slider value label format */
+ TInt iValueType;
+ TInt iDecimalPlaces;
+
+ /** controls parent rectangle */
+ TRect iParentRect;
+
+ TRect iSpeakerRect;
+ /** will close window after timeout */
+
+ CPeriodic* iTimer;
+
+ CAknsBasicBackgroundControlContext* iBgcc;
+
+ CAknButton* iDecArrow;
+ CAknButton* iIncArrow;
+ TInt iFlags;
+
+ /** A switch for adjustment indictor icon display.*/
+ TBool iAdjustmentIndicatorOn;
+ /** A flag for vertical or not.*/
+ TBool iVertical;
+
+ /** time for inactivity time.*/
+ TInt iTimeout;
+ CAknVolumePopupExtension* iExt;
+ TAny* iSpareMember;
+
+ };
+
+
+#endif // AKN_VOLUME_POPUP_H
+
+// End of File