classicui_plat/tabs_api/inc/akntabgrp.h
author hgs
Tue, 17 Aug 2010 18:16:43 +0800
changeset 53 3c67ea82fafc
parent 45 667edd0b8678
permissions -rw-r--r--
201033
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Tab control for the status pane's navigation pane.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef AKNTABGRP_H
hgs
parents:
diff changeset
    20
#define AKNTABGRP_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
//  INCLUDES
hgs
parents:
diff changeset
    23
#include <AknControl.h>
hgs
parents:
diff changeset
    24
#include <coeccntx.h>
hgs
parents:
diff changeset
    25
#include <coecobs.h>
hgs
parents:
diff changeset
    26
#include <AknNaviDecoratorObserver.h>
hgs
parents:
diff changeset
    27
#include "aknconsts.h"
hgs
parents:
diff changeset
    28
#include "AknUtils.h"
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
#include <avkon.mbg>
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
// FORWARD DECLARATIONS
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
class CEikLabel;
hgs
parents:
diff changeset
    36
class CEikImage;
hgs
parents:
diff changeset
    37
class CAknTabGroup;
hgs
parents:
diff changeset
    38
class CAknTabGroupExtension;
hgs
parents:
diff changeset
    39
class MAknTabObserver;
hgs
parents:
diff changeset
    40
class MAknNaviDecoratorObserver;
hgs
parents:
diff changeset
    41
class TAknWindowLineLayout;
hgs
parents:
diff changeset
    42
class CAknTabExtension;
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
/**
hgs
parents:
diff changeset
    45
*  Tab item control used inside a tab group.
hgs
parents:
diff changeset
    46
*
hgs
parents:
diff changeset
    47
*  @lib avkon.lib
hgs
parents:
diff changeset
    48
*  @since 0.9
hgs
parents:
diff changeset
    49
*/
hgs
parents:
diff changeset
    50
