email/imum/Utils/Src/IMSSettingsBaseUi.cpp
changeset 0 72b543305e3a
equal deleted inserted replaced
-1:000000000000 0:72b543305e3a
       
     1 /*
       
     2 * Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Base class for mail settings and wizard
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 #include <e32base.h>
       
    22 #include <avkon.hrh>
       
    23 #include <muiuflagger.h>
       
    24 #include <e32base.h>
       
    25 #include <hlplch.h>                     // HlpLauncher
       
    26 #include <coeaui.h>                     // CCoeAppUi
       
    27 
       
    28 #include "IMSSettingsBaseUi.h"
       
    29 #include "ImumInSettingsData.h"
       
    30 #include "IMSSettingsItemApprover.h"    // CIMSSettingsItemApprover
       
    31 #include "IMSSettingsItemAccessPoint.h" // CIMSSettingsAccessPointItem
       
    32 #include "ImumMboxDefaultData.h"            // CImumMboxDefaultData
       
    33 #include "ImumMboxSettingsCtrl.h"          // CImumMboxSettingsCtrl
       
    34 #include "ImumInternalApiImpl.h"            // CImumInternalApiImpl
       
    35 #include "ImumUtilsLogging.h"
       
    36 #include "EmailFeatureUtils.h"
       
    37 
       
    38 #include <cmapplicationsettingsui.h>
       
    39 
       
    40 // EXTERNAL DATA STRUCTURES
       
    41 // EXTERNAL FUNCTION PROTOTYPES
       
    42 // CONSTANTS
       
    43 // MACROS
       
    44 // LOCAL CONSTANTS AND MACROS
       
    45 // MODULE DATA STRUCTURES
       
    46 // LOCAL FUNCTION PROTOTYPES
       
    47 // FORWARD DECLARATIONS
       
    48 
       
    49 // ============================ MEMBER FUNCTIONS ===============================
       
    50 
       
    51 // ----------------------------------------------------------------------------
       
    52 // CIMSSettingsBaseUI::CIMSSettingsBaseUI()
       
    53 // ----------------------------------------------------------------------------
       
    54 //
       
    55 CIMSSettingsBaseUI::CIMSSettingsBaseUI(
       
    56     CIMSSettingsUi& aDialog,
       
    57     CImumInternalApiImpl& aMailboxApi,
       
    58     CEikFormattedCellListBox& aListBox,
       
    59     CAknTitlePane& aTitlePane,
       
    60     CMuiuFlags& aFlags )
       
    61     :
       
    62     CMuiuDynamicSettingsDialog( aListBox, aTitlePane ),
       
    63     iBaseUiFlags( aFlags ),
       
    64     iDialog( aDialog ),
       
    65     iMailboxApi( aMailboxApi ),
       
    66     iItemApprover( NULL ),
       
    67     iNoteUi( NULL ),
       
    68     iDefaultData( NULL )
       
    69     {
       
    70     IMUM_CONTEXT( CIMSSettingsBaseUI::CIMSSettingsBaseUI, 0, KLogUi );
       
    71 
       
    72     }
       
    73 
       
    74 // ----------------------------------------------------------------------------
       
    75 // CIMSSettingsBaseUI::~CIMSSettingsBaseUI()
       
    76 // ----------------------------------------------------------------------------
       
    77 //
       
    78 CIMSSettingsBaseUI::~CIMSSettingsBaseUI()
       
    79     {
       
    80     IMUM_CONTEXT( CIMSSettingsBaseUI::~CIMSSettingsBaseUI, 0, KLogUi );
       
    81 
       
    82     delete iNoteUi;
       
    83     delete iItemApprover;
       
    84     delete iDefaultData;
       
    85     }
       
    86 
       
    87 // ----------------------------------------------------------------------------
       
    88 // CIMSSettingsBaseUI::BaseUiConstructL()
       
    89 // ----------------------------------------------------------------------------
       
    90 //
       
    91 void CIMSSettingsBaseUI::BaseUiConstructL(
       
    92     CEikButtonGroupContainer& aSoftkeys,
       
    93     const TInt aSettingResourceId,
       
    94     const TBool aUpdateMSK )
       
    95     {
       
    96     IMUM_CONTEXT( CIMSSettingsBaseUI::BaseUiConstructL, 0, KLogUi );
       
    97 
       
    98     // Add the complete menu tree to settings
       
    99     SettingsConstructL(
       
   100         aSoftkeys, aSettingResourceId, aUpdateMSK,
       
   101         iBaseUiFlags.GF( EMailFeatureIdSapPolicyManagement ) );
       
   102 
       
   103     iNoteUi = CIMSSettingsNoteUi::NewL( iMailboxApi, *this );
       
   104 
       
   105     iItemApprover =
       
   106         ( CIMSSettingsItemApprover::NewL(
       
   107           iMailboxApi, iMailboxApi.CommDbUtilsL(),
       
   108           *iNoteUi, *this ) );
       
   109 
       
   110     // Define default data
       
   111     iDefaultData = RestoreDefaultSettingsDataL();
       
   112     }
       
   113 
       
   114 /******************************************************************************
       
   115 
       
   116     Event Handling
       
   117 
       
   118 ******************************************************************************/
       
   119 
       
   120 // ----------------------------------------------------------------------------
       
   121 // CIMSSettingsBaseUI::HandleSettingPageEventL()
       
   122 // ----------------------------------------------------------------------------
       
   123 //
       
   124 void CIMSSettingsBaseUI::HandleSettingPageEventL(
       
   125     CAknSettingPage* /* aSettingPage */,
       
   126     TAknSettingPageEvent /* aEventType */ )
       
   127     {
       
   128     IMUM_CONTEXT( CIMSSettingsBaseUI::HandleSettingPageEventL, 0, KLogUi );
       
   129 
       
   130     }
       
   131 
       
   132 // ----------------------------------------------------------------------------
       
   133 // CIMSSettingsBaseUI::EventHandlerL()
       
   134 // ----------------------------------------------------------------------------
       
   135 //
       
   136 TBool CIMSSettingsBaseUI::EventHandlerL( const TInt aCommandId )
       
   137     {
       
   138     IMUM_CONTEXT( CIMSSettingsBaseUI::EventHandlerL, 0, KLogUi );
       
   139     IMUM_IN();
       
   140 
       
   141     TBool ok = ETrue;
       
   142 
       
   143     switch ( aCommandId )
       
   144         {
       
   145         // Show help dialog
       
   146         case EAknCmdHelp:
       
   147             iDialog.LaunchHelp();
       
   148             break;
       
   149 
       
   150         // User has pressed ok key
       
   151         case EAknSoftkeyOpen:
       
   152         case EAknSoftkeySelect:
       
   153         case EAknSoftkeyOk:
       
   154             KeyPressOKButtonL( aCommandId );
       
   155             break;
       
   156 
       
   157         case EAknSoftkeyOptions:
       
   158             SetFlag( EImumSettingOpenOptionsMenu );
       
   159             break;
       
   160 
       
   161         case EAknSoftkeyShow:
       
   162         case EAknSoftkeyDone:
       
   163         case EAknSoftkeyBack:
       
   164             KeyPressSoftkey( aCommandId );
       
   165             break;
       
   166 
       
   167         // Emergency exit
       
   168         case EAknSoftkeyCancel:
       
   169         case EAknCmdExit:
       
   170             SetFlag( EImumSettingShouldExit );
       
   171             break;
       
   172 
       
   173         default:
       
   174             ok = EFalse;
       
   175             break;
       
   176         }
       
   177 
       
   178     IMUM_OUT();
       
   179     return ok;
       
   180     }
       
   181 
       
   182 // ----------------------------------------------------------------------------
       
   183 // CIMSSettingsBaseUI::DoQuitL()
       
   184 // ----------------------------------------------------------------------------
       
   185 //
       
   186 void CIMSSettingsBaseUI::DoQuitL()
       
   187     {
       
   188     IMUM_CONTEXT( CIMSSettingsBaseUI::DoQuitL, 0, KLogUi );
       
   189 
       
   190     ChangeFlag( EImumSettingQueryClose, !Flag( EImumSettingShouldExit ) );
       
   191     iDialog.DoQuitL();
       
   192     }
       
   193 
       
   194 // ----------------------------------------------------------------------------
       
   195 // CIMSSettingsBaseUI::OfferKeyEventL
       
   196 // ----------------------------------------------------------------------------
       
   197 //
       
   198 TKeyResponse CIMSSettingsBaseUI::OfferKeyEventL(
       
   199     const TKeyEvent& aKeyEvent,
       
   200     TEventCode aType )
       
   201     {
       
   202     IMUM_CONTEXT( CIMSSettingsBaseUI::OfferKeyEventL, 0, KLogUi );
       
   203     IMUM_IN();
       
   204 
       
   205     TBool ok = EFalse;
       
   206 
       
   207     // Handle the key events for wizard
       
   208     if ( aType == EEventKey )
       
   209         {
       
   210         switch ( aKeyEvent.iCode )
       
   211             {
       
   212             // Ignore left and right keys
       
   213             case EKeyLeftArrow:
       
   214             case EKeyRightArrow:
       
   215                 ok = ETrue;
       
   216                 break;
       
   217 
       
   218             // Selection key
       
   219             case EKeyOK:
       
   220             case EKeyEnter:
       
   221                 ok = EventHandlerL( EAknSoftkeyOk );
       
   222                 break;
       
   223 
       
   224             // Red button
       
   225             case EKeyPhoneEnd:
       
   226                 ok = EventHandlerL( EAknSoftkeyCancel );
       
   227                 break;
       
   228 
       
   229             default:
       
   230                 break;
       
   231             }
       
   232         }
       
   233 
       
   234     TKeyResponse ret = ok ? EKeyWasConsumed : EKeyWasNotConsumed;
       
   235 
       
   236     if ( ret == EKeyWasNotConsumed )
       
   237         {
       
   238         ret = CMuiuDynamicSettingsDialog::OfferKeyEventL( aKeyEvent, aType );
       
   239         }
       
   240 
       
   241     IMUM_OUT();
       
   242     return ret;
       
   243     }
       
   244 
       
   245 
       
   246 // ----------------------------------------------------------------------------
       
   247 // CIMSSettingsBaseUI::ProcessCommandL
       
   248 // ----------------------------------------------------------------------------
       
   249 //
       
   250 void CIMSSettingsBaseUI::ProcessCommandL( TInt aCommandId )
       
   251     {
       
   252     IMUM_CONTEXT( CIMSSettingsBaseUI::ProcessCommandL, 0, KLogUi );
       
   253 
       
   254     EventHandlerL( aCommandId );
       
   255     // There are no key events if touch UI is used. Therefore requested commands
       
   256     // are executed here.
       
   257     iDialog.ExecFlags();
       
   258     }
       
   259 
       
   260 /******************************************************************************
       
   261 
       
   262     Private tools
       
   263 
       
   264 ******************************************************************************/
       
   265 
       
   266 // ----------------------------------------------------------------------------
       
   267 // CIMSSettingsBaseUI::RestoreDefaultSettingsDataL()
       
   268 // ----------------------------------------------------------------------------
       
   269 //
       
   270 CImumMboxDefaultData* CIMSSettingsBaseUI::RestoreDefaultSettingsDataL()
       
   271     {
       
   272     return CImumMboxDefaultData::NewL( iMailboxApi );
       
   273     }
       
   274 
       
   275 /******************************************************************************
       
   276 
       
   277     Public tools
       
   278 
       
   279 ******************************************************************************/
       
   280 
       
   281 // ----------------------------------------------------------------------------
       
   282 // CIMSSettingsBaseUI::HidePermanently()
       
   283 // ----------------------------------------------------------------------------
       
   284 //
       
   285 void CIMSSettingsBaseUI::HidePermanently(
       
   286     const TUid& aId,
       
   287     const TBool aNewState )
       
   288     {
       
   289     IMUM_CONTEXT( CIMSSettingsBaseUI::HidePermanently, 0, KLogUi );
       
   290 
       
   291     // Set next item
       
   292     HidePermanently( *GetItem( aId ), aNewState );
       
   293     }
       
   294 
       
   295 // ----------------------------------------------------------------------------
       
   296 // CIMSSettingsBaseUI::HidePermanently()
       
   297 // ----------------------------------------------------------------------------
       
   298 //
       
   299 void CIMSSettingsBaseUI::HidePermanently(
       
   300     CMuiuSettingBase& aBaseItem,
       
   301     const TBool aNewState )
       
   302     {
       
   303     IMUM_CONTEXT( CIMSSettingsBaseUI::HidePermanently, 0, KLogUi );
       
   304 
       
   305     // Set next item
       
   306     aBaseItem.iItemFlags.ChangeFlag(
       
   307         EMuiuDynItemPermanentlyHidden, aNewState );
       
   308     Refresh();
       
   309     }
       
   310 
       
   311 // ----------------------------------------------------------------------------
       
   312 // CIMSSettingsBaseUI::CreateCustomItemToArrayLC()
       
   313 // ----------------------------------------------------------------------------
       
   314 //
       
   315 CMuiuSettingBase* CIMSSettingsBaseUI::CreateCustomItemToArrayLC(
       
   316     const TUid& aId )
       
   317     {
       
   318     IMUM_CONTEXT( CIMSSettingsBaseUI::CreateCustomItemToArrayLC, 0, KLogUi );
       
   319 
       
   320     CMuiuSettingBase* base = NULL;
       
   321 
       
   322     switch ( aId.iUid )
       
   323         {
       
   324         // Access point editors require special items
       
   325         case EIMAWIap:
       
   326         case EIMASIncomingIap:
       
   327         case EIMASOutgoingIap:
       
   328             base = CIMSSettingsAccessPointItem::NewLC();
       
   329             break;
       
   330 
       
   331         case EIMASUserFolderSubscription:
       
   332             base = CMuiuSettingsLinkExtended::NewLC();
       
   333             break;
       
   334 
       
   335         default:
       
   336             break;
       
   337         }
       
   338 
       
   339     return base;
       
   340     }
       
   341 
       
   342 
       
   343 // ----------------------------------------------------------------------------
       
   344 // CIMSSettingsBaseUI::SetItemIapItem()
       
   345 // ----------------------------------------------------------------------------
       
   346 //
       
   347 void CIMSSettingsBaseUI::SetItemIapItemL( CIMSSettingsAccessPointItem& aIapItem )
       
   348     {
       
   349     IMUM_CONTEXT( CIMSSettingsBaseUI::SetItemIapItemL, 0, KLogUi );
       
   350 
       
   351     CMsvCommDbUtilities& commdbUtils= iMailboxApi.CommDbUtilsL();
       
   352     commdbUtils.GetWizardRadioButton( aIapItem );
       
   353     }
       
   354 
       
   355 // ----------------------------------------------------------------------------
       
   356 // CIMSSettingsBaseUI::Flag()
       
   357 // ----------------------------------------------------------------------------
       
   358 //
       
   359 TBool CIMSSettingsBaseUI::Flag( TUint aFlag )
       
   360     {
       
   361     return iBaseUiFlags.Flag( aFlag );
       
   362     }
       
   363 
       
   364 // ----------------------------------------------------------------------------
       
   365 // CIMSSettingsBaseUI::SetFlag()
       
   366 // ----------------------------------------------------------------------------
       
   367 //
       
   368 void CIMSSettingsBaseUI::SetFlag( TUint aFlag )
       
   369     {
       
   370     IMUM_CONTEXT( CIMSSettingsBaseUI::SetFlag, 0, KLogUi );
       
   371 
       
   372     iBaseUiFlags.SetFlag( aFlag );
       
   373     }
       
   374 
       
   375 // ----------------------------------------------------------------------------
       
   376 // CIMSSettingsBaseUI::ClearFlag()
       
   377 // ----------------------------------------------------------------------------
       
   378 //
       
   379 void CIMSSettingsBaseUI::ClearFlag( TUint aFlag )
       
   380     {
       
   381     IMUM_CONTEXT( CIMSSettingsBaseUI::ClearFlag, 0, KLogUi );
       
   382 
       
   383     iBaseUiFlags.ClearFlag( aFlag );
       
   384     }
       
   385 
       
   386 // ----------------------------------------------------------------------------
       
   387 // CIMSSettingsBaseUI::ChangeFlag()
       
   388 // ----------------------------------------------------------------------------
       
   389 //
       
   390 void CIMSSettingsBaseUI::ChangeFlag(
       
   391     TUint aFlag,
       
   392     TBool aNewState )
       
   393     {
       
   394     IMUM_CONTEXT( CIMSSettingsBaseUI::ChangeFlag, 0, KLogUi );
       
   395 
       
   396     iBaseUiFlags.ChangeFlag( aFlag, aNewState );
       
   397     }
       
   398 
       
   399 // ----------------------------------------------------------------------------
       
   400 // CIMSSettingsBaseUI::Flags()
       
   401 // ----------------------------------------------------------------------------
       
   402 //
       
   403 const CMuiuFlags& CIMSSettingsBaseUI::Flags()
       
   404     {
       
   405     IMUM_CONTEXT( CIMSSettingsBaseUI::Flags, 0, KLogUi );
       
   406 
       
   407     return iBaseUiFlags;
       
   408     }
       
   409 
       
   410 // ----------------------------------------------------------------------------
       
   411 // CIMSSettingsBaseUI::FindItem()
       
   412 // ----------------------------------------------------------------------------
       
   413 //
       
   414 TInt CIMSSettingsBaseUI::FindItem(
       
   415     CIMSSettingsAccessPointItem*& aItem,
       
   416     const TUid& aId )
       
   417     {
       
   418     IMUM_CONTEXT( CIMSSettingsBaseUI::FindItem, 0, KLogUi );
       
   419 
       
   420     CMuiuSettingBase* base = GetUninitializedItem( aId );
       
   421 
       
   422     if ( base != NULL )
       
   423         {
       
   424         aItem = static_cast<CIMSSettingsAccessPointItem*>( base );
       
   425         return KErrNone;
       
   426         }
       
   427 
       
   428     return KErrNotFound;
       
   429     }
       
   430 
       
   431 
       
   432 // ----------------------------------------------------------------------------
       
   433 // CIMSSettingsBaseUI::FindItem()
       
   434 // ----------------------------------------------------------------------------
       
   435 //
       
   436 TInt CIMSSettingsBaseUI::FindItem(
       
   437     CMuiuSettingsLinkExtended*& aItem,
       
   438     const TUid& aId )
       
   439     {
       
   440     IMUM_CONTEXT( CIMSSettingsBaseUI::FindItem, 0, KLogUi );
       
   441 
       
   442     CMuiuSettingBase* base = GetUninitializedItem( aId );
       
   443 
       
   444     if ( base != NULL )
       
   445         {
       
   446         aItem = static_cast<CMuiuSettingsLinkExtended*>( base );
       
   447         return KErrNone;
       
   448         }
       
   449 
       
   450     return KErrNotFound;
       
   451     }
       
   452 
       
   453 // ----------------------------------------------------------------------------
       
   454 // CIMSSettingsBaseUI::GetUninitializedItem()
       
   455 // ----------------------------------------------------------------------------
       
   456 //
       
   457 CMuiuSettingBase* CIMSSettingsBaseUI::GetUninitializedItem(
       
   458     const TUid& aId )
       
   459     {
       
   460     IMUM_CONTEXT( CIMSSettingsBaseUI::GetUninitializedItem, 0, KLogUi );
       
   461 
       
   462     return GetItem( aId );
       
   463     }
       
   464 
       
   465 // ----------------------------------------------------------------------------
       
   466 // CIMSSettingsBaseUI::BackupItemCreateUndefinedL()
       
   467 // ----------------------------------------------------------------------------
       
   468 //
       
   469 CMuiuSettingBase* CIMSSettingsBaseUI::CreateItemForBackupL(
       
   470     CMuiuSettingBase& aBaseItem )
       
   471     {
       
   472     IMUM_CONTEXT( CIMSSettingsBaseUI::CreateItemForBackupL, 0, KLogUi );
       
   473 
       
   474     CIMSSettingsAccessPointItem* iapBackup = NULL;
       
   475 
       
   476     if ( aBaseItem.iItemId.iUid == EIMAWIap )
       
   477         {
       
   478         iapBackup =
       
   479             CIMSSettingsAccessPointItem::NewL();
       
   480 
       
   481         CIMSSettingsAccessPointItem* iapItem =
       
   482             static_cast<CIMSSettingsAccessPointItem*>( &aBaseItem );
       
   483 
       
   484         *iapBackup = *iapItem;
       
   485         }
       
   486 
       
   487     return iapBackup;
       
   488     }
       
   489 
       
   490 // ----------------------------------------------------------------------------
       
   491 // CIMSSettingsBaseUI::UpdateAccessPointItem()
       
   492 // ----------------------------------------------------------------------------
       
   493 //
       
   494 void CIMSSettingsBaseUI::UpdateAccessPointItem(
       
   495     CMuiuSettingBase& aBaseItem )
       
   496     {
       
   497     IMUM_CONTEXT( CIMSSettingsBaseUI::UpdateAccessPointItem, 0, KLogUi );
       
   498 
       
   499     // Preprocessing for item is only need for iap accesspoint setting
       
   500     CIMSSettingsAccessPointItem* iapItem =
       
   501         static_cast<CIMSSettingsAccessPointItem*>( &aBaseItem );
       
   502 
       
   503     // Copy the text to the item, ignore any errors on copy
       
   504     TRAP_IGNORE(
       
   505         iMailboxApi.CommDbUtilsL().SettingsItemIapStringL( *iapItem ) );
       
   506     }
       
   507 
       
   508 // ----------------------------------------------------------------------------
       
   509 // CIMSSettingsBaseUI::SetReadOnly()
       
   510 // ----------------------------------------------------------------------------
       
   511 //
       
   512 void CIMSSettingsBaseUI::SetReadOnly(
       
   513     const TUid& aId,
       
   514     const TBool aNewState )
       
   515     {
       
   516     IMUM_CONTEXT( CIMSSettingsBaseUI::SetReadOnly, 0, KLogUi );
       
   517 
       
   518     GetItem( aId )->iItemFlags.ChangeFlag( EMuiuDynItemReadOnly, aNewState );
       
   519     }
       
   520 
       
   521 
       
   522 // ----------------------------------------------------------------------------
       
   523 // CIMSSettingsBaseUI::GetHelpContext()
       
   524 // ----------------------------------------------------------------------------
       
   525 //
       
   526 void CIMSSettingsBaseUI::GetHelpContext(
       
   527     TCoeHelpContext& /* aContext */ ) const
       
   528     {
       
   529     IMUM_CONTEXT( CIMSSettingsBaseUI::GetHelpContext, 0, KLogUi );
       
   530 
       
   531     // Empty
       
   532     }
       
   533 
       
   534 // ---------------------------------------------------------------------------
       
   535 // CIMSSettingsBaseUI::CurrentMailboxId()
       
   536 // ---------------------------------------------------------------------------
       
   537 //
       
   538 TMsvId CIMSSettingsBaseUI::CurrentMailboxId()
       
   539     {
       
   540     IMUM_CONTEXT( CIMSSettingsBaseUI::CurrentMailboxId, 0, KLogUi );
       
   541 
       
   542     return KErrNotFound;
       
   543     }
       
   544 
       
   545 
       
   546 //  End of File