gssettingsuis/Gs/GSApplication/Src/GSMainContainer.cpp
author hgs
Thu, 04 Nov 2010 13:38:47 +0800
changeset 68 13e71d907dc3
permissions -rw-r--r--
201044
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2005 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:  Container for the main view of General Settings
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
// INCLUDE FILES
hgs
parents:
diff changeset
    20
#include    <bldvariant.hrh>
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include    "GSUi.h"
hgs
parents:
diff changeset
    23
#include    "gsmainview.h"
hgs
parents:
diff changeset
    24
#include    "GSMainContainer.h"
hgs
parents:
diff changeset
    25
#include    "gsplugininterface.h"
hgs
parents:
diff changeset
    26
#include    "GsLogger.h"
hgs
parents:
diff changeset
    27
#include    <gsapp.rsg>         // Resources for mainview
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include    <aknlists.h>
hgs
parents:
diff changeset
    30
#include    <calslbs.h>
hgs
parents:
diff changeset
    31
#include    <eikclbd.h>
hgs
parents:
diff changeset
    32
#include    <AknIconArray.h>    // For loading icons
hgs
parents:
diff changeset
    33
#include    <AknsUtils.h>       // For loading icons
hgs
parents:
diff changeset
    34
#include    <aknViewAppUi.h>
hgs
parents:
diff changeset
    35
#include    <akntitle.h>
hgs
parents:
diff changeset
    36
#include    <barsread.h>
hgs
parents:
diff changeset
    37
#include    <gulicon.h>         // For CGulIcon
hgs
parents:
diff changeset
    38
#include    <csxhelp/cp.hlp.hrh>
hgs
parents:
diff changeset
    39
#include    <gsfwviewuids.h>    // for KUidGS
hgs
parents:
diff changeset
    40
#include    "GsContainerExt.h" //For CGsContainerExt
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
//CONSTANTS
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ========================= MEMBER FUNCTIONS ================================
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    48
// CGSMainContainer::ConstructL(const TRect& aRect)
hgs
parents:
diff changeset
    49
// Symbian OS two phased constructor
hgs
parents:
diff changeset
    50
//
hgs
parents:
diff changeset
    51
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    52
//
hgs
parents:
diff changeset
    53
void CGSMainContainer::ConstructL(
hgs
parents:
diff changeset
    54
    const TRect& aRect,
hgs
parents:
diff changeset
    55
    CAknViewAppUi* aAppUi,
hgs
parents:
diff changeset
    56
    CArrayPtrFlat<CGSPluginInterface>* aPluginArray )