NONSHARABLE_CLASS( CAknTab ) : public CAknControl
hgs
parents:
diff changeset
    51
    {
hgs
parents:
diff changeset
    52
friend class CAknTabGroup;
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
public:
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
    /**
hgs
parents:
diff changeset
    57
    * Indicates a tab title's type
hgs
parents:
diff changeset
    58
    */
hgs
parents:
diff changeset
    59
    enum TAknTabDataType
hgs
parents:
diff changeset
    60
        {
hgs
parents:
diff changeset
    61
        /** Tab title is empty.*/
hgs
parents:
diff changeset
    62
        EAknTabNone,
hgs
parents:
diff changeset
    63
        /** Tab title has only text. */
hgs
parents:
diff changeset
    64
        EAknTabText,
hgs
parents:
diff changeset
    65
        /** Tab title has only icon */
hgs
parents:
diff changeset
    66
        EAknTabIcon,
hgs
parents:
diff changeset
    67
        /** Tab title has both text and icon. */
hgs
parents:
diff changeset
    68
        EAknTabTextAndIcon
hgs
parents:
diff changeset
    69
        };
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
public:
hgs
parents:
diff changeset
    72
hgs
parents:
diff changeset
    73
    /**
hgs
parents:
diff changeset
    74
    * Destructor
hgs
parents:
diff changeset
    75
    */
hgs
parents:
diff changeset
    76
    ~CAknTab();
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
    /**
hgs
parents:
diff changeset
    79
    * Two-phased constructor.
hgs
parents:
diff changeset
    80
    *
hgs
parents:
diff changeset
    81
    * @param  aParent  Reference to parent control.
hgs
parents:
diff changeset
    82
    * @param  aReader  Reference to resource reader.
hgs
parents:
diff changeset
    83
    *
hgs
parents:
diff changeset
    84
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
    85
    */
hgs
parents:
diff changeset
    86
    static CAknTab* NewL( const CCoeControl& aParent,
hgs
parents:
diff changeset
    87
                          TResourceReader& aReader );
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
    /**
hgs
parents:
diff changeset
    90
    * Two-phased constructor.
hgs
parents:
diff changeset
    91
    *
hgs
parents:
diff changeset
    92
    * @param  aParent  Reference to parent control.
hgs
parents:
diff changeset
    93
    * @param  aReader  Reference to resource reader.
hgs
parents:
diff changeset
    94
    *
hgs
parents:
diff changeset
    95
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
    96
    */
hgs
parents:
diff changeset
    97
    static CAknTab* NewLC( const CCoeControl& aParent,
hgs
parents:
diff changeset
    98
                           TResourceReader& aReader );
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
    /**
hgs
parents:
diff changeset
   101
    * Two-phased constructor.
hgs
parents:
diff changeset
   102
    *
hgs
parents:
diff changeset
   103
    * @param  aId       Tab ID.
hgs
parents:
diff changeset
   104
    * @param  aParent   Reference to parent control.
hgs
parents:
diff changeset
   105
    * @param  aTabText  Reference to title text.
hgs
parents:
diff changeset
   106
    *
hgs
parents:
diff changeset
   107
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   108
    */
hgs
parents:
diff changeset
   109
    static CAknTab* NewL( TInt aId,
hgs
parents:
diff changeset
   110
                          const CCoeControl& aParent,
hgs
parents:
diff changeset
   111
                          const TDesC& aTabText );
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
    /**
hgs
parents:
diff changeset
   114
    * Two-phased constructor.
hgs
parents:
diff changeset
   115
    *
hgs
parents:
diff changeset
   116
    * @param  aId       Tab ID.
hgs
parents:
diff changeset
   117
    * @param  aParent   Reference to parent control.
hgs
parents:
diff changeset
   118
    * @param  aTabText  Reference to title text.
hgs
parents:
diff changeset
   119
    *
hgs
parents:
diff changeset
   120
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   121
    */
hgs
parents:
diff changeset
   122
    static CAknTab* NewLC( TInt aId,
hgs
parents:
diff changeset
   123
                           const CCoeControl& aParent,
hgs
parents:
diff changeset
   124
                           const TDesC& aTabText );
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
    /**
hgs
parents:
diff changeset
   127
    * Two-phased constructor.
hgs
parents:
diff changeset
   128
    *
hgs
parents:
diff changeset
   129
    * @param  aId         Tab ID.
hgs
parents:
diff changeset
   130
    * @param  aParent     Reference to parent control.
hgs
parents:
diff changeset
   131
    * @param  aTabText    Reference to title text.
hgs
parents:
diff changeset
   132
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   133
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   134
    *
hgs
parents:
diff changeset
   135
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   136
    */
hgs
parents:
diff changeset
   137
    static CAknTab* NewL( TInt aId,
hgs
parents:
diff changeset
   138
                          const CCoeControl& aParent,
hgs
parents:
diff changeset
   139
                          const TDesC& aTabText,
hgs
parents:
diff changeset
   140
                          const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   141
                          const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    /**
hgs
parents:
diff changeset
   144
    * Two-phased constructor.
hgs
parents:
diff changeset
   145
    *
hgs
parents:
diff changeset
   146
    * @param  aId         Tab ID.
hgs
parents:
diff changeset
   147
    * @param  aParent     Reference to parent control.
hgs
parents:
diff changeset
   148
    * @param  aTabText    Reference to title text.
hgs
parents:
diff changeset
   149
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   150
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   151
    *
hgs
parents:
diff changeset
   152
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   153
    */
hgs
parents:
diff changeset
   154
    static CAknTab* NewLC( TInt aId,
hgs
parents:
diff changeset
   155
                           const CCoeControl& aParent,
hgs
parents:
diff changeset
   156
                           const TDesC& aTabText,
hgs
parents:
diff changeset
   157
                           const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   158
                           const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
    /**
hgs
parents:
diff changeset
   161
    * Two-phased constructor.
hgs
parents:
diff changeset
   162
    *
hgs
parents:
diff changeset
   163
    * @param  aId         Tab ID.
hgs
parents:
diff changeset
   164
    * @param  aParent     Reference to parent control.
hgs
parents:
diff changeset
   165
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   166
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   167
    *
hgs
parents:
diff changeset
   168
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   169
    */
hgs
parents:
diff changeset
   170
    static CAknTab* NewL( TInt aId,
hgs
parents:
diff changeset
   171
                          const CCoeControl& aParent,
hgs
parents:
diff changeset
   172
                          const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   173
                          const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
    /**
hgs
parents:
diff changeset
   176
    * Two-phased constructor.
hgs
parents:
diff changeset
   177
    *
hgs
parents:
diff changeset
   178
    * @param  aId         Tab ID.
hgs
parents:
diff changeset
   179
    * @param  aParent     Reference to parent control.
hgs
parents:
diff changeset
   180
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   181
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   182
    *
hgs
parents:
diff changeset
   183
    * @return A pointer to constructed @c CAknTab object.
hgs
parents:
diff changeset
   184
    */
hgs
parents:
diff changeset
   185
    static CAknTab* NewLC( TInt aId,
hgs
parents:
diff changeset
   186
                           const CCoeControl& aParent,
hgs
parents:
diff changeset
   187
                           const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   188
                           const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
    /**
hgs
parents:
diff changeset
   191
    * Replace the tab title.
hgs
parents:
diff changeset
   192
    *
hgs
parents:
diff changeset
   193
    * @param  aTabText  New title text.
hgs
parents:
diff changeset
   194
    */
hgs
parents:
diff changeset
   195
    void ReplaceTextL( const TDesC& aTabText );
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
    /**
hgs
parents:
diff changeset
   198
    * Activate or deactive this tab.
hgs
parents:
diff changeset
   199
    *
hgs
parents:
diff changeset
   200
    * @param  aActive   @c ETrue for activation, @c EFalse for deactivation.
hgs
parents:
diff changeset
   201
    * @param  aDrawNow  Indicates whether control need to be redrawn.
hgs
parents:
diff changeset
   202
    */
hgs
parents:
diff changeset
   203
    void SetActive( TBool aActive, TDrawNow aDrawNow );
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    /**
hgs
parents:
diff changeset
   206
    * Determines whether this tab is active.
hgs
parents:
diff changeset
   207
    *
hgs
parents:
diff changeset
   208
    * @return @c ETrue if a tab is active, @c EFalse if not.
hgs
parents:
diff changeset
   209
    */
hgs
parents:
diff changeset
   210
    TBool Active() const;
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
    /**
hgs
parents:
diff changeset
   213
    * Gets tab's ID.
hgs
parents:
diff changeset
   214
    *
hgs
parents:
diff changeset
   215
    * @return Tabs' ID.
hgs
parents:
diff changeset
   216
    */
hgs
parents:
diff changeset
   217
    TInt Id() const;
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
    /**
hgs
parents:
diff changeset
   220
    * Gets this tab's type.
hgs
parents:
diff changeset
   221
    *
hgs
parents:
diff changeset
   222
    * @return Tab's type.
hgs
parents:
diff changeset
   223
    */
hgs
parents:
diff changeset
   224
    enum TAknTabDataType TabType() const;
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
    /**
hgs
parents:
diff changeset
   228
    * Sets the total amount of tabs in the tabgroup where this tab belongs to.
hgs
parents:
diff changeset
   229
    */
hgs
parents:
diff changeset
   230
    void SetTotalAmountOfTabs( TInt aAmount );
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
    /**
hgs
parents:
diff changeset
   233
    * Sets the narrow tab layout.
hgs
parents:
diff changeset
   234
    * @internal Used by the UI framework.
hgs
parents:
diff changeset
   235
    * Applications can set the narrow layout using @c CAknNaviDecorator class.
hgs
parents:
diff changeset
   236
    */
hgs
parents:
diff changeset
   237
    void SetNarrowTabLayout( TBool aNarrow );
hgs
parents:
diff changeset
   238
    
hgs
parents:
diff changeset
   239
    /**
hgs
parents:
diff changeset
   240
    * Sets the flag indicating whether or not this tab contains
hgs
parents:
diff changeset
   241
    * a multi-colored title icon.
hgs
parents:
diff changeset
   242
    *
hgs
parents:
diff changeset
   243
    * The multi-color mode should be used with color icons,
hgs
parents:
diff changeset
   244
    * otherwise the tab icon is drawn using a color
hgs
parents:
diff changeset
   245
    * defined in the current skin.
hgs
parents:
diff changeset
   246
    * 
hgs
parents:
diff changeset
   247
    * @param  aMultiColor  @c ETrue to set the multi-color mode on,
hgs
parents:
diff changeset
   248
    *                      @c EFalse to turn it off.
hgs
parents:
diff changeset
   249
    */
hgs
parents:
diff changeset
   250
    void SetMultiColorMode( TBool aMultiColor );
hgs
parents:
diff changeset
   251
    
hgs
parents:
diff changeset
   252
    /**
hgs
parents:
diff changeset
   253
    * Checks whether or not this tab is drawn using multi-color mode or not.
hgs
parents:
diff changeset
   254
    *
hgs
parents:
diff changeset
   255
    * @return @c ETrue if this tab contains a multi-color icon,
hgs
parents:
diff changeset
   256
    *         @c EFalse otherwise.
hgs
parents:
diff changeset
   257
    */
hgs
parents:
diff changeset
   258
    TBool MultiColorMode() const;
hgs
parents:
diff changeset
   259
    
hgs
parents:
diff changeset
   260
    /**
hgs
parents:
diff changeset
   261
    * Sets the long tab layout.
hgs
parents:
diff changeset
   262
    * @internal Used by the UI framework.
hgs
parents:
diff changeset
   263
    */
hgs
parents:
diff changeset
   264
    void SetLongTabLayout( TBool aLongTab );
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
public: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
    /**
hgs
parents:
diff changeset
   269
    * Gets the minimum size of the tab.
hgs
parents:
diff changeset
   270
    *
hgs
parents:
diff changeset
   271
    * @return Minimum size of the tab.
hgs
parents:
diff changeset
   272
    */
hgs
parents:
diff changeset
   273
    virtual TSize MinimumSize();
hgs
parents:
diff changeset
   274
hgs
parents:
diff changeset
   275
    /**
hgs
parents:
diff changeset
   276
    * Sets the tab dimmed.
hgs
parents:
diff changeset
   277
    *
hgs
parents:
diff changeset
   278
    * @param  aDimmed  @c ETrue to dim the control,
hgs
parents:
diff changeset
   279
    *                  @c EFalse to set the control as not dimmed.
hgs
parents:
diff changeset
   280
    */
hgs
parents:
diff changeset
   281
    virtual void SetDimmed( TBool aDimmed );
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
    /**
hgs
parents:
diff changeset
   284
    * Gets the list of logical colors employed
hgs
parents:
diff changeset
   285
    * in the drawing of the control, paired with an explanation of how
hgs
parents:
diff changeset
   286
    * they are used. Appends the list into @c aColorUseList.
hgs
parents:
diff changeset
   287
    *
hgs
parents:
diff changeset
   288
    * @param[in,out]  aColorUseList  The color list.
hgs
parents:
diff changeset
   289
    */
hgs
parents:
diff changeset
   290
    virtual void GetColorUseListL(
hgs
parents:
diff changeset
   291
        CArrayFix<TCoeColorUse>& aColorUseList ) const;
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
protected: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    /**
hgs
parents:
diff changeset
   296
    * Responds to size changes events to sets the size and
hgs
parents:
diff changeset
   297
    * position of the contents of this control.
hgs
parents:
diff changeset
   298
    */
hgs
parents:
diff changeset
   299
    virtual void SizeChanged();
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
    /**
hgs
parents:
diff changeset
   302
    * Gets the number of controls contained in a compound control.
hgs
parents:
diff changeset
   303
    *
hgs
parents:
diff changeset
   304
    * @return The number of component controls contained by this control.
hgs
parents:
diff changeset
   305
    */
hgs
parents:
diff changeset
   306
    virtual TInt CountComponentControls() const;
hgs
parents:
diff changeset
   307
hgs
parents:
diff changeset
   308
    /**
hgs
parents:
diff changeset
   309
    * Gets the specified component of a compound control.
hgs
parents:
diff changeset
   310
    *
hgs
parents:
diff changeset
   311
    * @param  aIndex  The index of the control to get.
hgs
parents:
diff changeset
   312
    *
hgs
parents:
diff changeset
   313
    * @return The component control with an index of @c aIndex.
hgs
parents:
diff changeset
   314
hgs
parents:
diff changeset
   315
    */
hgs
parents:
diff changeset
   316
    virtual CCoeControl* ComponentControl( TInt aIndex ) const;
hgs
parents:
diff changeset
   317
hgs
parents:
diff changeset
   318
    /**
hgs
parents:
diff changeset
   319
    * Handles pointer events.
hgs
parents:
diff changeset
   320
    * This function is called by framework whenever a pointer event
hgs
parents:
diff changeset
   321
    * occurs in the control.
hgs
parents:
diff changeset
   322
    *
hgs
parents:
diff changeset
   323
    * @param  aPointerEvent  The pointer event.
hgs
parents:
diff changeset
   324
    */
hgs
parents:
diff changeset
   325
    virtual void HandlePointerEventL( const TPointerEvent& aPointerEvent );
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
private: // From base class @c CAknControl.
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
    IMPORT_C void* ExtensionInterface( TUid aInterface );
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
private: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
    virtual void Draw( const TRect& aRect ) const;
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
private:
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
    CAknTab( TInt aId );
hgs
parents:
diff changeset
   338
hgs
parents:
diff changeset
   339
    void ConstructFromResourceL( TResourceReader& aReader );
hgs
parents:
diff changeset
   340
    
hgs
parents:
diff changeset
   341
    void ConstructL( const TDesC& aTabText );
hgs
parents:
diff changeset
   342
    
hgs
parents:
diff changeset
   343
    void ConstructL( const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   344
                     const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
    void LoadColorBitmapL();
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
    /**
hgs
parents:
diff changeset
   349
    * Handles a change to the control's resources.
hgs
parents:
diff changeset
   350
    *
hgs
parents:
diff changeset
   351
    * @param  aType  The event type.
hgs
parents:
diff changeset
   352
    */
hgs
parents:
diff changeset
   353
    void HandleResourceChange( TInt aType );
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
    void SizeChangedInNormalLayout();
hgs
parents:
diff changeset
   356
    void SizeChangedInFlatLayout();
hgs
parents:
diff changeset
   357
    void SizeChangedInNarrowLayout();
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
private:
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
    CEikLabel* iLabel;
hgs
parents:
diff changeset
   362
    TInt       iId;
hgs
parents:
diff changeset
   363
    TBool      iActive;
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
    const CFbsBitmap* iBitmap;
hgs
parents:
diff changeset
   366
    const CFbsBitmap* iBitmapMask;
hgs
parents:
diff changeset
   367
    TAknLayoutRect    iBitmapRect;
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
    CAknTabExtension* iExtension;
hgs
parents:
diff changeset
   370
    
hgs
parents:
diff changeset
   371
    typedef CArrayPtrFlat<CFbsBitmap> CAknTabColorBitmapArray;
hgs
parents:
diff changeset
   372
    CAknTabColorBitmapArray* iColorBitmaps;
hgs
parents:
diff changeset
   373
    };
hgs
parents:
diff changeset
   374
hgs
parents:
diff changeset
   375
hgs
parents:
diff changeset
   376
/**
hgs
parents:
diff changeset
   377
* Tab group functionality for navigation pane.
hgs
parents:
diff changeset
   378
*
hgs
parents:
diff changeset
   379
* @lib avkon.lib
hgs
parents:
diff changeset
   380
* @since 0.9
hgs
parents:
diff changeset
   381
*/
hgs
parents:
diff changeset
   382
class CAknTabGroup : public CAknControl,
hgs
parents:
diff changeset
   383
                     public MCoeControlObserver,
hgs
parents:
diff changeset
   384
                     public MCoeControlContext,
hgs
parents:
diff changeset
   385
                     public MAknNaviDecoratorObserver
hgs
parents:
diff changeset
   386
    {
hgs
parents:
diff changeset
   387
public:
hgs
parents:
diff changeset
   388
    /**
hgs
parents:
diff changeset
   389
    * Destructor.
hgs
parents:
diff changeset
   390
    */
hgs
parents:
diff changeset
   391
    IMPORT_C ~CAknTabGroup();
hgs
parents:
diff changeset
   392
hgs
parents:
diff changeset
   393
    /**
hgs
parents:
diff changeset
   394
    * Creates new tab group.
hgs
parents:
diff changeset
   395
    *
hgs
parents:
diff changeset
   396
    * @param  aParent  Parent control.
hgs
parents:
diff changeset
   397
    */
hgs
parents:
diff changeset
   398
    IMPORT_C static CAknTabGroup* NewL( const CCoeControl& aParent );
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
    /**
hgs
parents:
diff changeset
   401
    * Creates new tab group and pushes it to the clean up stack.
hgs
parents:
diff changeset
   402
    *
hgs
parents:
diff changeset
   403
    * @param  aParent  Parent control.
hgs
parents:
diff changeset
   404
    */
hgs
parents:
diff changeset
   405
    IMPORT_C static CAknTabGroup* NewLC( const CCoeControl& aParent );
hgs
parents:
diff changeset
   406
hgs
parents:
diff changeset
   407
public:
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
    /**
hgs
parents:
diff changeset
   410
    * Add a tab to the tab group from resources.
hgs
parents:
diff changeset
   411
    *
hgs
parents:
diff changeset
   412
    * @param  aReader  Resource reader.
hgs
parents:
diff changeset
   413
    *
hgs
parents:
diff changeset
   414
    * @return ID of the added tab.
hgs
parents:
diff changeset
   415
    */
hgs
parents:
diff changeset
   416
    IMPORT_C TInt AddTabL( TResourceReader& aReader );
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
    /**
hgs
parents:
diff changeset
   419
    * Add a tab to the tab group.
hgs
parents:
diff changeset
   420
    *
hgs
parents:
diff changeset
   421
    * @param  aTabId    ID of the tab to be added.
hgs
parents:
diff changeset
   422
    * @param  aTabText  Text for the tab.
hgs
parents:
diff changeset
   423
    */
hgs
parents:
diff changeset
   424
    IMPORT_C void AddTabL( TInt aTabId, const TDesC& aText );
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
    /**
hgs
parents:
diff changeset
   427
    * Add a tab to the tab group.
hgs
parents:
diff changeset
   428
    *
hgs
parents:
diff changeset
   429
    * @param  aTabId      ID of the tab.
hgs
parents:
diff changeset
   430
    * @param  aTabText    Text for the tab.
hgs
parents:
diff changeset
   431
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   432
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   433
    */
hgs
parents:
diff changeset
   434
    IMPORT_C void AddTabL( TInt aTabId,
hgs
parents:
diff changeset
   435
                           const TDesC& aText,
hgs
parents:
diff changeset
   436
                           const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   437
                           const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
    /**
hgs
parents:
diff changeset
   440
    * Add a tab to the tab group.
hgs
parents:
diff changeset
   441
    *
hgs
parents:
diff changeset
   442
    * @param  aTabId      ID of the tab.
hgs
parents:
diff changeset
   443
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   444
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   445
    */
hgs
parents:
diff changeset
   446
    IMPORT_C void AddTabL( TInt aTabId,
hgs
parents:
diff changeset
   447
                           const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   448
                           const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   449
    /**
hgs
parents:
diff changeset
   450
    * Replaces a tab with a new one from resources.
hgs
parents:
diff changeset
   451
    * Tab with same ID is replaced.
hgs
parents:
diff changeset
   452
    *
hgs
parents:
diff changeset
   453
    * @param  aReader  Resource reader.
hgs
parents:
diff changeset
   454
    */
hgs
parents:
diff changeset
   455
    IMPORT_C void ReplaceTabL( TResourceReader& aReader );
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
    /**
hgs
parents:
diff changeset
   458
    * Replaces a tab with a new one.
hgs
parents:
diff changeset
   459
    *
hgs
parents:
diff changeset
   460
    * @param  aTabId    ID of the tab to be replaced.
hgs
parents:
diff changeset
   461
    * @param  aTabText  Text for the new tab.
hgs
parents:
diff changeset
   462
    */
hgs
parents:
diff changeset
   463
    IMPORT_C void ReplaceTabL( TInt aTabId, const TDesC& aText );
hgs
parents:
diff changeset
   464
hgs
parents:
diff changeset
   465
    /**
hgs
parents:
diff changeset
   466
    * Replaces a tab with a new one.
hgs
parents:
diff changeset
   467
    *
hgs
parents:
diff changeset
   468
    * @param  aTabId      ID of the tab to be replaced.
hgs
parents:
diff changeset
   469
    * @param  aTabText    Text for the new tab.
hgs
parents:
diff changeset
   470
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   471
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   472
    */
hgs
parents:
diff changeset
   473
    IMPORT_C void ReplaceTabL( TInt aTabId,
hgs
parents:
diff changeset
   474
                               const TDesC& aText,
hgs
parents:
diff changeset
   475
                               const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   476
                               const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   477
hgs
parents:
diff changeset
   478
    /**
hgs
parents:
diff changeset
   479
    * Replaces a tab with a new one.
hgs
parents:
diff changeset
   480
    *
hgs
parents:
diff changeset
   481
    * @param  aTabId      ID of the tab to be replaced.
hgs
parents:
diff changeset
   482
    * @param  aTabBitmap  Bitmap for the tab. Ownership of the bitmap is taken.
hgs
parents:
diff changeset
   483
    * @param  aMask       Bitmap's mask. Ownership of the mask is taken.
hgs
parents:
diff changeset
   484
    */
hgs
parents:
diff changeset
   485
    IMPORT_C void ReplaceTabL( TInt aTabId,
hgs
parents:
diff changeset
   486
                               const CFbsBitmap* aTabBitmap,
hgs
parents:
diff changeset
   487
                               const CFbsBitmap* aMask = NULL );
hgs
parents:
diff changeset
   488
hgs
parents:
diff changeset
   489
    /**
hgs
parents:
diff changeset
   490
    * Replaces a tab text with a new one.
hgs
parents:
diff changeset
   491
    *
hgs
parents:
diff changeset
   492
    * @param  aTabId    ID of the tab containing the text to be replaced.
hgs
parents:
diff changeset
   493
    * @param  aTabText  New tab text.
hgs
parents:
diff changeset
   494
    */
hgs
parents:
diff changeset
   495
    IMPORT_C void ReplaceTabTextL( TInt aTabId, const TDesC& aTabText );
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
    /**
hgs
parents:
diff changeset
   498
    * Delete a tab from the tab group.
hgs
parents:
diff changeset
   499
    *
hgs
parents:
diff changeset
   500
    * @param  aTabId  ID of the tab to be deleted.
hgs
parents:
diff changeset
   501
    */
hgs
parents:
diff changeset
   502
    IMPORT_C void DeleteTabL( TInt aTabId );
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
    /**
hgs
parents:
diff changeset
   505
    * Activate (highlight) a tab.
hgs
parents:
diff changeset
   506
    *
hgs
parents:
diff changeset
   507
    * @param  aTabId  ID of the tab to be highlighted.
hgs
parents:
diff changeset
   508
    */
hgs
parents:
diff changeset
   509
    IMPORT_C void SetActiveTabById( TInt aTabId );
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
    /**
hgs
parents:
diff changeset
   512
    * Activate (highlight) a tab.
hgs
parents:
diff changeset
   513
    *
hgs
parents:
diff changeset
   514
    * @param  aTabIndex  Index of the tab to be highlighted.
hgs
parents:
diff changeset
   515
    */
hgs
parents:
diff changeset
   516
    IMPORT_C void SetActiveTabByIndex( TInt aTabIndex );
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
    /**
hgs
parents:
diff changeset
   519
    * Returns the ID of the currently active (highlighted) tab.
hgs
parents:
diff changeset
   520
    *
hgs
parents:
diff changeset
   521
    * @return ID of the highlighted tab.
hgs
parents:
diff changeset
   522
    */
hgs
parents:
diff changeset
   523
    IMPORT_C TInt ActiveTabId() const;
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
    /**
hgs
parents:
diff changeset
   526
    * Returns the index of the currently active (highlighted) tab.
hgs
parents:
diff changeset
   527
    *
hgs
parents:
diff changeset
   528
    * @return Index of the highlighted tab.
hgs
parents:
diff changeset
   529
    */
hgs
parents:
diff changeset
   530
    IMPORT_C TInt ActiveTabIndex() const;
hgs
parents:
diff changeset
   531
hgs
parents:
diff changeset
   532
    /**
hgs
parents:
diff changeset
   533
    * Set width of each tab.
hgs
parents:
diff changeset
   534
    * This width determines what tab layout is used.
hgs
parents:
diff changeset
   535
    * To get a specific tab layout, use the following constants:
hgs
parents:
diff changeset
   536
    *  - KTabWidthWithOneTab         One tab layout
hgs
parents:
diff changeset
   537
    *  - KTabWidthWithTwoTabs        Two tabs layout
hgs
parents:
diff changeset
   538
    *  - KTabWidthWithThreeTabs      Three tabs layout
hgs
parents:
diff changeset
   539
    *  - KTabWidthWithFourTabs       Four tabs layout
hgs
parents:
diff changeset
   540
    *  - KTabWidthWithTwoLongTabs    Two long tabs layout
hgs
parents:
diff changeset
   541
    *  - KTabWidthWithThreeLongTabs  Three long tabs layout
hgs
parents:
diff changeset
   542
    *
hgs
parents:
diff changeset
   543
    * @param  aWidth  Width of each tab, @see aknconsts.h.
hgs
parents:
diff changeset
   544
    */
hgs
parents:
diff changeset
   545
    IMPORT_C void SetTabFixedWidthL( TInt aWidth );
hgs
parents:
diff changeset
   546
    
hgs
parents:
diff changeset
   547
    /**
hgs
parents:
diff changeset
   548
    * Sets a tab dimmed/not dimmed.
hgs
parents:
diff changeset
   549
    *
hgs
parents:
diff changeset
   550
    * @param  aTabId   ID of the tab.
hgs
parents:
diff changeset
   551
    * @param  aDimmed  @c ETrue to set the tab dimmed,
hgs
parents:
diff changeset
   552
    *                  @c EFalse otherwise.
hgs
parents:
diff changeset
   553
    */
hgs
parents:
diff changeset
   554
    IMPORT_C void DimTab( TInt aTabId, TBool aDimmed );
hgs
parents:
diff changeset
   555
    
hgs
parents:
diff changeset
   556
    /**
hgs
parents:
diff changeset
   557
    * Used to check whether or not a tab is dimmed.
hgs
parents:
diff changeset
   558
    *
hgs
parents:
diff changeset
   559
    * @param  aTabId  ID of the tab.
hgs
parents:
diff changeset
   560
    *
hgs
parents:
diff changeset
   561
    * @return @c ETrue if the tab is dimmed, @c EFalse otherwise.
hgs
parents:
diff changeset
   562
    */
hgs
parents:
diff changeset
   563
    IMPORT_C virtual TBool IsTabDimmed( TInt aTabId ) const;
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
    /**
hgs
parents:
diff changeset
   566
    * Returns the index of a tab.
hgs
parents:
diff changeset
   567
    *
hgs
parents:
diff changeset
   568
    * @param  aTabId  ID of a tab.
hgs
parents:
diff changeset
   569
    *
hgs
parents:
diff changeset
   570
    * @return Index of the tab.
hgs
parents:
diff changeset
   571
    */
hgs
parents:
diff changeset
   572
    IMPORT_C virtual TInt TabIndexFromId( TInt aTabId ) const;
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
    /**
hgs
parents:
diff changeset
   575
    * Returns the ID of a tab.
hgs
parents:
diff changeset
   576
    *
hgs
parents:
diff changeset
   577
    * @param  aTabIndex  Index of a tab.
hgs
parents:
diff changeset
   578
    *
hgs
parents:
diff changeset
   579
    * @return ID of the tab.
hgs
parents:
diff changeset
   580
    */
hgs
parents:
diff changeset
   581
    IMPORT_C virtual TInt TabIdFromIndex( TInt aTabIndex ) const;
hgs
parents:
diff changeset
   582
hgs
parents:
diff changeset
   583
    /**
hgs
parents:
diff changeset
   584
    * Number of tabs in the tab group.
hgs
parents:
diff changeset
   585
    *
hgs
parents:
diff changeset
   586
    * @return  Number of tabs in the tab group.
hgs
parents:
diff changeset
   587
    */
hgs
parents:
diff changeset
   588
    IMPORT_C virtual TInt TabCount() const;
hgs
parents:
diff changeset
   589
hgs
parents:
diff changeset
   590
    /**
hgs
parents:
diff changeset
   591
    * Sets the tab observer for this tab group.
hgs
parents:
diff changeset
   592
    *
hgs
parents:
diff changeset
   593
    * @param  aObserver  Tab observer to set.
hgs
parents:
diff changeset
   594
    */
hgs
parents:
diff changeset
   595
    IMPORT_C void SetObserver( MAknTabObserver* aObserver );
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
public: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
    /**
hgs
parents:
diff changeset
   600
    * Return minimum size of the control.
hgs
parents:
diff changeset
   601
    *
hgs
parents:
diff changeset
   602
    * @return Minimum size of the control.
hgs
parents:
diff changeset
   603
    */
hgs
parents:
diff changeset
   604
    IMPORT_C virtual TSize MinimumSize();
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
    /**
hgs
parents:
diff changeset
   607
    * Handles key events.
hgs
parents:
diff changeset
   608
    *
hgs
parents:
diff changeset
   609
    * @param  aKeyEvent  The key event.
hgs
parents:
diff changeset
   610
    * @param  aType      The type of the event.
hgs
parents:
diff changeset
   611
    *
hgs
parents:
diff changeset
   612
    * @return Indicates whether or not the key event was used by this control.
hgs
parents:
diff changeset
   613
    */
hgs
parents:
diff changeset
   614
    IMPORT_C virtual TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent,
hgs
parents:
diff changeset
   615
                                                  TEventCode aType );
hgs
parents:
diff changeset
   616
hgs
parents:
diff changeset
   617
    /**
hgs
parents:
diff changeset
   618
    * Gets the list of logical colors employed in the drawing of the control,
hgs
parents:
diff changeset
   619
    * paired with an explanation of how they are used.
hgs
parents:
diff changeset
   620
    * Appends the list into @c aColorUseList.
hgs
parents:
diff changeset
   621
    *
hgs
parents:
diff changeset
   622
    * @param[in,out]  aColorUseList  The color list.
hgs
parents:
diff changeset
   623
    */
hgs
parents:
diff changeset
   624
    IMPORT_C virtual void GetColorUseListL(
hgs
parents:
diff changeset
   625
        CArrayFix<TCoeColorUse>& aColorUseList ) const;
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
    /**
hgs
parents:
diff changeset
   628
    * Handles a change to the control's resources.
hgs
parents:
diff changeset
   629
    *
hgs
parents:
diff changeset
   630
    * @param  aType  The type of resource change.
hgs
parents:
diff changeset
   631
    */
hgs
parents:
diff changeset
   632
    void HandleResourceChange( TInt aType );
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
    /**
hgs
parents:
diff changeset
   635
    * Handles pointer events in tabs.
hgs
parents:
diff changeset
   636
    *
hgs
parents:
diff changeset
   637
    * @param  aPointerEvent  Pointer event to be handled.
hgs
parents:
diff changeset
   638
    */
hgs
parents:
diff changeset
   639
    IMPORT_C void HandlePointerEventL( const TPointerEvent& aPointerEvent );
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
public: // From base class @c MCoeControlObserver.
hgs
parents:
diff changeset
   642
hgs
parents:
diff changeset
   643
    /**
hgs
parents:
diff changeset
   644
    * Handles an event from an observed control.
hgs
parents:
diff changeset
   645
    *
hgs
parents:
diff changeset
   646
    * @param  aControl    Control that caused the event.
hgs
parents:
diff changeset
   647
    * @param  aEventType  Type of the event.
hgs
parents:
diff changeset
   648
    */
hgs
parents:
diff changeset
   649
    IMPORT_C virtual void HandleControlEventL( CCoeControl* aControl,
hgs
parents:
diff changeset
   650
                                               TCoeEvent aEventType );
hgs
parents:
diff changeset
   651
hgs
parents:
diff changeset
   652
public: // From base class @c MCoeControlContext.
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
    /**
hgs
parents:
diff changeset
   655
    * Allows to modify graphics context before Draw.
hgs
parents:
diff changeset
   656
    *
hgs
parents:
diff changeset
   657
    * @param  aGc  Graphics context to be modified.
hgs
parents:
diff changeset
   658
    */
hgs
parents:
diff changeset
   659
    IMPORT_C virtual void PrepareContext( CWindowGc& aGc ) const;
hgs
parents:
diff changeset
   660
hgs
parents:
diff changeset
   661
public: // From base class @c MAknNaviDecoratorObserver.
hgs
parents:
diff changeset
   662
hgs
parents:
diff changeset
   663
    /*
hgs
parents:
diff changeset
   664
    * Handles events from navi decorator parent control.
hgs
parents:
diff changeset
   665
    *
hgs
parents:
diff changeset
   666
    * @param  aEventID  ID of event to be handled.
hgs
parents:
diff changeset
   667
    */
hgs
parents:
diff changeset
   668
    IMPORT_C virtual void HandleNaviDecoratorEventL( TInt aEventID );
hgs
parents:
diff changeset
   669
hgs
parents:
diff changeset
   670
protected: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   671
hgs
parents:
diff changeset
   672
    /**
hgs
parents:
diff changeset
   673
    * Handles the size change events.
hgs
parents:
diff changeset
   674
    */
hgs
parents:
diff changeset
   675
    IMPORT_C virtual void SizeChanged();
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
    /**
hgs
parents:
diff changeset
   678
    * Returns number of controls inside this control.
hgs
parents:
diff changeset
   679
    *
hgs
parents:
diff changeset
   680
    * @return Number of component controls.
hgs
parents:
diff changeset
   681
    */
hgs
parents:
diff changeset
   682
    IMPORT_C virtual TInt CountComponentControls() const;
hgs
parents:
diff changeset
   683
hgs
parents:
diff changeset
   684
    /**
hgs
parents:
diff changeset
   685
    * Returns a component control determined by control index.
hgs
parents:
diff changeset
   686
    *
hgs
parents:
diff changeset
   687
    * @param  aIndex  Index of a control to be returned.
hgs
parents:
diff changeset
   688
    *
hgs
parents:
diff changeset
   689
    * @return Pointer to the control.
hgs
parents:
diff changeset
   690
    */
hgs
parents:
diff changeset
   691
    IMPORT_C virtual CCoeControl* ComponentControl( TInt aIndex ) const;
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
    /**
hgs
parents:
diff changeset
   694
    * This is called when the focus is changed.
hgs
parents:
diff changeset
   695
    *
hgs
parents:
diff changeset
   696
    * @param  aDrawNow  Whether or not to draw the control.
hgs
parents:
diff changeset
   697
    */
hgs
parents:
diff changeset
   698
    IMPORT_C virtual void FocusChanged( TDrawNow aDrawNow );
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
    /**
hgs
parents:
diff changeset
   701
    * Reverse the order of tabs in tab array.
hgs
parents:
diff changeset
   702
    */
hgs
parents:
diff changeset
   703
    void ReverseTabOrderL();
hgs
parents:
diff changeset
   704
    
hgs
parents:
diff changeset
   705
private:
hgs
parents:
diff changeset
   706
hgs
parents:
diff changeset
   707
    /*
hgs
parents:
diff changeset
   708
    * Reserved
hgs
parents:
diff changeset
   709
    */
hgs
parents:
diff changeset
   710
    IMPORT_C virtual void Reserved1();
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
    /*
hgs
parents:
diff changeset
   713
    * Reserved
hgs
parents:
diff changeset
   714
    */
hgs
parents:
diff changeset
   715
    IMPORT_C virtual void Reserved2();
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
    /*
hgs
parents:
diff changeset
   718
    * Reserved
hgs
parents:
diff changeset
   719
    */
hgs
parents:
diff changeset
   720
    IMPORT_C virtual void Reserved3();
hgs
parents:
diff changeset
   721
hgs
parents:
diff changeset
   722
hgs
parents:
diff changeset
   723
private:
hgs
parents:
diff changeset
   724
    IMPORT_C CAknTabGroup();
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
    /**
hgs
parents:
diff changeset
   727
    * Tab groups can be mirrored depending on current locale. To client
hgs
parents:
diff changeset
   728
    * application everything always seems like tabs are not mirrored but
hgs
parents:
diff changeset
   729
    * the internal order of tabs in tab group may or may not be mirrored.
hgs
parents:
diff changeset
   730
    * If mirroring is off then this function just returns given
hgs
parents:
diff changeset
   731
    * parameter as it is. If mirroring is on then this function returns
hgs
parents:
diff changeset
   732
    * unmirrored index if given index was mirrord and vice versa. Two
hgs
parents:
diff changeset
   733
    * nested calls to this function cancels its effect
hgs
parents:
diff changeset
   734
    * (ConvertTabIndex(ConvertTabIndex(aIndex)) == aIndex).
hgs
parents:
diff changeset
   735
    *
hgs
parents:
diff changeset
   736
    * @param  aIndex  Index to be converted.
hgs
parents:
diff changeset
   737
    * @return Converted index.
hgs
parents:
diff changeset
   738
    */
hgs
parents:
diff changeset
   739
    TInt ConvertTabIndex(TInt aIndex) const;
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
private: // From base class @c CCoeControl.
hgs
parents:
diff changeset
   742
hgs
parents:
diff changeset
   743
    IMPORT_C virtual void Draw( const TRect& aRect ) const;
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
private: // From base class @c CAknControl.
hgs
parents:
diff changeset
   746
hgs
parents:
diff changeset
   747
    IMPORT_C void* ExtensionInterface( TUid aInterface );
hgs
parents:
diff changeset
   748
    
hgs
parents:
diff changeset
   749
public: // New methods
hgs
parents:
diff changeset
   750
hgs
parents:
diff changeset
   751
    /**
hgs
parents:
diff changeset
   752
    * Sets the multi-color drawing mode of a tab.
hgs
parents:
diff changeset
   753
    * This should be called after adding a tab to the tab group
hgs
parents:
diff changeset
   754
    * if the icon in the tab should be drawn as multi-colored.
hgs
parents:
diff changeset
   755
    * The tab icon will be drawn using a color specified in the
hgs
parents:
diff changeset
   756
    * active skin if multi-color mode is not defined.
hgs
parents:
diff changeset
   757
    *
hgs
parents:
diff changeset
   758
    * This function should be called right after a tab containing
hgs
parents:
diff changeset
   759
    * a multi-color icon is added to the tab group.
hgs
parents:
diff changeset
   760
    * 
hgs
parents:
diff changeset
   761
    * @param  aTabId       ID of the tab.
hgs
parents:
diff changeset
   762
    * @param  aMultiColor  @c ETrue to set the multi-color mode on,
hgs
parents:
diff changeset
   763
    *                      @c EFalse to turn it off.
hgs
parents:
diff changeset
   764
    */
hgs
parents:
diff changeset
   765
    IMPORT_C void SetTabMultiColorMode( TInt aTabId, TBool aMultiColor );
hgs
parents:
diff changeset
   766
hgs
parents:
diff changeset
   767
    /** Directions in which the tab group focus can be moved. */
hgs
parents:
diff changeset
   768
    enum TDirection
hgs
parents:
diff changeset
   769
        {
hgs
parents:
diff changeset
   770
        ELeft,
hgs
parents:
diff changeset
   771
        ERight
hgs
parents:
diff changeset
   772
        };
hgs
parents:
diff changeset
   773
hgs
parents:
diff changeset
   774
private:
hgs
parents:
diff changeset
   775
    void ConstructL();
hgs
parents:
diff changeset
   776
    void CommonAddTabL(CAknTab* aTab);
hgs
parents:
diff changeset
   777
    void CommonReplaceTabL(CAknTab* aTab);
hgs
parents:
diff changeset
   778
    void HandleTabStateChanged(CCoeControl* aControl);
hgs
parents:
diff changeset
   779
    TInt Index(TInt aTabId) const;
hgs
parents:
diff changeset
   780
    TBool CycleFocus(TDirection aDirection,TDrawNow aDrawNow);
hgs
parents:
diff changeset
   781
    TInt LeftMostTabIndex() const;
hgs
parents:
diff changeset
   782
    TInt RightMostTabIndex() const;
hgs
parents:
diff changeset
   783
    void DrawLowerBorder(TDrawNow aDrawNow) const;
hgs
parents:
diff changeset
   784
    void DoDrawLowerBorder() const;
hgs
parents:
diff changeset
   785
    void ReportNavigationEvent();
hgs
parents:
diff changeset
   786
    void LoadTabBitmapsL(TInt aNumberOfTabsShown, TBool aLongTabs);
hgs
parents:
diff changeset
   787
    TBool TabsVisibleInCurrentLayout() const;
hgs
parents:
diff changeset
   788
    void CurrentLayout( TAknWindowLineLayout& aLayout ) const;
hgs
parents:
diff changeset
   789
    void InitTabGroupGraphicsL();
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
    void InitTabAnimationEventTimer();
hgs
parents:
diff changeset
   792
    void CancelTabAnimationEventTimer();
hgs
parents:
diff changeset
   793
    static TInt TabAnimationEvent(TAny * aPtr);
hgs
parents:
diff changeset
   794
    void DoTabAnimationEvent();
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
    TBool NarrowTabLayoutNext();
hgs
parents:
diff changeset
   797
    TBool NarrowTabLayout();
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
public:
hgs
parents:
diff changeset
   800
hgs
parents:
diff changeset
   801
    /**
hgs
parents:
diff changeset
   802
    * Sets the navigation decorator layout so that it corresponds
hgs
parents:
diff changeset
   803
    * the current tab group layout.
hgs
parents:
diff changeset
   804
    * 
hgs
parents:
diff changeset
   805
    * @param  aNarrow  @c ETrue if narrow tab group layout is used,
hgs
parents:
diff changeset
   806
    *                  @c EFalse if normal layout is used.
hgs
parents:
diff changeset
   807
    */
hgs
parents:
diff changeset
   808
    void SetDecoratorLayout( TBool aNarrow );
hgs
parents:
diff changeset
   809
hgs
parents:
diff changeset
   810
private:
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
    void SizeChangedInNormalLayout();
hgs
parents:
diff changeset
   813
    void SizeChangedInFlatLayout();
hgs
parents:
diff changeset
   814
    void SizeChangedInNarrowLayout();
hgs
parents:
diff changeset
   815
    void InitTabAnimationL();
hgs
parents:
diff changeset
   816
    
hgs
parents:
diff changeset
   817
hgs
parents:
diff changeset
   818
    /**
hgs
parents:
diff changeset
   819
    * Gets the rectangle for the tab group.
hgs
parents:
diff changeset
   820
    * If the tab arrows are not shown, then the tab group gets a wider
hgs
parents:
diff changeset
   821
    * rectangle.
hgs
parents:
diff changeset
   822
    *
hgs
parents:
diff changeset
   823
    * @param  aArrowsUsed  @c ETrue if tab arrows are shown,
hgs
parents:
diff changeset
   824
    *                      @c EFalse otherwise.
hgs
parents:
diff changeset
   825
    */
hgs
parents:
diff changeset
   826
    static TRect ParentRect( TBool aArrowsUsed );
hgs
parents:
diff changeset
   827
    
hgs
parents:
diff changeset
   828
    /**
hgs
parents:
diff changeset
   829
    * @internal Used by the UI framework.
hgs
parents:
diff changeset
   830
    *
hgs
parents:
diff changeset
   831
    * Starts the animation shown when tab focus is cycled.
hgs
parents:
diff changeset
   832
    * Note that this starts the animation only when required, i.e.
hgs
parents:
diff changeset
   833
    * when layout that needs cycle animation is used and when the first
hgs
parents:
diff changeset
   834
    * shown tab in the tab group changes.
hgs
parents:
diff changeset
   835
    *
hgs
parents:
diff changeset
   836
    * @param  aDirection  Direction which the focus in cycled to.
hgs
parents:
diff changeset
   837
    * @param  aNewTab     Index of the tab that receives the focus.
hgs
parents:
diff changeset
   838
    */
hgs
parents:
diff changeset
   839
    void StartCycleAnimationL( TDirection aDirection, TInt aNewTab );
hgs
parents:
diff changeset
   840
    
hgs
parents:
diff changeset
   841
    /**
hgs
parents:
diff changeset
   842
    * Called on the dynamic layout switch event, switches the current tab
hgs
parents:
diff changeset
   843
    * layout to a corresponding one that is usable in the new layout.
hgs
parents:
diff changeset
   844
    */ 
hgs
parents:
diff changeset
   845
    void SwitchTabLayoutL();
hgs
parents:
diff changeset
   846
hgs
parents:
diff changeset
   847
public:
hgs
parents:
diff changeset
   848
hgs
parents:
diff changeset
   849
    /**
hgs
parents:
diff changeset
   850
    * @internal Used by the UI framework.
hgs
parents:
diff changeset
   851
    * Applications can set the narrow layout using @c CAknNaviDecorator class.
hgs
parents:
diff changeset
   852
    */
hgs
parents:
diff changeset
   853
    void SetNarrowTabLayoutL( TBool aNarrow, TBool aUseAnimation = EFalse );
hgs
parents:
diff changeset
   854
    
hgs
parents:
diff changeset
   855
    /**
hgs
parents:
diff changeset
   856
    * @internal Used by the UI framework.
hgs
parents:
diff changeset
   857
    *
hgs
parents:
diff changeset
   858
    * Sets the tab arrows' visibility.
hgs
parents:
diff changeset
   859
    *
hgs
parents:
diff changeset
   860
    * @param  aVisible  @c ETrue to set the arrows visible,
hgs
parents:
diff changeset
   861
    *                   @c EFalse to hide them.
hgs
parents:
diff changeset
   862
    */
hgs
parents:
diff changeset
   863
    void SetNaviArrowsVisible( TBool aVisible );
hgs
parents:
diff changeset
   864
hgs
parents:
diff changeset
   865
private:
hgs
parents:
diff changeset
   866
    CArrayPtr<CAknTab>*     iTabArray;
hgs
parents:
diff changeset
   867
    TInt                    iActiveTab;
hgs
parents:
diff changeset
   868
    TRect                   iSpareRect;
hgs
parents:
diff changeset
   869
hgs
parents:
diff changeset
   870
    TInt                    iTabFixedWidth;
hgs
parents:
diff changeset
   871
    TBool                   iLongTabs;
hgs
parents:
diff changeset
   872
    TInt                    iNumberOfTabsShown;
hgs
parents:
diff changeset
   873
    TInt                    iFirstShownTab;
hgs
parents:
diff changeset
   874
hgs
parents:
diff changeset
   875
    CFbsBitmap*             iTabBitmaps[KTabNumberOfTabBitmaps];
hgs
parents:
diff changeset
   876
    CFbsBitmap*             iTabMaskBitmaps[KTabNumberOfTabBitmaps];
hgs
parents:
diff changeset
   877
hgs
parents:
diff changeset
   878
    TInt                    iBitmapNames[KTabNumberOfTabBitmaps];
hgs
parents:
diff changeset
   879
    TInt                    iBitmapMaskNames[KTabNumberOfTabBitmaps];
hgs
parents:
diff changeset
   880
    CAknTabGroupExtension*  iExtension;
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
    MAknTabObserver*        iTabObserver;
hgs
parents:
diff changeset
   883
    TBool                   iMirrored;
hgs
parents:
diff changeset
   884
    };
hgs
parents:
diff changeset
   885
hgs
parents:
diff changeset
   886
#endif // AKNTABGRP_H