epoc32/include/mw/aknindicatorcontainer.h
branchSymbian2
changeset 2 2fe1408b6811
parent 1 666f914201fb
child 4 837f303aceeb
--- 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