hgs
parents:
diff changeset
    57
    {
hgs
parents:
diff changeset
    58
    iAppUi = aAppUi;
hgs
parents:
diff changeset
    59
    iPluginArray = aPluginArray;
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
    // Initialize the array containing pointers to plugins that are actually
hgs
parents:
diff changeset
    62
    // displayed in lbx.
hgs
parents:
diff changeset
    63
    iVisiblePlugins = new CArrayPtrFlat<CGSPluginInterface>( 10 );
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    CEikStatusPane* sp = iAppUi->StatusPane();
hgs
parents:
diff changeset
    66
    CAknTitlePane* title = static_cast<CAknTitlePane*>
hgs
parents:
diff changeset
    67
        ( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
    // Set view title from resource:
hgs
parents:
diff changeset
    70
    TResourceReader rReader;
hgs
parents:
diff changeset
    71
    iCoeEnv->CreateResourceReaderLC( rReader, R_GS_MAIN_VIEW_TITLE );
hgs
parents:
diff changeset
    72
    title->SetFromResourceL( rReader );
hgs
parents:
diff changeset
    73
    CleanupStack::PopAndDestroy(); //rReader
hgs
parents:
diff changeset
    74
hgs
parents:
diff changeset
    75
    CreateWindowL(); // Makes this control a window-owning control
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
    // Create listbox:
hgs
parents:
diff changeset
    78
    iListBox = new( ELeave ) CAknSingleLargeStyleListBox;
hgs
parents:
diff changeset
    79
    iListBox->ConstructL( this );
hgs
parents:
diff changeset
    80
    iListBox->SetContainerWindowL( *this );
hgs
parents:
diff changeset
    81
    iListBox->SetListBoxObserver( this );
hgs
parents:
diff changeset
    82
    iListBox->CreateScrollBarFrameL(ETrue);
hgs
parents:
diff changeset
    83
    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
hgs
parents:
diff changeset
    84
        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    // Obtain reference to listbox's item text array:
hgs
parents:
diff changeset
    87
    iItemTextArray
hgs
parents:
diff changeset
    88
        = STATIC_CAST( CDesCArray*, iListBox->Model()->ItemTextArray() );
hgs
parents:
diff changeset
    89
    iExt = CGsContainerExt::NewL();
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
    SetRect( aRect );
hgs
parents:
diff changeset
    92
    ActivateL();
hgs
parents:
diff changeset
    93
    __GSLOGSTRING( "[CGSMainContainer] ConstructL()" );
hgs
parents:
diff changeset
    94
    }
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
    98
// CGSMainContainer::~CGSMainContainer()
hgs
parents:
diff changeset
    99
// Destructor
hgs
parents:
diff changeset
   100
//
hgs
parents:
diff changeset
   101
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   102
//
hgs
parents:
diff changeset
   103
CGSMainContainer::~CGSMainContainer()
hgs
parents:
diff changeset
   104
    {
hgs
parents:
diff changeset
   105
    if  ( iVisiblePlugins )
hgs
parents:
diff changeset
   106
        {
hgs
parents:
diff changeset
   107
        iVisiblePlugins->Reset();
hgs
parents:
diff changeset
   108
        }
hgs
parents:
diff changeset
   109
    delete iVisiblePlugins;
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
    if  ( iItemTextArray )
hgs
parents:
diff changeset
   112
        {
hgs
parents:
diff changeset
   113
        iItemTextArray->Reset();
hgs
parents:
diff changeset
   114
        }
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
    if ( iListBox )
hgs
parents:
diff changeset
   117
        {
hgs
parents:
diff changeset
   118
        delete iListBox;
hgs
parents:
diff changeset
   119
        }
hgs
parents:
diff changeset
   120
    delete iExt;
hgs
parents:
diff changeset
   121
    __GSLOGSTRING( "[CGSMainContainer] ~CGSMainContainer" );
hgs
parents:
diff changeset
   122
  }
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   125
// CGSMainContainer::UpdateListbox
hgs
parents:
diff changeset
   126
//
hgs
parents:
diff changeset
   127
// Updates listbox from iPluginArray.
hgs
parents:
diff changeset
   128
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   129
//
hgs
parents:
diff changeset
   130
void CGSMainContainer::UpdateListBoxL()
hgs
parents:
diff changeset
   131
    {
hgs
parents:
diff changeset
   132
    
hgs
parents:
diff changeset
   133
    if( iPluginArray->Count() == 0 )
hgs
parents:
diff changeset
   134
		{
hgs
parents:
diff changeset
   135
        return;
hgs
parents:
diff changeset
   136
		}
hgs
parents:
diff changeset
   137
    
hgs
parents:
diff changeset
   138
    __GSLOGSTRING( "[CGSMainContainer::UpdateListBoxL]" );
hgs
parents:
diff changeset
   139
    
hgs
parents:
diff changeset
   140
    // Empty item array because it will be reoccupied.
hgs
parents:
diff changeset
   141
    iItemTextArray->Reset();
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
    // Empty the array because it will be updated.
hgs
parents:
diff changeset
   144
    iVisiblePlugins->Reset();
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
    // Array for icons in the listbox. Owns the icons.
hgs
parents:
diff changeset
   147
    CAknIconArray* icons = new (ELeave) CAknIconArray( 10 );
hgs
parents:
diff changeset
   148
    CleanupStack::PushL( icons );
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
    // Index of the plugin inserted into lbx item array.
hgs
parents:
diff changeset
   151
    TInt pluginIndex = 0;
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
    // 1) Add each plugin's data to listbox if the plugin is visible.
hgs
parents:
diff changeset
   154
    for( TInt i = 0; i < iPluginArray->Count(); i++ )
hgs
parents:
diff changeset
   155
        {
hgs
parents:
diff changeset
   156
        CGSPluginInterface* plugin = iPluginArray->operator[]( i );
hgs
parents:
diff changeset
   157
        if( plugin->Visible() )
hgs
parents:
diff changeset
   158
            {
hgs
parents:
diff changeset
   159
            AddPluginDataToLbxL( plugin, pluginIndex, iItemTextArray, icons );
hgs
parents:
diff changeset
   160
            pluginIndex++;
hgs
parents:
diff changeset
   161
            }
hgs
parents:
diff changeset
   162
        }
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
    // Destroy the old icons because SetIconArray() does not destroy them.
hgs
parents:
diff changeset
   165
    CArrayPtr<CGulIcon>* oldIcons
hgs
parents:
diff changeset
   166
        = iListBox->ItemDrawer()->ColumnData()->IconArray();
hgs
parents:
diff changeset
   167
    if( oldIcons )
hgs
parents:
diff changeset
   168
        {
hgs
parents:
diff changeset
   169
        oldIcons->ResetAndDestroy();
hgs
parents:
diff changeset
   170
        delete oldIcons;
hgs
parents:
diff changeset
   171
        }
hgs
parents:
diff changeset
   172
hgs
parents:
diff changeset
   173
    // Transfer ownership of icon array to the lbx.
hgs
parents:
diff changeset
   174
    // SetIconArray() does not delete the old icon array
hgs
parents:
diff changeset
   175
    iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
hgs
parents:
diff changeset
   176
    CleanupStack::Pop( icons );
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
    // Draws listbox again
hgs
parents:
diff changeset
   179
    iListBox->HandleItemAdditionL();
hgs
parents:
diff changeset
   180
    }
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
hgs
parents:
diff changeset
   183
//Disabling warning caused by err variable used inside macros
hgs
parents:
diff changeset
   184
#pragma diag_suppress 550
hgs
parents:
diff changeset
   185
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   186
// CGSMainContainer::AddPluginDataToLbxL()
hgs
parents:
diff changeset
   187
//
hgs
parents:
diff changeset
   188
//
hgs
parents:
diff changeset
   189
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   190
//
hgs
parents:
diff changeset
   191
void CGSMainContainer::AddPluginDataToLbxL( CGSPluginInterface* aPlugin,
hgs
parents:
diff changeset
   192
                                              TInt aIndex,
hgs
parents:
diff changeset
   193
                                              CDesCArray* aItemTextArray,
hgs
parents:
diff changeset
   194
                                              CAknIconArray* aIconArray )
hgs
parents:
diff changeset
   195
    {
hgs
parents:
diff changeset
   196
    // Add the plugin to visible plugins array:
hgs
parents:
diff changeset
   197
    iVisiblePlugins->AppendL( aPlugin );
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
    // 1.1) Read item descriptor from plugin:
hgs
parents:
diff changeset
   200
    TBuf<256> buf;
hgs
parents:
diff changeset
   201
    _LIT( KTab, "\t" );
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
    TRAPD
hgs
parents:
diff changeset
   204
        (
hgs
parents:
diff changeset
   205
        captionErr,
hgs
parents:
diff changeset
   206
        aPlugin->GetCaptionL( buf );
hgs
parents:
diff changeset
   207
        )
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    // If plugin caption fails, set caption to error string.
hgs
parents:
diff changeset
   210
    if( captionErr != KErrNone )
hgs
parents:
diff changeset
   211
        {
hgs
parents:
diff changeset
   212
        _LIT( KGSParentPluginCaptionErrorTxt, "Error" );
hgs
parents:
diff changeset
   213
        buf.Append( KGSParentPluginCaptionErrorTxt );
hgs
parents:
diff changeset
   214
        }
hgs
parents:
diff changeset
   215
       else
hgs
parents:
diff changeset
   216
        {
hgs
parents:
diff changeset
   217
        __GSLOGSTRING2( "[CGSMainContainer] 0x%X::GetCaptionL Error: %d",
hgs
parents:
diff changeset
   218
        aPlugin->Id().iUid, captionErr );
hgs
parents:
diff changeset
   219
        }
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
    /**
hgs
parents:
diff changeset
   222
    * 1.2) Create formatted item string.
hgs
parents:
diff changeset
   223
    * list_single_large_pane:
hgs
parents:
diff changeset
   224
    * list item string format: "1\tTextLabel\t0\t0"
hgs
parents:
diff changeset
   225
    * where 0 is an index to icon array
hgs
parents:
diff changeset
   226
    */
hgs
parents:
diff changeset
   227
    TBuf<256> item;
hgs
parents:
diff changeset
   228
    item.AppendNum( aIndex );
hgs
parents:
diff changeset
   229
    item.Append( KTab );
hgs
parents:
diff changeset
   230
    item.Append( buf );
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
    aItemTextArray->AppendL( item );
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
    // 1.3) Add icons if listbox uses them:
hgs
parents:
diff changeset
   235
    CGulIcon* icon;
hgs
parents:
diff changeset
   236
    TRAPD
hgs
parents:
diff changeset
   237
        (
hgs
parents:
diff changeset
   238
        iconErr,
hgs
parents:
diff changeset
   239
        icon = aPlugin->CreateIconL( KGSIconTypeLbxItem );
hgs
parents:
diff changeset
   240
        )
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
    __GSLOGSTRING2(
hgs
parents:
diff changeset
   243
        "[CGSMainContainer] CreateIconL result for 0x%X: %d",
hgs
parents:
diff changeset
   244
        aPlugin->Id().iUid, iconErr );
hgs
parents:
diff changeset
   245
    TSize size = icon->Bitmap()->SizeInPixels();
hgs
parents:
diff changeset
   246
    CleanupStack::PushL( icon );
hgs
parents:
diff changeset
   247
    aIconArray->AppendL( icon );
hgs
parents:
diff changeset
   248
    CleanupStack::Pop( icon );
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
    }
hgs
parents:
diff changeset
   251
//Enabling warnings
hgs
parents:
diff changeset
   252
#pragma diag_default 550
hgs
parents:
diff changeset
   253
    
hgs
parents:
diff changeset
   254
    
hgs
parents:
diff changeset
   255
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   256
// CGSMainContainer::GetHelpContext(TCoeHelpContext& aContext) const
hgs
parents:
diff changeset
   257
// Gets Help
hgs
parents:
diff changeset
   258
//
hgs
parents:
diff changeset
   259
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   260
//
hgs
parents:
diff changeset
   261
void CGSMainContainer::GetHelpContext( TCoeHelpContext& aContext ) const
hgs
parents:
diff changeset
   262
    {
hgs
parents:
diff changeset
   263
    aContext.iMajor = KUidGS;
hgs
parents:
diff changeset
   264
    aContext.iContext = KCP_HLP_MAIN_VIEW;
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
hgs
parents:
diff changeset
   267
hgs
parents:
diff changeset
   268
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   269
// CGSMainContainer::SizeChanged
hgs
parents:
diff changeset
   270
// called by framwork when the view size is changed
hgs
parents:
diff changeset
   271
//
hgs
parents:
diff changeset
   272
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   273
//
hgs
parents:
diff changeset
   274
void CGSMainContainer::SizeChanged()
hgs
parents:
diff changeset
   275
    {
hgs
parents:
diff changeset
   276
    if ( iListBox )
hgs
parents:
diff changeset
   277
        {
hgs
parents:
diff changeset
   278
        iListBox->SetRect( Rect() );
hgs
parents:
diff changeset
   279
        }
hgs
parents:
diff changeset
   280
    }
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
hgs
parents:
diff changeset
   283
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   284
// CGSMainContainer::CountComponentControls
hgs
parents:
diff changeset
   285
//
hgs
parents:
diff changeset
   286
//
hgs
parents:
diff changeset
   287
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   288
//
hgs
parents:
diff changeset
   289
TInt CGSMainContainer::CountComponentControls() const
hgs
parents:
diff changeset
   290
    {
hgs
parents:
diff changeset
   291
    return 1;
hgs
parents:
diff changeset
   292
    }
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   296
// CGSMainContainer::ComponentControl
hgs
parents:
diff changeset
   297
//
hgs
parents:
diff changeset
   298
//
hgs
parents:
diff changeset
   299
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   300
//
hgs
parents:
diff changeset
   301
CCoeControl* CGSMainContainer::ComponentControl(TInt /*aIndex*/) const
hgs
parents:
diff changeset
   302
    {
hgs
parents:
diff changeset
   303
    return iListBox;
hgs
parents:
diff changeset
   304
    }
hgs
parents:
diff changeset
   305
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   308
// CGSMainContainer::TKeyResponse OfferKeyEventL
hgs
parents:
diff changeset
   309
// Called when a key is pressed.
hgs
parents:
diff changeset
   310
//
hgs
parents:
diff changeset
   311
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   312
//
hgs
parents:
diff changeset
   313
TKeyResponse  CGSMainContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,
hgs
parents:
diff changeset
   314
                                               TEventCode aType)
hgs
parents:
diff changeset
   315
    {
hgs
parents:
diff changeset
   316
    switch ( aKeyEvent.iCode )
hgs
parents:
diff changeset
   317
        {
hgs
parents:
diff changeset
   318
        case EKeyLeftArrow:
hgs
parents:
diff changeset
   319
        case EKeyRightArrow:
hgs
parents:
diff changeset
   320
            // Listbox takes all event even if it doesn't use them
hgs
parents:
diff changeset
   321
            return EKeyWasNotConsumed;
hgs
parents:
diff changeset
   322
        default:
hgs
parents:
diff changeset
   323
            break;
hgs
parents:
diff changeset
   324
        }
hgs
parents:
diff changeset
   325
    // now it's iListBox's job to process the key event
hgs
parents:
diff changeset
   326
    return iListBox->OfferKeyEventL(aKeyEvent, aType);
hgs
parents:
diff changeset
   327
    }
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
hgs
parents:
diff changeset
   330
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   331
// CGSMainContainer::HandleListBoxEventL
hgs
parents:
diff changeset
   332
//
hgs
parents:
diff changeset
   333
//
hgs
parents:
diff changeset
   334
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   335
void CGSMainContainer::HandleListBoxEventL(
hgs
parents:
diff changeset
   336
    CEikListBox* aListBox,
hgs
parents:
diff changeset
   337
    TListBoxEvent aEventType )
hgs
parents:
diff changeset
   338
    {
hgs
parents:
diff changeset
   339
    __GSLOGSTRING1(
hgs
parents:
diff changeset
   340
        "[CGSMainContainer] HandleListBoxEventL aEventType:%d",
hgs
parents:
diff changeset
   341
        aEventType);
hgs
parents:
diff changeset
   342
    switch ( aEventType )
hgs
parents:
diff changeset
   343
        {
hgs
parents:
diff changeset
   344
        case EEventEnterKeyPressed:
hgs
parents:
diff changeset
   345
        case EEventItemSingleClicked:
hgs
parents:
diff changeset
   346
            {
hgs
parents:
diff changeset
   347
            if (aListBox->CurrentItemIndex() < 0)
hgs
parents:
diff changeset
   348
                {
hgs
parents:
diff changeset
   349
                // Negative listbox value -> no item selected? 
hgs
parents:
diff changeset
   350
                break;
hgs
parents:
diff changeset
   351
                }
hgs
parents:
diff changeset
   352
            if ( iExt->iDblClickPreventer->IsActive() )
hgs
parents:
diff changeset
   353
                {
hgs
parents:
diff changeset
   354
                break;
hgs
parents:
diff changeset
   355
                }
hgs
parents:
diff changeset
   356
            iExt->iDblClickPreventer->Start();
hgs
parents:
diff changeset
   357
            CGSPluginInterface* selectedPlugin = iVisiblePlugins->operator[](
hgs
parents:
diff changeset
   358
                    aListBox->CurrentItemIndex());
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
            // Different command is used depending on the plugin type.
hgs
parents:
diff changeset
   361
            switch (selectedPlugin->ItemType())
hgs
parents:
diff changeset
   362
                {
hgs
parents:
diff changeset
   363
                // In these cases the plugin is a view:
hgs
parents:
diff changeset
   364
                case EGSItemTypeSingleLarge:
hgs
parents:
diff changeset
   365
                case EGSItemTypeSetting:
hgs
parents:
diff changeset
   366
                case EGSItemTypeSettingIcon:
hgs
parents:
diff changeset
   367
                    iAppUi->ActivateLocalViewL(selectedPlugin->Id());
hgs
parents:
diff changeset
   368
                    break;
hgs
parents:
diff changeset
   369
                    // In these cases the plugin is a dialog:
hgs
parents:
diff changeset
   370
                case EGSItemTypeSettingDialog:
hgs
parents:
diff changeset
   371
                case EGSItemTypeSingleLargeDialog:
hgs
parents:
diff changeset
   372
                    selectedPlugin->HandleSelection(
hgs
parents:
diff changeset
   373
                            EGSSelectionBySelectionKey);
hgs
parents:
diff changeset
   374
                    UpdateListBoxL(); // Refrest the listbox if value changed.
hgs
parents:
diff changeset
   375
                    break;
hgs
parents:
diff changeset
   376
                }
hgs
parents:
diff changeset
   377
            }
hgs
parents:
diff changeset
   378
            break;
hgs
parents:
diff changeset
   379
        default:
hgs
parents:
diff changeset
   380
           break;
hgs
parents:
diff changeset
   381
        }
hgs
parents:
diff changeset
   382
    }
hgs
parents:
diff changeset
   383
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   386
// CGSMainContainer::ListBox()
hgs
parents:
diff changeset
   387
//
hgs
parents:
diff changeset
   388
//
hgs
parents:
diff changeset
   389
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   390
//
hgs
parents:
diff changeset
   391
CAknSingleLargeStyleListBox* CGSMainContainer::ListBox()
hgs
parents:
diff changeset
   392
    {
hgs
parents:
diff changeset
   393
    return iListBox;
hgs
parents:
diff changeset
   394
    }
hgs
parents:
diff changeset
   395
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   398
// CGSMainContainer::HandleResourceChange()
hgs
parents:
diff changeset
   399
//
hgs
parents:
diff changeset
   400
//
hgs
parents:
diff changeset
   401
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   402
//
hgs
parents:
diff changeset
   403
void CGSMainContainer::HandleResourceChange( TInt aType )
hgs
parents:
diff changeset
   404
    {
hgs
parents:
diff changeset
   405
    //Handle layout orientation or skin change
hgs
parents:
diff changeset
   406
    CCoeControl::HandleResourceChange( aType );
hgs
parents:
diff changeset
   407
    if ( aType == KAknsMessageSkinChange )
hgs
parents:
diff changeset
   408
        {
hgs
parents:
diff changeset
   409
        TRAP_IGNORE( UpdateListBoxL() );
hgs
parents:
diff changeset
   410
        }
hgs
parents:
diff changeset
   411
    else if ( aType == KEikDynamicLayoutVariantSwitch  )
hgs
parents:
diff changeset
   412
	    {
hgs
parents:
diff changeset
   413
        TRect mainPaneRect;
hgs
parents:
diff changeset
   414
        AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,
hgs
parents:
diff changeset
   415
                                           mainPaneRect);
hgs
parents:
diff changeset
   416
        SetRect( mainPaneRect );
hgs
parents:
diff changeset
   417
	    }
hgs
parents:
diff changeset
   418
    }
