epoc32/include/mw/aknindicatorcontainer.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@2
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description:  A default control in the status pane's small indicator pane.
williamr@2
    15
*                Editor indicators uses also same control in the navigation
williamr@2
    16
*                pane and in queries.
williamr@2
    17
*
williamr@2
    18
*/
williamr@2
    19
williamr@2
    20
williamr@2
    21
#ifndef AKNINDICATORCONTAINER_H
williamr@2
    22
#define AKNINDICATORCONTAINER_H
williamr@2
    23
williamr@2
    24
//  INCLUDES
williamr@4
    25
#include <AknControl.h>
williamr@2
    26
#include <eikspane.h>
williamr@2
    27
williamr@2
    28
class CIncallStatusBubble;
williamr@2
    29
class CAknIndicator;
williamr@2
    30
class CAknIndicatorContainerExtension;
williamr@2
    31
class CAknPictographInterface;
williamr@2
    32
class MAknIndicatorObserver;
williamr@2
    33
williamr@2
    34
/**
williamr@2
    35
 * The default control in the status pane's small indicator pane.
williamr@2
    36
 * This container is also used for the status indicators in navi pane and
williamr@2
    37
 * for editor indicators in queries.
williamr@2
    38
 */
williamr@2
    39
class CAknIndicatorContainer : public CAknControl, public MEikStatusPaneObserver
williamr@2
    40
	{
williamr@2
    41
friend class CAknIndicatorContainerExtension;
williamr@2
    42
friend class CAknIndicatorDataObserver;
williamr@2
    43
public:
williamr@2
    44
williamr@2
    45
    /**
williamr@2
    46
    * Layout orientations of the indicator container.
williamr@2
    47
    * These are used to specify how the indicators are laid
williamr@2
    48
    * out inside the indicator container.
williamr@2
    49
    */
williamr@2
    50
    enum TLayoutOrientation
williamr@2
    51
        {
williamr@2
    52
        EVertical,  ///< Indicators are arranged vertically.
williamr@2
    53
        EHorizontal ///< Indicators are arranged horizontally.
williamr@2
    54
        };
williamr@2
    55
williamr@2
    56
    /** Alignment of the indicators. */
williamr@2
    57
    enum TIndicatorAlignment
williamr@2
    58
        {
williamr@2
    59
        ELeft,   ///< Indicators are aligned on the left side.
williamr@2
    60
        ERight   ///< Indicators are aligned on the right side.
williamr@2
    61
        };
williamr@2
    62
williamr@2
    63
    /**
williamr@2
    64
    * Context of the indicator container.
williamr@2
    65
    * These are used to specify what type of status indicators
williamr@2
    66
    * the indicator container contains.
williamr@2
    67
    */
williamr@2
    68
    enum TIndicatorContext
williamr@2
    69
        {
williamr@2
    70
        EUniversalIndicators = 0,   ///< Universal status indicators.
williamr@2
    71
        ENaviPaneEditorIndicators,  ///< Editor indicators shown in navi pane.
williamr@2
    72
        EQueryEditorIndicators,     ///< Editor indicators shown in queries.
williamr@2
    73
        EFindIndicators             ///< Search field indicators.
williamr@2
    74
        };
williamr@2
    75
williamr@2
    76
    /**
williamr@2
    77
    * Position of a indicator.
williamr@2
    78
    * These are used for invidual indicators to coarsely specify
williamr@2
    79
    * where they are positioned inside the indicator container.
williamr@2
    80
    */
williamr@2
    81
    enum TIndicatorPosition
williamr@2
    82
        {
williamr@2
    83
        ELeftSide,  ///< Indicator positioned on the left side.
williamr@2
    84
        ERightSide, ///< Indicator positioned on the right side.
williamr@2
    85
        EMiddle     ///< Indicator positioned in the middle.
williamr@2
    86
        };
williamr@2
    87
williamr@2
    88
    /** Additional flags that can be used for custom indicators. */
williamr@2
    89
    enum TCustomIndicatorFlags
williamr@2
    90
    	{
williamr@2
    91
    	EMultiColorIndicator       = 0x1, ///< Indicator is multi-colored.
williamr@2
    92
    	EIndicatorPositionInverted = 0x2  ///< Indicator's position is inverted.
williamr@2
    93
    	};
williamr@2
    94
williamr@2
    95
    /** Layout modes of indicator container. */
williamr@2
    96
    enum TLayoutMode
williamr@2
    97
		{
williamr@2
    98
		ELayoutModeUsual, ///< Used for universal indicators when not in idle.
williamr@2
    99
		ELayoutModeWide   ///< Used for navi pane indicators and universal indicators in idle.
williamr@2
   100
		};
williamr@2
   101
williamr@2
   102
public:
williamr@2
   103
williamr@2
   104
    /**
williamr@2
   105
    * Default constructor.
williamr@2
   106
    * Creates an @c EUniversalIndicators object.
williamr@2
   107
    */
williamr@2
   108
    IMPORT_C CAknIndicatorContainer();
williamr@2
   109
williamr@2
   110
    /**
williamr@2
   111
    * Constructor. Creates @c EUniversalIndicators, @c ENaviPaneEditorIndicators
williamr@2
   112
    * or @c EQueryEditorIndicators object.
williamr@2
   113
    *
williamr@2
   114
    * @param  aIndicatorContext  Indicator container context.
williamr@2
   115
    */
williamr@2
   116
    IMPORT_C CAknIndicatorContainer( TInt aIndicatorContext );
williamr@2
   117
williamr@2
   118
    /**
williamr@2
   119
    * Destructor.
williamr@2
   120
    */
williamr@2
   121
    IMPORT_C ~CAknIndicatorContainer();
williamr@2
   122
williamr@2
   123
    /**
williamr@2
   124
    * Second-phase constructor.
williamr@2
   125
    */
williamr@2
   126
    IMPORT_C void ConstructL();
williamr@2
   127
williamr@2
   128
    /**
williamr@2
   129
    * Sets indicator state. The state can be one of the following:
williamr@2
   130
    *   - @c EAknIndicatorStateOff
williamr@2
   131
    *
williamr@2
   132
	*   - @c EAknIndicatorStateOn
williamr@2
   133
	*
williamr@2
   134
	*   - @c EAknIndicatorStateAnimate
williamr@2
   135
	*
williamr@2
   136
	* Editor indicators do not support animation.
williamr@2
   137
    *
williamr@2
   138
    * @param  aIndicatorId  ID of the indicator to be modified.
williamr@2
   139
    * @param  aState        A state to be set to the indicator.
williamr@2
   140
    * @param  aDrawNow      A flag to indicate if the indicator
williamr@2
   141
    *                       is redrawn with this call.
williamr@2
   142
    */
williamr@2
   143
    IMPORT_C void SetIndicatorState( TUid aIndicatorId,
williamr@2
   144
                                     TInt aState,
williamr@2
   145
                                     TBool aDrawNow = ETrue );
williamr@2
   146
williamr@2
   147
    /**
williamr@2
   148
    * Return the current state of an indicator.
williamr@2
   149
    *
williamr@2
   150
    * @param  aIndicatorId  ID of the indicator.
williamr@2
   151
    * @return Current state of the indicator.
williamr@2
   152
    */
williamr@2
   153
    IMPORT_C TInt IndicatorState( TUid aIndicatorId );
williamr@2
   154
williamr@2
   155
    /**
williamr@2
   156
    * Sets value to the message length indicator
williamr@2
   157
    * (@c EAknNaviPaneEditorIndicatorMessageLength).
williamr@2
   158
    *
williamr@2
   159
    * @param  aIndicatorId  ID of the indicator to be modified.
williamr@2
   160
    * @param  aString       Value of the indicator.
williamr@2
   161
    */
williamr@2
   162
    IMPORT_C void SetIndicatorValueL( TUid aIndicatorId, const TDesC& aString );
williamr@2
   163
williamr@2
   164
    /**
williamr@2
   165
    * Sets value to the incall status bubble indicator on the
williamr@2
   166
    * top of the status pane.
williamr@2
   167
    *
williamr@2
   168
    * @param  aFlags  Mode of the bubble.
williamr@2
   169
    */
williamr@2
   170
    IMPORT_C void SetIncallBubbleFlags( const TInt& aFlags );
williamr@2
   171
williamr@2
   172
    /**
williamr@2
   173
    * Constructs the object from resource.
williamr@2
   174
    *
williamr@2
   175
    * @param  aReader  Resource reader.
williamr@2
   176
    */
williamr@2
   177
    IMPORT_C void ConstructFromResourceL( TResourceReader& aReader );
williamr@2
   178
williamr@2
   179
    /**
williamr@2
   180
    * Returns the context of the indicator container.
williamr@2
   181
    *
williamr@2
   182
    * @return Context of the indicator container.
williamr@2
   183
    */
williamr@2
   184
    IMPORT_C TInt IndicatorContext() const;
williamr@2
   185
williamr@2
   186
williamr@2
   187
public: // From base class @c MEikStatusPaneObserver.
williamr@2
   188
williamr@2
   189
    /**
williamr@2
   190
    * The @c MEikStatusPaneObserver interface allows a status pane observer
williamr@2
   191
    * to pick up changes in the size or position of the status pane.
williamr@2
   192
    * Such events will be as a result of layout changes which
williamr@2
   193
    * cause an actual change in the status pane rectangle.
williamr@2
   194
    */
williamr@2
   195
    IMPORT_C void HandleStatusPaneSizeChange();
williamr@2
   196
williamr@2
   197
public: // From base class @c CCoeControl.
williamr@2
   198
williamr@2
   199
    /**
williamr@2
   200
    * Handles pointer events.
williamr@2
   201
    *
williamr@2
   202
    * @param  aPointerEvent  The pointer event.
williamr@2
   203
    */
williamr@2
   204
    IMPORT_C void HandlePointerEventL( const TPointerEvent& aPointerEvent );
williamr@2
   205
williamr@2
   206
protected: // From base class @c CCoeControl.
williamr@2
   207
williamr@2
   208
    /**
williamr@2
   209
	* Handles a change to the control's resources of type @c aType
williamr@2
   210
	* which are shared across the environment, e.g. color scheme change.
williamr@2
   211
    * Responds fade events and fades incall status bubble window group.
williamr@2
   212
    *
williamr@2
   213
	* @param  aType  Event type.
williamr@2
   214
	*/
williamr@2
   215
   	IMPORT_C virtual void HandleResourceChange( TInt aType );
williamr@2
   216
williamr@2
   217
    /**
williamr@2
   218
    * Handles size change events.
williamr@2
   219
    */
williamr@2
   220
    IMPORT_C virtual void SizeChanged();
williamr@2
   221
williamr@2
   222
    /**
williamr@2
   223
    * Handles position change events.
williamr@2
   224
    */
williamr@2
   225
    IMPORT_C virtual void PositionChanged();
williamr@2
   226
williamr@2
   227
    /**
williamr@2
   228
    * Returns number of controls inside the context pane control.
williamr@2
   229
    *
williamr@2
   230
    * @return Amount of component controls.
williamr@2
   231
    */
williamr@2
   232
    IMPORT_C virtual TInt CountComponentControls() const;
williamr@2
   233
williamr@2
   234
    /**
williamr@2
   235
    * Returns a control determined by control index.
williamr@2
   236
    *
williamr@2
   237
    * @param  aIndex  Index of a control to be returned.
williamr@2
   238
    * @return Pointer to control
williamr@2
   239
    */
williamr@2
   240
    IMPORT_C virtual CCoeControl* ComponentControl( TInt aIndex ) const;
williamr@2
   241
williamr@2
   242
private: // From base class @c CCoeControl.
williamr@2
   243
williamr@2
   244
    IMPORT_C virtual void Draw(const TRect& aRect) const;
williamr@2
   245
williamr@2
   246
private: // From base class @c CAknControl.
williamr@2
   247
williamr@2
   248
    IMPORT_C void* ExtensionInterface( TUid aInterface );
williamr@2
   249
williamr@2
   250
private:
williamr@2
   251
williamr@2
   252
    virtual void Reserved_1();
williamr@2
   253
    void PrioritizeIndicatorsL();
williamr@2
   254
williamr@2
   255
   	static TInt TickerCallback( TAny* aThis );
williamr@2
   256
    TInt DoTick();
williamr@2
   257
williamr@2
   258
    void IncallBubbleSizeChanged( TBool aAllowIdleStateBubble );
williamr@2
   259
williamr@2
   260
    void SizeChangedInSmallStatusPane();
williamr@2
   261
williamr@2
   262
    void SizeChangedInNormalStatusPane();
williamr@2
   263
williamr@2
   264
    void SizeChangedInStaconPane();
williamr@2
   265
williamr@2
   266
    void SizeChangedInFlatStatusPane();
williamr@2
   267
williamr@2
   268
    void SizeChangedInExtendedStatusPane();
williamr@2
   269
williamr@2
   270
    void SizeChangedInIdleExtendedStatusPane();
williamr@2
   271
williamr@2
   272
	void SizeChangedInIdleVertical();
williamr@2
   273
williamr@2
   274
    void SetContainerWindowNonFading( TBool aNonFading );
williamr@2
   275
williamr@2
   276
    void SetupIndicatorLayoutModes();
williamr@2
   277
williamr@2
   278
    TInt SelectIndicatorLayoutMode();
williamr@2
   279
williamr@2
   280
	void CreateIndicatorFromPaneResourceL( TUid aUid,
williamr@2
   281
	                                       TInt aIndicatorPaneResourceId,
williamr@2
   282
	                                       TInt aCustomIndicatorFlags );
williamr@2
   283
williamr@2
   284
	TBool IndicatorExists( TUid aUid ) const;
williamr@2
   285
williamr@2
   286
	void CreateIncallBubbleL();
williamr@2
   287
williamr@2
   288
	TBool UpdateSmallLayoutL();
williamr@2
   289
williamr@2
   290
	void SetIncallBubbleDisabled( TBool aDisabled );
williamr@2
   291
williamr@2
   292
	void ResetAnimTicker( TBool bForeground );
williamr@2
   293
williamr@2
   294
public:
williamr@2
   295
williamr@2
   296
    /**
williamr@2
   297
    * Sets value to the progress bar indicator
williamr@2
   298
    * (@c EAknNaviPaneEditorIndicatorProgressBar).
williamr@2
   299
    * Panics if the specified indicator is not a progress bar indicator.
williamr@2
   300
    *
williamr@2
   301
    * @since 2.1
williamr@2
   302
    * @param  aIndicatorId  ID of the indicator to be modified.
williamr@2
   303
    * @param  aValue        Current progress of the task that bar describes.
williamr@2
   304
    * @param  aMaxValue     Progress value when task is finished.
williamr@2
   305
    *
williamr@2
   306
    */
williamr@2
   307
    IMPORT_C void SetIndicatorValue( TUid aIndicatorId,
williamr@2
   308
                                     TInt aValue,
williamr@2
   309
                                     TInt aMaxValue );
williamr@2
   310
williamr@2
   311
    /**
williamr@2
   312
    * Redraws those indicators that are visible and contain pictographs.
williamr@2
   313
    */
williamr@2
   314
    void DrawPictographArea();
williamr@2
   315
williamr@2
   316
    /**
williamr@2
   317
    * Returns the pictograph interface owned by the indicator container,
williamr@2
   318
    * or @c NULL if pictographs are not supported.
williamr@2
   319
    */
williamr@2
   320
    CAknPictographInterface* PictographInterface() const;
williamr@2
   321
williamr@2
   322
williamr@2
   323
    /**
williamr@2
   324
    * Sets whether incall bubble is shown also on the top of the idle
williamr@2
   325
    * status pane. Normally it is shown only in usual statuspane layouts,
williamr@2
   326
    * but with this method it can be set to shown also in idle.
williamr@2
   327
    *
williamr@2
   328
    * NOTE: This method works only if indicatorcontainer is used as container
williamr@2
   329
    *       for universal indicators.
williamr@2
   330
    *
williamr@2
   331
    * @param  aAllowed  If true incall bubble is shown also in idle statuspane.
williamr@2
   332
    *                   Otherwise bubble is shown only in usual statuspane
williamr@2
   333
    *                   layouts.
williamr@2
   334
    */
williamr@2
   335
    IMPORT_C void SetIncallBubbleAllowedInIdle( TBool aAllowed );
williamr@2
   336
williamr@2
   337
    /**
williamr@2
   338
    * Sets whether incall bubble is shown on the top of the usual status pane.
williamr@2
   339
    * Normally it is shown in usual statuspane layouts, but with this
williamr@2
   340
    * method it can prevent it to be shown.
williamr@2
   341
    *
williamr@2
   342
    * NOTE: This method works only if indicatorcontainer is used as
williamr@2
   343
    *       container for universal indicators.
williamr@2
   344
    *
williamr@2
   345
    * @param  aAllowed  If true incall bubble is shown in usual statuspane.
williamr@2
   346
    */
williamr@2
   347
    IMPORT_C void SetIncallBubbleAllowedInUsual( TBool aAllowed );
williamr@2
   348
williamr@2
   349
williamr@2
   350
    /**
williamr@2
   351
    * Sets observer for given indicator.
williamr@2
   352
    *
williamr@2
   353
    * @param  aIndicatorObserver  Observer of the indicator.
williamr@2
   354
    * @param  aIndicatorUid       UID of indicator to be observed.
williamr@2
   355
    */
williamr@2
   356
    IMPORT_C void SetIndicatorObserver( MAknIndicatorObserver* aIndicatorObserver,
williamr@2
   357
                                        TUid aIndicatorUid );
williamr@2
   358
williamr@2
   359
    /**
williamr@2
   360
    * Creates a custom indicator.
williamr@2
   361
    * Indicators created with this method can be used in addition
williamr@2
   362
    * to default indicators.
williamr@2
   363
    *
williamr@2
   364
    * @since 3.1
williamr@2
   365
    *
williamr@2
   366
    * @param  aIndicatorResourceId   Resource ID of INDICATOR struct to be used
williamr@2
   367
    *                                in costructing indicator.
williamr@2
   368
    *        	                     UID in the resource is ignored, a dynamic
williamr@2
   369
    *                                UID is given to indicator and returned
williamr@2
   370
    *                                to caller.
williamr@2
   371
    * @param  aCustomIndicatorFlags  Flags that can be used to set additional
williamr@2
   372
    *                                indicator properties.
williamr@2
   373
    *                                  - @c EMultiColorIndicator:
williamr@2
   374
    *                                       Indicator is shown as multicolor
williamr@2
   375
    *                                       (default is 2-color).
williamr@2
   376
    *                                  - @c EIndicatorPositionInverted:
williamr@2
   377
    *                                       Indicator is aligned to the opposite
williamr@2
   378
    *                                       side than default (default is right
williamr@2
   379
    *                                       side). Note that this flag does not
williamr@2
   380
    *                                       quarantee exact location for the
williamr@2
   381
    *                                       indicator, indicators are shown in
williamr@2
   382
    *                                       priority order and location may vary
williamr@2
   383
    *                                       and look different in different layouts.
williamr@2
   384
    *
williamr@2
   385
    * @return UID of the new indicator.
williamr@2
   386
    *
williamr@2
   387
    */
williamr@2
   388
	IMPORT_C TUid CreateIndicatorFromResourceL( TInt aIndicatorResourceId,
williamr@2
   389
	                                            TInt aCustomIndicatorFlags );
williamr@2
   390
williamr@2
   391
williamr@2
   392
    /**
williamr@2
   393
    * Replaces the icon of the given indicator.
williamr@2
   394
    *
williamr@2
   395
    * @since 3.1
williamr@2
   396
    * @param  aIndicator   UID of the indicator.
williamr@2
   397
    * @param  aState       State which icon is replaced (@c EAknIndicatorStateOn
williamr@2
   398
    *                      or @c EAknIndicatorStateAnimate)
williamr@2
   399
    * @param  aLayoutMode  Layout mode of the icon to be replaced
williamr@2
   400
    *                      (@c ELayoutModeUsual or @c ELayoutModeWide)
williamr@2
   401
    * @param  aIconBitmap  Bitmap of the new icon. Ownership is transferred to
williamr@2
   402
    *                      @c CAknIndicatorContainer.
williamr@2
   403
    * @param  aIconMask    Mask of the new icon. Ownership is transferred to
williamr@2
   404
    *                      @c CAknIndicatorContainer.
williamr@2
   405
    * @param  aIconIndex   If parameter aState is @c EAknIndicatorStateAnimate,
williamr@2
   406
    *                      then this parameter must contain the index of the
williamr@2
   407
    *                      icon to be replaced in the animation sequence.
williamr@2
   408
    *                      Old icon must exist for given index so that the
williamr@2
   409
    *                      number of animation frames does not change.
williamr@2
   410
    */
williamr@2
   411
	IMPORT_C void ReplaceIndicatorIconL( TUid aIndicator,
williamr@2
   412
	                                     TInt aState,
williamr@2
   413
	                                     TInt aLayoutMode,
williamr@2
   414
	                                     CFbsBitmap* aIconBitmap,
williamr@2
   415
	                                     CFbsBitmap* aIconMask,
williamr@2
   416
	                                     TInt aIconIndex = 0 );
williamr@2
   417
williamr@2
   418
private:
williamr@2
   419
williamr@2
   420
    /** Array of the indicators. */
williamr@2
   421
   	typedef CArrayPtrFlat<CAknIndicator> CAknIndicatorQueue;
williamr@2
   422
    CAknIndicatorQueue* iIndicators;
williamr@2
   423
williamr@2
   424
    /** Layout orientations. */
williamr@2
   425
    TLayoutOrientation iLayoutOrientation;
williamr@2
   426
    TLayoutOrientation iPreviousLayoutOrientation;
williamr@2
   427
williamr@2
   428
    /** Alignment of the indicators. */
williamr@2
   429
    TIndicatorAlignment iAlignment;
williamr@2
   430
williamr@2
   431
    /** Number of indicators shown. */
williamr@2
   432
    TInt iIndicatorsShown;
williamr@2
   433
williamr@2
   434
    /** Number of animated indicators shown. */
williamr@2
   435
    TInt iAnimatedIndicatorsShown;
williamr@2
   436
williamr@2
   437
    /** Extension class. */
williamr@2
   438
    CAknIndicatorContainerExtension* iExtension;
williamr@2
   439
williamr@2
   440
    /** Context of the indicators. */
williamr@2
   441
    TInt iIndicatorContext;
williamr@2
   442
williamr@2
   443
    /** Indicator animation timer. */
williamr@2
   444
   	CPeriodic* iTicker;
williamr@2
   445
williamr@2
   446
   	/** Reserved for future use. */
williamr@2
   447
    TBool iSpare2;
williamr@2
   448
williamr@2
   449
    /** Synchronization value used in the indicator animations. */
williamr@2
   450
    TInt iSynchronizingValue;
williamr@2
   451
williamr@2
   452
    /** Small incall status bubble. */
williamr@2
   453
    CIncallStatusBubble* iIncallBubble;
williamr@2
   454
    };
williamr@2
   455
williamr@2
   456
#endif // AKNINDICATORCONTAINER_H
williamr@2
   457
williamr@2
   458
// End of File