diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/mw/aknindicatorcontainer.h --- a/epoc32/include/mw/aknindicatorcontainer.h Tue Nov 24 13:55:44 2009 +0000 +++ b/epoc32/include/mw/aknindicatorcontainer.h Tue Mar 16 16:12:26 2010 +0000 @@ -1,1 +1,458 @@ -aknindicatorcontainer.h +/* +* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* 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 +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: A default control in the status pane's small indicator pane. +* Editor indicators uses also same control in the navigation +* pane and in queries. +* +*/ + + +#ifndef AKNINDICATORCONTAINER_H +#define AKNINDICATORCONTAINER_H + +// INCLUDES +#include <akncontrol.h> +#include <eikspane.h> + +class CIncallStatusBubble; +class CAknIndicator; +class CAknIndicatorContainerExtension; +class CAknPictographInterface; +class MAknIndicatorObserver; + +/** + * The default control in the status pane's small indicator pane. + * This container is also used for the status indicators in navi pane and + * for editor indicators in queries. + */ +class CAknIndicatorContainer : public CAknControl, public MEikStatusPaneObserver + { +friend class CAknIndicatorContainerExtension; +friend class CAknIndicatorDataObserver; +public: + + /** + * Layout orientations of the indicator container. + * These are used to specify how the indicators are laid + * out inside the indicator container. + */ + enum TLayoutOrientation + { + EVertical, ///< Indicators are arranged vertically. + EHorizontal ///< Indicators are arranged horizontally. + }; + + /** Alignment of the indicators. */ + enum TIndicatorAlignment + { + ELeft, ///< Indicators are aligned on the left side. + ERight ///< Indicators are aligned on the right side. + }; + + /** + * Context of the indicator container. + * These are used to specify what type of status indicators + * the indicator container contains. + */ + enum TIndicatorContext + { + EUniversalIndicators = 0, ///< Universal status indicators. + ENaviPaneEditorIndicators, ///< Editor indicators shown in navi pane. + EQueryEditorIndicators, ///< Editor indicators shown in queries. + EFindIndicators ///< Search field indicators. + }; + + /** + * Position of a indicator. + * These are used for invidual indicators to coarsely specify + * where they are positioned inside the indicator container. + */ + enum TIndicatorPosition + { + ELeftSide, ///< Indicator positioned on the left side. + ERightSide, ///< Indicator positioned on the right side. + EMiddle ///< Indicator positioned in the middle. + }; + + /** Additional flags that can be used for custom indicators. */ + enum TCustomIndicatorFlags + { + EMultiColorIndicator = 0x1, ///< Indicator is multi-colored. + EIndicatorPositionInverted = 0x2 ///< Indicator's position is inverted. + }; + + /** Layout modes of indicator container. */ + enum TLayoutMode + { + ELayoutModeUsual, ///< Used for universal indicators when not in idle. + ELayoutModeWide ///< Used for navi pane indicators and universal indicators in idle. + }; + +public: + + /** + * Default constructor. + * Creates an @c EUniversalIndicators object. + */ + IMPORT_C CAknIndicatorContainer(); + + /** + * Constructor. Creates @c EUniversalIndicators, @c ENaviPaneEditorIndicators + * or @c EQueryEditorIndicators object. + * + * @param aIndicatorContext Indicator container context. + */ + IMPORT_C CAknIndicatorContainer( TInt aIndicatorContext ); + + /** + * Destructor. + */ + IMPORT_C ~CAknIndicatorContainer(); + + /** + * Second-phase constructor. + */ + IMPORT_C void ConstructL(); + + /** + * Sets indicator state. The state can be one of the following: + * - @c EAknIndicatorStateOff + * + * - @c EAknIndicatorStateOn + * + * - @c EAknIndicatorStateAnimate + * + * Editor indicators do not support animation. + * + * @param aIndicatorId ID of the indicator to be modified. + * @param aState A state to be set to the indicator. + * @param aDrawNow A flag to indicate if the indicator + * is redrawn with this call. + */ + IMPORT_C void SetIndicatorState( TUid aIndicatorId, + TInt aState, + TBool aDrawNow = ETrue ); + + /** + * Return the current state of an indicator. + * + * @param aIndicatorId ID of the indicator. + * @return Current state of the indicator. + */ + IMPORT_C TInt IndicatorState( TUid aIndicatorId ); + + /** + * Sets value to the message length indicator + * (@c EAknNaviPaneEditorIndicatorMessageLength). + * + * @param aIndicatorId ID of the indicator to be modified. + * @param aString Value of the indicator. + */ + IMPORT_C void SetIndicatorValueL( TUid aIndicatorId, const TDesC& aString ); + + /** + * Sets value to the incall status bubble indicator on the + * top of the status pane. + * + * @param aFlags Mode of the bubble. + */ + IMPORT_C void SetIncallBubbleFlags( const TInt& aFlags ); + + /** + * Constructs the object from resource. + * + * @param aReader Resource reader. + */ + IMPORT_C void ConstructFromResourceL( TResourceReader& aReader ); + + /** + * Returns the context of the indicator container. + * + * @return Context of the indicator container. + */ + IMPORT_C TInt IndicatorContext() const; + + +public: // From base class @c MEikStatusPaneObserver. + + /** + * The @c MEikStatusPaneObserver interface allows a status pane observer + * to pick up changes in the size or position of the status pane. + * Such events will be as a result of layout changes which + * cause an actual change in the status pane rectangle. + */ + IMPORT_C void HandleStatusPaneSizeChange(); + +public: // From base class @c CCoeControl. + + /** + * Handles pointer events. + * + * @param aPointerEvent The pointer event. + */ + IMPORT_C void HandlePointerEventL( const TPointerEvent& aPointerEvent ); + +protected: // From base class @c CCoeControl. + + /** + * Handles a change to the control's resources of type @c aType + * which are shared across the environment, e.g. color scheme change. + * Responds fade events and fades incall status bubble window group. + * + * @param aType Event type. + */ + IMPORT_C virtual void HandleResourceChange( TInt aType ); + + /** + * Handles size change events. + */ + IMPORT_C virtual void SizeChanged(); + + /** + * Handles position change events. + */ + IMPORT_C virtual void PositionChanged(); + + /** + * Returns number of controls inside the context pane control. + * + * @return Amount of component controls. + */ + IMPORT_C virtual TInt CountComponentControls() const; + + /** + * Returns a control determined by control index. + * + * @param aIndex Index of a control to be returned. + * @return Pointer to control + */ + IMPORT_C virtual CCoeControl* ComponentControl( TInt aIndex ) const; + +private: // From base class @c CCoeControl. + + IMPORT_C virtual void Draw(const TRect& aRect) const; + +private: // From base class @c CAknControl. + + IMPORT_C void* ExtensionInterface( TUid aInterface ); + +private: + + virtual void Reserved_1(); + void PrioritizeIndicatorsL(); + + static TInt TickerCallback( TAny* aThis ); + TInt DoTick(); + + void IncallBubbleSizeChanged( TBool aAllowIdleStateBubble ); + + void SizeChangedInSmallStatusPane(); + + void SizeChangedInNormalStatusPane(); + + void SizeChangedInStaconPane(); + + void SizeChangedInFlatStatusPane(); + + void SizeChangedInExtendedStatusPane(); + + void SizeChangedInIdleExtendedStatusPane(); + + void SizeChangedInIdleVertical(); + + void SetContainerWindowNonFading( TBool aNonFading ); + + void SetupIndicatorLayoutModes(); + + TInt SelectIndicatorLayoutMode(); + + void CreateIndicatorFromPaneResourceL( TUid aUid, + TInt aIndicatorPaneResourceId, + TInt aCustomIndicatorFlags ); + + TBool IndicatorExists( TUid aUid ) const; + + void CreateIncallBubbleL(); + + TBool UpdateSmallLayoutL(); + + void SetIncallBubbleDisabled( TBool aDisabled ); + + void ResetAnimTicker( TBool bForeground ); + +public: + + /** + * Sets value to the progress bar indicator + * (@c EAknNaviPaneEditorIndicatorProgressBar). + * Panics if the specified indicator is not a progress bar indicator. + * + * @since 2.1 + * @param aIndicatorId ID of the indicator to be modified. + * @param aValue Current progress of the task that bar describes. + * @param aMaxValue Progress value when task is finished. + * + */ + IMPORT_C void SetIndicatorValue( TUid aIndicatorId, + TInt aValue, + TInt aMaxValue ); + + /** + * Redraws those indicators that are visible and contain pictographs. + */ + void DrawPictographArea(); + + /** + * Returns the pictograph interface owned by the indicator container, + * or @c NULL if pictographs are not supported. + */ + CAknPictographInterface* PictographInterface() const; + + + /** + * Sets whether incall bubble is shown also on the top of the idle + * status pane. Normally it is shown only in usual statuspane layouts, + * but with this method it can be set to shown also in idle. + * + * NOTE: This method works only if indicatorcontainer is used as container + * for universal indicators. + * + * @param aAllowed If true incall bubble is shown also in idle statuspane. + * Otherwise bubble is shown only in usual statuspane + * layouts. + */ + IMPORT_C void SetIncallBubbleAllowedInIdle( TBool aAllowed ); + + /** + * Sets whether incall bubble is shown on the top of the usual status pane. + * Normally it is shown in usual statuspane layouts, but with this + * method it can prevent it to be shown. + * + * NOTE: This method works only if indicatorcontainer is used as + * container for universal indicators. + * + * @param aAllowed If true incall bubble is shown in usual statuspane. + */ + IMPORT_C void SetIncallBubbleAllowedInUsual( TBool aAllowed ); + + + /** + * Sets observer for given indicator. + * + * @param aIndicatorObserver Observer of the indicator. + * @param aIndicatorUid UID of indicator to be observed. + */ + IMPORT_C void SetIndicatorObserver( MAknIndicatorObserver* aIndicatorObserver, + TUid aIndicatorUid ); + + /** + * Creates a custom indicator. + * Indicators created with this method can be used in addition + * to default indicators. + * + * @since 3.1 + * + * @param aIndicatorResourceId Resource ID of INDICATOR struct to be used + * in costructing indicator. + * UID in the resource is ignored, a dynamic + * UID is given to indicator and returned + * to caller. + * @param aCustomIndicatorFlags Flags that can be used to set additional + * indicator properties. + * - @c EMultiColorIndicator: + * Indicator is shown as multicolor + * (default is 2-color). + * - @c EIndicatorPositionInverted: + * Indicator is aligned to the opposite + * side than default (default is right + * side). Note that this flag does not + * quarantee exact location for the + * indicator, indicators are shown in + * priority order and location may vary + * and look different in different layouts. + * + * @return UID of the new indicator. + * + */ + IMPORT_C TUid CreateIndicatorFromResourceL( TInt aIndicatorResourceId, + TInt aCustomIndicatorFlags ); + + + /** + * Replaces the icon of the given indicator. + * + * @since 3.1 + * @param aIndicator UID of the indicator. + * @param aState State which icon is replaced (@c EAknIndicatorStateOn + * or @c EAknIndicatorStateAnimate) + * @param aLayoutMode Layout mode of the icon to be replaced + * (@c ELayoutModeUsual or @c ELayoutModeWide) + * @param aIconBitmap Bitmap of the new icon. Ownership is transferred to + * @c CAknIndicatorContainer. + * @param aIconMask Mask of the new icon. Ownership is transferred to + * @c CAknIndicatorContainer. + * @param aIconIndex If parameter aState is @c EAknIndicatorStateAnimate, + * then this parameter must contain the index of the + * icon to be replaced in the animation sequence. + * Old icon must exist for given index so that the + * number of animation frames does not change. + */ + IMPORT_C void ReplaceIndicatorIconL( TUid aIndicator, + TInt aState, + TInt aLayoutMode, + CFbsBitmap* aIconBitmap, + CFbsBitmap* aIconMask, + TInt aIconIndex = 0 ); + +private: + + /** Array of the indicators. */ + typedef CArrayPtrFlat<CAknIndicator> CAknIndicatorQueue; + CAknIndicatorQueue* iIndicators; + + /** Layout orientations. */ + TLayoutOrientation iLayoutOrientation; + TLayoutOrientation iPreviousLayoutOrientation; + + /** Alignment of the indicators. */ + TIndicatorAlignment iAlignment; + + /** Number of indicators shown. */ + TInt iIndicatorsShown; + + /** Number of animated indicators shown. */ + TInt iAnimatedIndicatorsShown; + + /** Extension class. */ + CAknIndicatorContainerExtension* iExtension; + + /** Context of the indicators. */ + TInt iIndicatorContext; + + /** Indicator animation timer. */ + CPeriodic* iTicker; + + /** Reserved for future use. */ + TBool iSpare2; + + /** Synchronization value used in the indicator animations. */ + TInt iSynchronizingValue; + + /** Small incall status bubble. */ + CIncallStatusBubble* iIncallBubble; + }; + +#endif // AKNINDICATORCONTAINER_H + +// End of File