hgs
parents:
diff changeset
   419
    
hgs
parents:
diff changeset
   420
hgs
parents:
diff changeset
   421
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   422
// CGSMainContainer::SelectedPlugin()
hgs
parents:
diff changeset
   423
//
hgs
parents:
diff changeset
   424
//
hgs
parents:
diff changeset
   425
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   426
//
hgs
parents:
diff changeset
   427
CGSPluginInterface* CGSMainContainer::SelectedPlugin()
hgs
parents:
diff changeset
   428
    {
hgs
parents:
diff changeset
   429
    CGSPluginInterface* plugin = NULL;
hgs
parents:
diff changeset
   430
    const TInt index = iListBox->CurrentItemIndex();
hgs
parents:
diff changeset
   431
    if ( index >= 0 && index <= iVisiblePlugins->Count() )
hgs
parents:
diff changeset
   432
        {
hgs
parents:
diff changeset
   433
        plugin = iVisiblePlugins->operator[]( index );
hgs
parents:
diff changeset
   434
    __GSLOGSTRING2( "[CGSMainContainer] SelectedPlugin 0x%X in index %d",
hgs
parents:
diff changeset
   435
        plugin->Id().iUid, index );
hgs
parents:
diff changeset
   436
        }
hgs
parents:
diff changeset
   437
    return plugin;
hgs
parents:
diff changeset
   438
    }
hgs
parents:
diff changeset
   439
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   442
// CGSMainContainer::SetSelectedItem()
hgs
parents:
diff changeset
   443
//
hgs
parents:
diff changeset
   444
//
hgs
parents:
diff changeset
   445
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   446
//
hgs
parents:
diff changeset
   447
void CGSMainContainer::SetSelectedItem( TUid aSelectedItemUid )
hgs
parents:
diff changeset
   448
    {
hgs
parents:
diff changeset
   449
    __GSLOGSTRING1( "[CGSMainContainer] SetSelectedItem(0x%X)",
hgs
parents:
diff changeset
   450
        aSelectedItemUid.iUid );
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
    TInt selectedItemIndex  = 0;
hgs
parents:
diff changeset
   453
    for( TInt i = 0; i < iVisiblePlugins->Count(); i++ )
hgs
parents:
diff changeset
   454
        {
hgs
parents:
diff changeset
   455
        CGSPluginInterface* plugin = iVisiblePlugins->operator[]( i );
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
        __GSLOGSTRING2( "[CGSMainContainer] Checking [%d] 0x%X)",
hgs
parents:
diff changeset
   458
            i, plugin->Id().iUid );
hgs
parents:
diff changeset
   459
hgs
parents:
diff changeset
   460
        // If plugin is found, select it:
hgs
parents:
diff changeset
   461
        if( plugin->Id() == aSelectedItemUid )
hgs
parents:
diff changeset
   462
            {
hgs
parents:
diff changeset
   463
            __GSLOGSTRING2( "[CGSMainContainer] Match 0x%X in index %d",
hgs
parents:
diff changeset
   464
                plugin->Id().iUid, i );
hgs
parents:
diff changeset
   465
            selectedItemIndex = i;
hgs
parents:
diff changeset
   466
            break;
hgs
parents:
diff changeset
   467
            }
hgs
parents:
diff changeset
   468
        }
hgs
parents:
diff changeset
   469
    iListBox->SetCurrentItemIndexAndDraw( selectedItemIndex );
hgs
parents:
diff changeset
   470
    }
hgs
parents:
diff changeset
   471
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   474
// CGSMainContainer::FocusChanged
hgs
parents:
diff changeset
   475
//
hgs
parents:
diff changeset
   476
// Set focus on the selected listbox. For animated skins feature.
hgs
parents:
diff changeset
   477
// ---------------------------------------------------------------------------
hgs
parents:
diff changeset
   478
void CGSMainContainer::FocusChanged( TDrawNow /*aDrawNow*/ )
hgs
parents:
diff changeset
   479
    {
hgs
parents:
diff changeset
   480
    if( iListBox )
hgs
parents:
diff changeset
   481
        {
hgs
parents:
diff changeset
   482
        iListBox->SetFocus( IsFocused() );
hgs
parents:
diff changeset
   483
        }
hgs
parents:
diff changeset
   484
    }
hgs
parents:
diff changeset
   485
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   488
// CGSMainContainer::SetListBoxEmptyTextL()
hgs
parents:
diff changeset
   489
//
hgs
parents:
diff changeset
   490
//Set the empty text of list box.
hgs
parents:
diff changeset
   491
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   492
//
hgs
parents:
diff changeset
   493
void CGSMainContainer::SetListBoxEmptyTextL(const TDes& aEmpty )
hgs
parents:
diff changeset
   494
    {
hgs
parents:
diff changeset
   495
    if( iListBox )
hgs
parents:
diff changeset
   496
        {
hgs
parents:
diff changeset
   497
        iListBox->View()->SetListEmptyTextL( aEmpty );
hgs
parents:
diff changeset
   498
        }
hgs
parents:
diff changeset
   499
    }
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   502
// CGSMainContainer::StoreListBoxPositionL
hgs
parents:
diff changeset
   503
//
hgs
parents:
diff changeset
   504
//Store the exact position of listbox.
hgs
parents:
diff changeset
   505
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   506
//
hgs
parents:
diff changeset
   507
void CGSMainContainer::StoreListBoxPositionL( CGSMainView::TListBoxPosition& aPosition )
hgs
parents:
diff changeset
   508
	{
hgs
parents:
diff changeset
   509
    aPosition.iCurrentItemIndex = iListBox->CurrentItemIndex();
hgs
parents:
diff changeset
   510
    aPosition.iItemOffsetInPixels = iListBox->View()->ItemOffsetInPixels();
hgs
parents:
diff changeset
   511
    aPosition.iTopItemIndex = iListBox->View()->TopItemIndex();
hgs
parents:
diff changeset
   512
	}
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   515
// CGSMainContainer::RestoreListBoxPositionL
hgs
parents:
diff changeset
   516
//
hgs
parents:
diff changeset
   517
//Restore the exact position of listbox.
hgs
parents:
diff changeset
   518
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   519
//
hgs
parents:
diff changeset
   520
void CGSMainContainer::RestoreListBoxPositionL( const CGSMainView::TListBoxPosition& aPosition, TBool aScreenModeChanged )
hgs
parents:
diff changeset
   521
	{
hgs
parents:
diff changeset
   522
    if ( aPosition.iCurrentItemIndex >= 0 )
hgs
parents:
diff changeset
   523
        {
hgs
parents:
diff changeset
   524
        iListBox->SetCurrentItemIndex( aPosition.iCurrentItemIndex );
hgs
parents:
diff changeset
   525
        }
hgs
parents:
diff changeset
   526
    
hgs
parents:
diff changeset
   527
    if ( aScreenModeChanged )
hgs
parents:
diff changeset
   528
        {
hgs
parents:
diff changeset
   529
        iListBox->View()->VerticalMoveToItemL( aPosition.iCurrentItemIndex,
hgs
parents:
diff changeset
   530
                CListBoxView::ESingleSelection );
hgs
parents:
diff changeset
   531
        }
hgs
parents:
diff changeset
   532
    else
hgs
parents:
diff changeset
   533
        {
hgs
parents:
diff changeset
   534
        iListBox->View()->SetItemOffsetInPixels( aPosition.iItemOffsetInPixels );
hgs
parents:
diff changeset
   535
        iListBox->View()->SetTopItemIndex( aPosition.iTopItemIndex );
hgs
parents:
diff changeset
   536
        }
hgs
parents:
diff changeset
   537
    }
hgs
parents:
diff changeset
   538
// End of File