diff -r 8466d47a6819 -r 12c456ceeff2 emailuis/emailui/src/FreestyleEmailUiLauncherGridVisualiser.cpp --- a/emailuis/emailui/src/FreestyleEmailUiLauncherGridVisualiser.cpp Thu Dec 17 08:39:21 2009 +0200 +++ b/emailuis/emailui/src/FreestyleEmailUiLauncherGridVisualiser.cpp Thu Jan 07 12:38:38 2010 +0200 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). * All rights reserved. * This component and the accompanying materials are made available * under the terms of "Eclipse Public License v1.0" @@ -27,25 +27,21 @@ #include #include #include -// SF path changes #include #include #include #include -// -#include +#include #include #include -// +#include #include "CFSMailMessage.h" #include #include "CFSMailBox.h" #include "CFSMailClient.h" -// #include #include #include -// #include #include #include @@ -53,16 +49,13 @@ #include #include "fsalfscrollbarlayout.h" #include -// #include -// #include -// Use layout data instead of hard-coded values +#include #include #include #include -// // INTERNAL INCLUDE FILES #include "FSEmailBuildFlags.h" @@ -88,14 +81,12 @@ const TInt KStartupAnimationTime = 0; const TReal KScaleSelected = 1.0; const TReal KScaleNotSelected = 0.77; -// Use layout data instead of hard-coded values -// CFSEmailUiLauncherGridVisualiser* CFSEmailUiLauncherGridVisualiser::NewL(CAlfEnv& aEnv, - CFSEmailUiLauncherGrid* aControl, + CFSEmailUiLauncherGrid* aControl, CFreestyleEmailUiAppUi* aAppUi, - CAlfControlGroup& aControlGroup, + CAlfControlGroup& aControlGroup, TInt aColumns, TInt aRows) { FUNC_LOG; @@ -104,10 +95,10 @@ return self; } -CFSEmailUiLauncherGridVisualiser* CFSEmailUiLauncherGridVisualiser::NewLC(CAlfEnv& aEnv, - CFSEmailUiLauncherGrid* aControl, +CFSEmailUiLauncherGridVisualiser* CFSEmailUiLauncherGridVisualiser::NewLC(CAlfEnv& aEnv, + CFSEmailUiLauncherGrid* aControl, CFreestyleEmailUiAppUi* aAppUi, - CAlfControlGroup& aControlGroup, + CAlfControlGroup& aControlGroup, TInt aColumns, TInt aRows) { FUNC_LOG; @@ -117,12 +108,12 @@ return self; } -CFSEmailUiLauncherGridVisualiser::CFSEmailUiLauncherGridVisualiser(CAlfEnv& aEnv, - CFSEmailUiLauncherGrid* aControl, +CFSEmailUiLauncherGridVisualiser::CFSEmailUiLauncherGridVisualiser(CAlfEnv& aEnv, + CFSEmailUiLauncherGrid* aControl, CFreestyleEmailUiAppUi* aAppUi, CAlfControlGroup& aControlGroup) : CFsEmailUiViewBase(aControlGroup, *aAppUi), - iEnv( aEnv ), + iEnv( aEnv ), iVisibleRows( 0 ), iVisibleColumns( 0 ), iRowCount( 0 ), @@ -149,84 +140,100 @@ iConstructionCompleted = EFalse; iDoubleClickLock = EFalse; iUiOperationLaunched = EFalse; - + iMailboxDeleter = CFSEmailUiMailboxDeleter::NewL( *iAppUi.GetMailClient(), *this ); } +// ---------------------------------------------------------------------------- // CFSEmailUiLauncherGridVisualiser::DoFirstStartL() -// Purpose of this function is to do first start only when grid is -// really needed to be shown. Implemented to make app startuo faster. +// Purpose of this function is to do first start only when grid is really +// needed to be shown. Implemented to make app startup faster. +// ---------------------------------------------------------------------------- +// void CFSEmailUiLauncherGridVisualiser::DoFirstStartL() { FUNC_LOG; iPluginIdIconIdPairs.Reset(); -// Use layout data instead of hard-coded values TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); - + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, + mainPaneRect ); + TAknLayoutRect scrollBarRect; - scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); + scrollBarRect.LayoutRect( mainPaneRect, + AknLayoutScalable_Avkon::aid_size_touch_scroll_bar() ); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - iVisibleRows = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits(var).LastRow() + 1; - iVisibleColumns = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits(var).LastColumn() + 1; -// - + iVisibleRows = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits( var ).LastRow() + 1; + iVisibleColumns = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits( var ).LastColumn() + 1; + iStartupAnimation = ETrue; iCurrentLevel.iSelected = KDefaultSelection; CAlfTextureManager& manager = iEnv.TextureManager(); - iParentLayout = CAlfDeckLayout::AddNewL(*iControl); - iParentLayout->SetFlags(EAlfVisualFlagLayoutUpdateNotification); + iParentLayout = CAlfDeckLayout::AddNewL( *iControl ); + iParentLayout->SetFlags( EAlfVisualFlagLayoutUpdateNotification ); // Widget layout divides the screen between grid and scroll bar iWidgetLayout = CAlfAnchorLayout::AddNewL( *iControl, iParentLayout ); - // - TSize displaySize = mainPaneRect.Size(); //iControl->DisplayArea().Size(); - // + TSize displaySize = mainPaneRect.Size(); iWidgetLayout->SetSize( displaySize ); - + // Constructed here, updated later, #0 item in iWidgetLayout ConstructScrollbarL( iWidgetLayout ); - // Grid layout is constructed here, #1 item in iWidgetLayout - iCurrentLevel.iGridLayout = CAlfGridLayout::AddNewL( *iControl, iVisibleColumns, iVisibleRows, iWidgetLayout ); + // Grid layout is constructed here, #1 item in iWidgetLayout + iCurrentLevel.iGridLayout = + CAlfGridLayout::AddNewL( *iControl, iVisibleColumns, iVisibleRows, + iWidgetLayout ); iCurrentLevel.iGridLayout->EnableScrollingL( ETrue ); iCurrentLevel.iGridLayout->SetFlags( EAlfVisualFlagAutomaticLocaleMirroringEnabled ); - + // Selector is added to iGridLayout - iSelector = iControl->AppendLayoutL( EAlfLayoutTypeLayout, iCurrentLevel.iGridLayout ); + iSelector = iControl->AppendLayoutL( EAlfLayoutTypeLayout, + iCurrentLevel.iGridLayout ); iSelector->SetFlags( EAlfVisualFlagManualLayout ); - - iRingMovementXFunc = CAlfTableMappingFunction::NewL(iEnv); - iRingMovementYFunc = CAlfTableMappingFunction::NewL(iEnv); + + iRingMovementXFunc = CAlfTableMappingFunction::NewL( iEnv ); + iRingMovementYFunc = CAlfTableMappingFunction::NewL( iEnv ); TAlfTimedPoint selectorPos = iSelector->Pos(); selectorPos.iX.SetMappingFunctionIdentifier( iRingMovementXFunc->MappingFunctionIdentifier() ); - selectorPos.iY.SetMappingFunctionIdentifier( iRingMovementYFunc->MappingFunctionIdentifier() ); + selectorPos.iY.SetMappingFunctionIdentifier( iRingMovementYFunc->MappingFunctionIdentifier() ); iSelector->SetPos( selectorPos ); - + UpdateFocusVisibility(); iSelectorImageVisual = CAlfImageVisual::AddNewL( *iControl, iSelector ); iSelectorImageVisual->SetScaleMode( CAlfImageVisual::EScaleFit ); -// Use layout data instead of hard-coded values + + // Use layout data instead of hard-coded values iSelectorImageVisual->SetSize( iAppUi.LayoutHandler()->SelectorVisualSizeInThisResolution() ); TAknLayoutRect itemRect; - itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var,0,0)); + itemRect.LayoutRect( gridRect, + AknLayoutScalable_Apps::cell_cmail_l_pane( var, 0, 0 ) ); iSelectorImageVisual->SetSize( itemRect.Rect().Size() ); -// - iSelectorImageVisual->EnableBrushesL(); CAlfFrameBrush* brush = iAppUi.FsTextureManager()->GridSelectorBrushL(); iSelectorImageVisual->Brushes()->AppendL( brush, EAlfDoesNotHaveOwnership ); iStartupEffectStyle = EFalse; - + iAiwSHandler = CAiwServiceHandler::NewL(); iAiwSHandler->AttachL( R_AIW_INTEREST_LAUNCH_SETUP_WIZARD ); + if( !iStylusPopUpMenu ) + { + // Construct the long tap pop-up menu. + TPoint point( 0, 0 ); + iStylusPopUpMenu = CAknStylusPopUpMenu::NewL( this , point ); + TResourceReader reader; + iCoeEnv->CreateResourceReaderLC( reader, + R_STYLUS_POPUP_MENU_LAUNCHER_GRID_VIEW ); + iStylusPopUpMenu->ConstructFromResourceL( reader ); + CleanupStack::PopAndDestroy(); // reader + } + // Initial visual layout update is done when the view gets activated. iRefreshNeeded = ETrue; @@ -246,7 +253,7 @@ iItemIdInButtonDownEvent.iLaunchSelection = EFalse; UpdateFocusVisibility(); - + if( !IsFocusShown() ) { // No items are focused anymore. Shrink the icon. @@ -296,18 +303,17 @@ delete iRingMovementYFunc; delete iModel; delete iAiwSHandler; - // delete iScrollbar; - // delete iMailboxDeleter; + delete iStylusPopUpMenu; } void CFSEmailUiLauncherGridVisualiser::CreateModelL() { FUNC_LOG; - + RArray itemInModel; - CleanupClosePushL( itemInModel ); + CleanupClosePushL( itemInModel ); iIconArray.Reset(); iPluginTextureId = EGridPluginIconFirst; @@ -316,7 +322,7 @@ delete iModel; iModel = NULL; iModel = new (ELeave) CFSEmailUiLauncherGridModel(); - iModel->ConstructL(); + iModel->ConstructL(); CAlfTexture* iconTexture = 0; // Get item ordering from resources @@ -333,24 +339,24 @@ TInt count = reader.ReadInt16(); -// Use layout data instead of hard-coded values +// Use layout data instead of hard-coded values TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var,0,0)); - + TAknLayoutRect gridIconLRect; gridIconLRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); TSize iconSize = gridIconLRect.Rect().Size(); // - + for ( TInt itemIndex = 0; itemIndex < count; itemIndex++ ) { TInt itemId = reader.ReadInt16(); @@ -358,10 +364,10 @@ { case EDefaultMailboxItem: { - + RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); @@ -370,13 +376,13 @@ { // Try to get branded graphic CGulIcon* mbIcon(0); - TRAPD( err, mbIcon = brandManager.GetGraphicL( EFSMailboxIcon, mailBoxes[0]->GetId() ) ); + TRAPD( err, mbIcon = brandManager.GetGraphicL( EFSMailboxIcon, mailBoxes[0]->GetId() ) ); if ( err == KErrNone && mbIcon ) { CleanupStack::PushL( mbIcon ); AknIconUtils::SetSize(mbIcon->Bitmap(), iconSize); - AknIconUtils::SetSize(mbIcon->Mask(), iconSize); - + AknIconUtils::SetSize(mbIcon->Mask(), iconSize); + // Create texture into TextureManager, If not already existing // Note: size(0,0) means original icon size iAppUi.FsTextureManager()->CreateBrandedMailboxTexture( mbIcon, @@ -390,10 +396,10 @@ CleanupStack::PopAndDestroy( mbIcon ); } - else + else { - iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridInboxTexture ); - } + iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridInboxTexture ); + } iIconArray.AppendL( iconTexture ); @@ -405,8 +411,8 @@ mailBoxes[0]->GetName(), *iconTexture, mailBoxes[0]->GetId(), - mailBoxes[0]->GetStandardFolderId( EFSInbox ) ); - + mailBoxes[0]->GetStandardFolderId( EFSInbox ) ); + iAppUi.SubscribeMailboxL( mailBoxes[0]->GetId() ); } @@ -417,22 +423,22 @@ { RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); - + for ( TInt i = 1; i < mailBoxes.Count(); i++ ) { // Try to get branded graphic CGulIcon* mbIcon(0); - TRAPD( err, mbIcon = brandManager.GetGraphicL( EFSMailboxIcon, mailBoxes[i]->GetId() ) ); + TRAPD( err, mbIcon = brandManager.GetGraphicL( EFSMailboxIcon, mailBoxes[i]->GetId() ) ); if ( err == KErrNone && mbIcon ) { CleanupStack::PushL( mbIcon ); AknIconUtils::SetSize(mbIcon->Bitmap(), iconSize); - AknIconUtils::SetSize(mbIcon->Mask(), iconSize); - + AknIconUtils::SetSize(mbIcon->Mask(), iconSize); + // Create texture into TextureManager, If not already existing iAppUi.FsTextureManager()->CreateBrandedMailboxTexture( mbIcon, mailBoxes[i]->GetId().PluginId(), @@ -444,11 +450,11 @@ TSize(0,0)); CleanupStack::PopAndDestroy( mbIcon ); } - else + else { - iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridInboxTexture ); + iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridInboxTexture ); } - iIconArray.AppendL( iconTexture ); + iIconArray.AppendL( iconTexture ); // Branded mailbox name is nowadays set in new mailbox event // handling, so we don't need to use brand manager here anymore. iModel->AddL( @@ -458,10 +464,10 @@ *iconTexture, mailBoxes[i]->GetId(), mailBoxes[i]->GetStandardFolderId( EFSInbox ) ); - + iAppUi.SubscribeMailboxL( mailBoxes[i]->GetId() ); } - + CleanupStack::PopAndDestroy( &mailBoxes ); } break; @@ -469,11 +475,11 @@ { RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); - + for ( TInt i = 0; i < mailBoxes.Count(); i++ ) { if ( TFsEmailUiUtility::IsRemoteLookupSupported( *mailBoxes[i] ) ) @@ -496,7 +502,7 @@ iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridSettingsTexture ); iModel->AddL(EShortcut, ESettingsItem, *text, *iconTexture ); CleanupStack::PopAndDestroy( text ); - iIconArray.AppendL( iconTexture ); + iIconArray.AppendL( iconTexture ); } break; case EAddNewMailboxItem: @@ -505,19 +511,19 @@ iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridAddNewBoxTexture ); iModel->AddL(EShortcut, EAddNewMailboxItem, *text, *iconTexture ); CleanupStack::PopAndDestroy( text ); - iIconArray.AppendL( iconTexture ); + iIconArray.AppendL( iconTexture ); } break; case EHelpItem: { - // remove help support in pf5250 + // remove help support in pf5250 if (! FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) ) { HBufC* text = StringLoader::LoadLC( R_FREESTYLE_EMAIL_UI_GRIDITEM_HELP ); iconTexture = &iAppUi.FsTextureManager()->TextureByIndex( EGridHelpTexture ); iModel->AddL(EShortcut, EHelpItem, *text, *iconTexture ); CleanupStack::PopAndDestroy( text ); - iIconArray.AppendL( iconTexture ); + iIconArray.AppendL( iconTexture ); } } break; @@ -533,7 +539,7 @@ if ( iLauncherItems[i]->Id() == itemId ) { itemInModel[i] = ETrue; - AddItemToModelL( iLauncherItems[i], i ); + AddItemToModelL( iLauncherItems[i], i ); break; } } @@ -554,7 +560,7 @@ AddItemToModelL( iLauncherItems[i], i ); } } - + CleanupStack::PopAndDestroy( &itemInModel ); } @@ -585,14 +591,9 @@ TUid CFSEmailUiLauncherGridVisualiser::Id() const { FUNC_LOG; - return AppGridId; - } + return AppGridId; + } -// Toolbar -/* -void CFSEmailUiLauncherGridVisualiser::DoActivateL(const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage)*/ void CFSEmailUiLauncherGridVisualiser::ChildDoActivateL(const TVwsViewId& aPrevViewId, TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) @@ -602,7 +603,12 @@ { DoFirstStartL(); } - + + if( iAppUi.CurrentFixedToolbar() ) + { + iAppUi.CurrentFixedToolbar()->SetToolbarVisibility( EFalse ); + } + // For initial mailbox query TBool startedFromOds = EFalse; // NULL wizard started parameter every time when activated again. @@ -634,7 +640,7 @@ { iAppUi.EnterFsEmailViewL( iAppUi.CurrentActiveView()->Id() ); } - + return; } @@ -651,23 +657,23 @@ } SetDefaultStatusPaneTextL(); - + // Mailbox query is called here but shown only once in appui if needed // doNotshowQuery is ETrue when started from wizard if ( !iFirstStartComplete ) { iFirstStartComplete = ETrue; iAppUi.GridStarted( startedFromOds ); - iAppUi.ShowMailboxQueryL(); + iAppUi.ShowMailboxQueryL(); } - // + // else { // Ensure that FSMailServer is running, but don't do it on first // activation, as it's done anyway in AppUi's ConstructL TFsEmailUiUtility::EnsureFsMailServerIsRunning( iEikonEnv->WsSession() ); } - + if( iRowCount > iVisibleRows ) { iScrollbar->MakeVisible(ETrue); @@ -676,41 +682,38 @@ { iScrollbar->MakeVisible(EFalse); } - + iAppUi.HideTitlePaneConnectionStatus(); - + // Erase the navigation history when main grid activated. This is the default view // of the application and back navigation is never possible from here. The view stack // might be in inconsistent state because of some unexpected error in view switching. // Erasing the history helps recovering from such situations. iAppUi.EraseViewHistory(); - + FocusVisibilityChange( iAppUi.IsFocusShown() ); UpdateFocusVisibility(); } -// Toolbar void CFSEmailUiLauncherGridVisualiser::ChildDoDeactivate() { FUNC_LOG; iScrollbar->MakeVisible(EFalse); - // } - void CFSEmailUiLauncherGridVisualiser::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) { FUNC_LOG; - + if ( aResourceId == R_FSEMAILUI_MAINUIGRID_MENUPANE ) { if ( FeatureManager::FeatureSupported( KFeatureIdFfCmailIntegration ) ) { // remove help support in pf5250 - aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue); + aMenuPane->SetItemDimmed( EFsEmailUiCmdHelp, ETrue); } - + TFSLauncherGridMailboxStatus mbStatus = CheckMailboxStatusL(); - + // Checks if a device has a keyboard or not. if( !iKeyboardFlipOpen ) { @@ -719,7 +722,7 @@ // If no mailboxes configured, dim all mailbox related items. aMenuPane->SetItemDimmed( EFsEmailUiCmdDeleteMailbox, ETrue ); } - + aMenuPane->SetItemDimmed( EFsEmailUiCmdOpen, ETrue ); aMenuPane->SetItemDimmed( EFsEmailUiCmdSync, ETrue ); aMenuPane->SetItemDimmed( EFsEmailUiCmdSyncAll, ETrue ); @@ -732,15 +735,15 @@ } else { - // - aMenuPane->SetItemDimmed( EFsEmailUiCmdAbout, ETrue ); + // + aMenuPane->SetItemDimmed( EFsEmailUiCmdAbout, ETrue ); // - + if( mbStatus.iMailboxCount <= 0 ) { // If no mailboxes configured, dimm all mailbox related items aMenuPane->SetItemDimmed( EFsEmailUiCmdDeleteMailbox, ETrue ); - aMenuPane->SetItemDimmed( EFsEmailUiCmdCancelSync, ETrue); + aMenuPane->SetItemDimmed( EFsEmailUiCmdCancelSync, ETrue); aMenuPane->SetItemDimmed( EFsEmailUiCmdSync, ETrue ); aMenuPane->SetItemDimmed( EFsEmailUiCmdSyncAll, ETrue ); aMenuPane->SetItemDimmed( EFsEmailUiCmdGoOnline, ETrue ); @@ -756,7 +759,7 @@ // All mailboxes are already not syncing aMenuPane->SetItemDimmed( EFsEmailUiCmdCancelSync, ETrue ); } - + // Handle items related to sync starting if( mbStatus.iMailboxesSyncing == mbStatus.iMailboxCount ) { @@ -774,7 +777,7 @@ // Several mailboxes configured, dimm "Synchronise" aMenuPane->SetItemDimmed( EFsEmailUiCmdSync, ETrue ); } - + // Handle items related to online if( mbStatus.iMailboxesOnline == mbStatus.iMailboxCount ) { @@ -792,11 +795,11 @@ // Several mailboxes configured, dimm "Connect" aMenuPane->SetItemDimmed( EFsEmailUiCmdGoOnline, ETrue ); } - + // Handle pop accounts that can't sync RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; bool onlyPop = true; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, @@ -815,7 +818,7 @@ aMenuPane->SetItemDimmed( EFsEmailUiCmdSync, ETrue ); aMenuPane->SetItemDimmed( EFsEmailUiCmdSyncAll, ETrue ); } - + CleanupStack::PopAndDestroy( &mailBoxes ); // Handle items related to offline @@ -838,58 +841,54 @@ } // Add shortcut hints - iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane, - CFSEmailUiShortcutBinding::EContextMainGrid ); + iAppUi.ShortcutBinding().AppendShortcutHintsL( *aMenuPane, + CFSEmailUiShortcutBinding::EContextMainGrid ); } } } -void CFSEmailUiLauncherGridVisualiser::HandleCommandL(TInt aCommand) +void CFSEmailUiLauncherGridVisualiser::HandleCommandL( TInt aCommand ) { FUNC_LOG; + switch ( aCommand ) { case EAknSoftkeyOpen: { - if (!iAppUi.IsTimerFocusShown()) + if( !iAppUi.IsFocusShown() ) { - int wasActive = iAppUi.StartFocusRemovalTimer(); - - if (!wasActive) - { - UpdateFocusVisibility(); - ResizeItemIcon( EFalse ); - } - + // No need to handle return value + iAppUi.SetFocusVisibility( ETrue ); + UpdateFocusVisibility(); + ResizeItemIcon( EFalse ); break; } } case EFsEmailUiCmdOpen: { SelectL(); + break; } - break; -// Hiding is disabled in Cmail -// case EFsEmailUiCmdHide: -// { -// TApaTaskList taskList( iEikonEnv->WsSession() ); -// TApaTask task = taskList.FindApp( KFSEmailUiUid ); -// if ( task.Exists() ) -// { -// task.SendToBackground(); // Send self to background -// } -// } -// break; -// case EFsEmailUiCmdDeleteMailbox: { + // Deletion by using the option menu. iMailboxDeleter->DeleteMailboxL(); break; - } + } + case EFsEmailUiCmdDeleteSelectedMailbox: + { + // Deletion by using the long tap pop-up menu. + iMailboxDeleter->DeleteMailboxL( iMailboxToDelete ); + + // Hide the focus. + iAppUi.SetFocusVisibility( EFalse ); + HandleButtonReleaseEvent(); // Finishes the focus removal. + break; + } case EFsEmailUiCmdSync: case EFsEmailUiCmdSyncAll: { - if (aCommand == EFsEmailUiCmdSyncAll) + if (aCommand == EFsEmailUiCmdSyncAll) { iAppUi.ManualMailBoxSyncAll(ETrue); } @@ -899,7 +898,7 @@ } RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); @@ -907,9 +906,7 @@ for ( TInt i = 0; i < mailBoxes.Count(); i++ ) { iAppUi.SubscribeMailboxL( mailBoxes[i]->GetId() ); - // mailBoxes[i]->GetMailBoxStatus(); - // mailBoxes[i]->RefreshNowL( iAppUi ); } @@ -920,7 +917,7 @@ { RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); @@ -938,13 +935,13 @@ case EFsEmailUiCmdGoOffline: case EFsEmailUiCmdGoOfflineAll: { - if (aCommand == EFsEmailUiCmdGoOfflineAll) + if (aCommand == EFsEmailUiCmdGoOfflineAll) { iAppUi.ManualMailBoxDisconnectAll(ETrue); } RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); @@ -961,7 +958,7 @@ case EFsEmailUiCmdGoOnline: case EFsEmailUiCmdGoOnlineAll: { - if (aCommand == EFsEmailUiCmdGoOnlineAll) + if (aCommand == EFsEmailUiCmdGoOnlineAll) { iAppUi.ManualMailBoxConnectAll(ETrue); } @@ -983,7 +980,7 @@ break; case EFsEmailUiCmdAbout: { - DisplayProductInfoL(); + DisplayProductInfoL(); } break; case EFsEmailUiCmdHelp: @@ -991,9 +988,14 @@ TFsEmailUiUtility::LaunchHelpL( KFSE_HLP_LAUNCHER_GRID ); } break; - // + case KErrCancel: + { + // The pop-up menu was closed. Hide the focus. + iAppUi.SetFocusVisibility( EFalse ); + HandleButtonReleaseEvent(); // Finishes the focus removal. + break; + } case EFsEmailUiCmdHide: - // case EEikCmdExit: case EAknSoftkeyExit: case EFsEmailUiCmdExit: @@ -1003,21 +1005,21 @@ break; default: break; - } + } // switch ( aCommand ) } - + TBool CFSEmailUiLauncherGridVisualiser::OfferEventL(const TAlfEvent& aEvent) { FUNC_LOG; if ( aEvent.IsKeyEvent() && aEvent.Code() == EEventKey ) - { + { // If wait note is being shown while a mailbox is being created, // then do not react to key presses. if ( iWizardWaitnoteShown ) { return ETrue; // key consumed } - + // Swap right and left controls in mirrored layout TInt scanCode = aEvent.KeyEvent().iScanCode; if ( AknLayoutUtils::LayoutMirrored() ) @@ -1025,17 +1027,17 @@ if (scanCode == EStdKeyRightArrow) scanCode = EStdKeyLeftArrow; else if (scanCode == EStdKeyLeftArrow ) scanCode = EStdKeyRightArrow; } - - if ((scanCode == EStdKeyRightArrow) - || (scanCode == EStdKeyLeftArrow) - || (scanCode == EStdKeyUpArrow) + + if ((scanCode == EStdKeyRightArrow) + || (scanCode == EStdKeyLeftArrow) + || (scanCode == EStdKeyUpArrow) || (scanCode == EStdKeyDownArrow) || (scanCode == EStdKeyEnter) || (scanCode == EStdKeyDeviceA) || (scanCode ==EStdKeyDevice3)) { - TBool wasActive = iAppUi.StartFocusRemovalTimer(); - if (!wasActive) + + if ( !iAppUi.SetFocusVisibility( ETrue ) ) { // focus is now activated. ignore key press. UpdateFocusVisibility(); @@ -1043,7 +1045,7 @@ return ETrue; } } - + switch(scanCode) { case EStdKeyRightArrow: @@ -1062,11 +1064,11 @@ case EStdKeyDeviceA: case EStdKeyDevice3: HandleButtonReleaseEvent(); - SelectL(); + SelectL(); return ETrue; default: // Check keyboard shortcuts. - TInt shortcutCommand = + TInt shortcutCommand = iAppUi.ShortcutBinding().CommandForShortcutKey( aEvent.KeyEvent(), CFSEmailUiShortcutBinding::EContextMainGrid ); if ( shortcutCommand != KErrNotFound ) @@ -1080,45 +1082,55 @@ return EFalse; // was not consumed } -// + // --------------------------------------------------------------------------- // CFSEmailUiLauncherGridVisualiser::HandlePointerEventL // // --------------------------------------------------------------------------- -// -TBool CFSEmailUiLauncherGridVisualiser::HandlePointerEventL(const TAlfEvent& aEvent) +// +TBool CFSEmailUiLauncherGridVisualiser::HandlePointerEventL( + const TAlfEvent& aEvent ) { FUNC_LOG; TBool result( EFalse ); TInt currentlyFocused( iCurrentLevel.iSelected ); TPointerEvent::TType type = aEvent.PointerEvent().iType; TInt id = FindPointedItem( aEvent ); + if( KErrNotFound != id ) { + // The event coordinates correspond with an item. switch( type ) { case TPointerEvent::EButton1Down: { iItemIdInButtonDownEvent.iItemId = id; iItemIdInButtonDownEvent.iLaunchSelection = ETrue; - UpdateFocusVisibility(); - SetFocusedItemL( id ); + UpdateFocusVisibility(); break; } case TPointerEvent::EButton1Up: { + if ( iStylusPopUpMenuLaunched ) + { + // A pop-up menu was launched. Do not open the selected + // item. + iStylusPopUpMenuLaunched = EFalse; + break; + } + + // Hide focus always after pointer up event. + iAppUi.SetFocusVisibility( EFalse ); + // If key was released on item that had focus // trigger selection. if( iItemIdInButtonDownEvent.iItemId == id && iItemIdInButtonDownEvent.iLaunchSelection ) { - // keyboard focus is now hidden - iAppUi.CancelFocusRemovalTimer(); - HandleButtonReleaseEvent(); - - // LAUNCH OPENING. This may leave if user cancels the operation + // LAUNCH OPENING. This may leave if user cancels the + // operation SelectL(); } else @@ -1146,11 +1158,28 @@ } break; } + case TPointerEvent::EButtonRepeat: + { + // Long tap. + // Check the type of the currently selected item. + TInt itemType = iCurrentLevel.iItems[id].iId; + + if ( itemType == EDefaultMailboxItem || + itemType == EOtherMailboxItems ) + { + // The selected item is a mail box. Launch the pop-up + // menu. + LaunchStylusPopupMenu( id ); + } + + break; + } default: { break; } } + result = ETrue; } // if event do not concern any of items. @@ -1158,6 +1187,7 @@ { iItemIdInButtonDownEvent.iLaunchSelection = EFalse; ResizeItemIcon( ETrue ); + switch( type ) { case TPointerEvent::EButton1Down: @@ -1168,6 +1198,8 @@ } case TPointerEvent::EButton1Up: { + // Hide focus always after pointer up event. + iAppUi.SetFocusVisibility( EFalse ); iItemIdInButtonDownEvent.iItemId = KErrNotFound; HandleButtonReleaseEvent(); break; @@ -1178,6 +1210,15 @@ } } } + else + { + if( aEvent.IsPointerEvent() && aEvent.PointerUp() ) + { + // Hide focus always after pointer up event. + iAppUi.SetFocusVisibility( EFalse ); + } + } + return result; } @@ -1185,24 +1226,24 @@ // CFSEmailUiLauncherGridVisualiser::FindPointedItem // // --------------------------------------------------------------------------- -// +// TInt CFSEmailUiLauncherGridVisualiser::FindPointedItem( const TAlfEvent& aEvent ) { FUNC_LOG; - TInt result = KErrNotFound; - - TInt count = iCurrentLevel.iItemVisualData.Count(); + TInt result = KErrNotFound; + + TInt count = iCurrentLevel.iItemVisualData.Count(); const TPoint pos = aEvent.PointerEvent().iParentPosition; - + for(TInt a = 0; count > a; a++) { - const TRect rect(iCurrentLevel.iItemVisualData[a].iBase->DisplayRect()); + const TRect rect(iCurrentLevel.iItemVisualData[a].iBase->DisplayRect()); if(rect.Contains( pos )) { result = a; - break; - } - } + break; + } + } return result; } @@ -1210,16 +1251,15 @@ // CFSEmailUiLauncherGridVisualiser::SetFocusedItemL // // --------------------------------------------------------------------------- -// +// void CFSEmailUiLauncherGridVisualiser::SetFocusedItemL( TInt aId ) { FUNC_LOG; TInt oldSelection = iCurrentLevel.iSelected; - + HandleRowMovement( EDirectionTouch, aId ); - - FocusItem( EFalse, oldSelection ); -// iCurrentLevel.iSelected = aId; + + FocusItem( EFalse, oldSelection ); FocusItem( ETrue, iCurrentLevel.iSelected ); MoveSelectorToCurrentItem( EDirectionTouch ); } @@ -1229,11 +1269,11 @@ FUNC_LOG; // NULL double click flag just be sure that the UI does not // go into state that wizard cannot be started. - iDoubleClickLock = EFalse; + iDoubleClickLock = EFalse; // Store old selection TInt oldSelection = iCurrentLevel.iSelected; TInt itemCount = iCurrentLevel.iItemVisualData.Count(); - + HandleRowMovement( aDir, iCurrentLevel.iSelected ); // Set the correct icon focuses (i.e. enlarged) @@ -1253,7 +1293,7 @@ FUNC_LOG; // NULL double click flag just be sure that the UI does not // go into state that wizard cannot be started. - iDoubleClickLock = EFalse; + iDoubleClickLock = EFalse; // Store old selection TInt oldSelection = iCurrentLevel.iSelected; TInt itemCount = iCurrentLevel.iItemVisualData.Count(); @@ -1291,7 +1331,7 @@ if ( iCurrentLevel.iSelected < 0 ) { iCurrentLevel.iSelected += (iRowCount*iVisibleColumns); - if ( iCurrentLevel.iSelected >= itemCount ) + if ( iCurrentLevel.iSelected >= itemCount ) { // Wrapping is about to move the cursor on empty spot. // To be consistent with S60 app grid, move selection to the last item. @@ -1321,11 +1361,11 @@ case EDirectionNone: break; - + case EDirectionTouch: - iCurrentLevel.iSelected = aSelected; + iCurrentLevel.iSelected = aSelected; break; - + } if ( iCurrentLevel.iSelected < 0 ) @@ -1344,7 +1384,7 @@ ScrollToRow( y ); } -// + void CFSEmailUiLauncherGridVisualiser::MoveSelectorToCurrentItem( TDirection aDir ) { @@ -1363,7 +1403,7 @@ TPoint ringWrapOffset( 0, 0 ); const TInt KGridWrapWidth = (iVisibleColumns+2)*iColumnWidth; const TInt KGridWrapHeight = (iRowCount+2)*iRowHeight; - + if ( aDir == EDirectionRight && ( targetPos.iX <= curPos.iX || iCurrentLevel.iSelected == 0 ) ) { ringWrapOffset.iX = KGridWrapWidth; @@ -1402,7 +1442,7 @@ // Invalid item index return; } - + if( aHasFocus && ( IsFocusShown() || iItemIdInButtonDownEvent.iItemId >= 0 ) ) { TAlfTimedValue scaleValue; @@ -1458,7 +1498,7 @@ offset = iFirstVisibleRow * iRowHeight; - + TAlfTimedPoint alfScrollOffset; alfScrollOffset.iY.SetTarget( offset , KScrollTransitionTimeMs ); iCurrentLevel.iGridLayout->SetScrollOffset(alfScrollOffset); @@ -1466,7 +1506,7 @@ iScrollbarModel.SetFocusPosition(iFirstVisibleRow); TRAP_IGNORE( iScrollbar->SetModelL(&iScrollbarModel) ); iScrollbar->DrawNow(); -// +// } void CFSEmailUiLauncherGridVisualiser::RefreshLauncherViewL() @@ -1489,13 +1529,13 @@ FocusItem( ETrue, iCurrentLevel.iSelected ); } UpdateScrollBarRangeL(); - } + } } TBool CFSEmailUiLauncherGridVisualiser::UiOperationLaunched() { FUNC_LOG; - return iUiOperationLaunched; + return iUiOperationLaunched; } void CFSEmailUiLauncherGridVisualiser::PopulateL( TLevel& aLevel ) @@ -1506,30 +1546,30 @@ for( TInt i = 0; i < aLevel.iItemVisualData.Count(); i++ ) { aLevel.iItemVisualData[i].iBase->RemoveAndDestroyAllD(); - } + } aLevel.iItemVisualData.Reset(); aLevel.iItems.Reset(); - -// Use layout data instead of hard-coded values + +// Use layout data instead of hard-coded values TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var, 0, 0)); TRect itemrc = itemRect.Rect(); itemrc.SetRect(TPoint(0,0), itemRect.Rect().Size()); - + TAknLayoutRect gridIconRect; gridIconRect.LayoutRect(itemrc, AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); - + TAknLayoutText gridText; gridText.LayoutText(itemrc, AknLayoutScalable_Apps::cell_cmail_l_pane_t1(var)); // @@ -1537,7 +1577,7 @@ if( aLevel.iParent >= 0 ) { iModel->FindChildren( aLevel.iParent, aLevel.iItems ); - + for( TInt i = 0; i < aLevel.iItems.Count(); i++ ) { TItemVisualData newItem; @@ -1545,7 +1585,7 @@ newItem.iBase = CAlfAnchorLayout::AddNewL( *iControl, aLevel.iGridLayout ); newItem.iBase->SetTactileFeedbackL( ETouchEventStylusDown, ETouchFeedbackBasic ); -// Use layout data instead of hard-coded values +// Use layout data instead of hard-coded values // Set anchors for text newItem.iBase->SetAnchor( EAlfAnchorTopLeft, @@ -1589,20 +1629,20 @@ TRgb itemColor (KRgbGray); // text #9 application grid unfocused application title texts #215 if( AknsUtils::GetCachedColor( AknsUtils::SkinInstance(), - itemColor, KAknsIIDQsnTextColors, + itemColor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG9 ) != KErrNone ) { - itemColor = gridText.Color();//iAppUi.LayoutHandler()->ListNormalStateTextSkinColor(); + itemColor = gridText.Color();//iAppUi.LayoutHandler()->ListNormalStateTextSkinColor(); } newItem.iText->SetColor(itemColor); // - - newItem.iText->SetTextL( *aLevel.iItems[i].iCaption ); - + + newItem.iText->SetTextL( *aLevel.iItems[i].iCaption ); + TAlfTimedValue opacity; opacity.SetValueNow ( KDefaultCaptionOpacity ); newItem.iText->SetOpacity( opacity ); - + newItem.iText->SetTextStyle( iAppUi.LayoutHandler()->FSTextStyleFromLayoutL(AknLayoutScalable_Apps::cell_cmail_l_pane_t1(var)).Id() );//FSTextStyleFromIdL( EFSFontTypeSmall )->Id() ); newItem.iText->SetWrapping( CAlfTextVisual::ELineWrapTruncate ); newItem.iText->SetAlign( EAlfAlignHCenter, EAlfAlignVTop ); @@ -1612,7 +1652,7 @@ newItem.iImage->SetImage( TAlfImage( *aLevel.iItems[i].iIconTexture ) ); newItem.iImage->SetFlag( EAlfVisualFlagManualSize ); -// Use layout data instead of hard-coded values +// Use layout data instead of hard-coded values newItem.iImage->SetSize( gridIconRect.Rect().Size() ); newItem.iImage->SetScale( KScaleNotSelected ); // @@ -1621,7 +1661,7 @@ } } -// Use layout data instead of hard-coded values +// Use layout data instead of hard-coded values // Set columns and rows //iVisibleColumns = iAppUi.LayoutHandler()->GridColumnsInThisResolution(); //iVisibleRows = iAppUi.LayoutHandler()->GridRowsInThisResolution(); @@ -1641,7 +1681,7 @@ { iItemIdInButtonDownEvent.iItemId = KErrNotFound; UpdateFocusVisibility(); - + CFSEmailLauncherItem* launcherItem = iCurrentLevel.iItems[iCurrentLevel.iSelected].iLauncherItem; if ( launcherItem ) @@ -1657,12 +1697,12 @@ case EOtherMailboxItems: { TMailListActivationData tmp; - tmp.iFolderId = iCurrentLevel.iItems[iCurrentLevel.iSelected].iMailBoxInboxId; - tmp.iMailBoxId = iCurrentLevel.iItems[iCurrentLevel.iSelected].iMailBoxId; + tmp.iFolderId = iCurrentLevel.iItems[iCurrentLevel.iSelected].iMailBoxInboxId; + tmp.iMailBoxId = iCurrentLevel.iItems[iCurrentLevel.iSelected].iMailBoxId; const TPckgBuf pkgOut( tmp ); iAppUi.ShowTitlePaneConnectionStatus(); iAppUi.EnterFsEmailViewL( MailListId, KStartListWithFolderId, pkgOut ); - } + } break; case EDirectoryItem: { @@ -1671,14 +1711,14 @@ if ( !iDoubleClickLock ) { // Lock to make sure that wizard is not started twice in a row - iDoubleClickLock = ETrue; + iDoubleClickLock = ETrue; RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); - + // Remove mailboxes that doesn't support RCL for ( TInt i = mailBoxes.Count()-1; i >= 0 ; i-- ) { @@ -1705,9 +1745,9 @@ if ( mailBox ) { CFsDelayedLoader::InstanceL()->GetContactHandlerL()->LaunchRemoteLookupL( *mailBox ); - } + } iDoubleClickLock = EFalse; - CleanupStack::PopAndDestroy( &mailBoxes ); + CleanupStack::PopAndDestroy( &mailBoxes ); } } break; @@ -1715,7 +1755,7 @@ { TInt tmp = 0; const TPckgBuf pkgBuf( tmp ); - iAppUi.EnterFsEmailViewL( + iAppUi.EnterFsEmailViewL( SettingsViewId, TUid::Uid(KMailSettingsOpenMainList), pkgBuf ); @@ -1727,7 +1767,7 @@ // wizard would crash without this if ( !iDoubleClickLock ) { - iDoubleClickLock = ETrue; + iDoubleClickLock = ETrue; LaunchWizardL(); } } @@ -1744,9 +1784,9 @@ } break; default: - return; + return; } - } + } } } @@ -1760,7 +1800,7 @@ // Toggle safety lock always when receiving foreground back. if ( iFirstStartComplete && iDoubleClickLock ) { - iDoubleClickLock = EFalse; + iDoubleClickLock = EFalse; } } @@ -1788,10 +1828,10 @@ TInt selectedOption; CAknListQueryDialog* dlg = new ( ELeave ) CAknListQueryDialog( &selectedOption ); dlg->PrepareLC( R_FSEMAILUI_LAUNCHER_GRID_MAILBOX_SELECTION_DIALOG ); - + dlg->SetItemTextArray( array ); dlg->SetOwnershipType( ELbmDoesNotOwnItemArray ); - + CFSMailBox* mailbox = NULL; if( dlg->RunLD() ) { @@ -1802,7 +1842,7 @@ mailbox = aMailBoxes[selectedOption]; } } - + CleanupStack::PopAndDestroy( array ); return mailbox; } @@ -1825,20 +1865,20 @@ } iAiwSHandler->ExecuteServiceCmdL( KAiwCmdSettingWizardFsEmail.iUid, - iAiwSHandler->InParamListL(), + iAiwSHandler->InParamListL(), iAiwSHandler->OutParamListL() ); } void CFSEmailUiLauncherGridVisualiser::GoToInboxL( TFSMailMsgId& aMailboxId, TFSMailMsgId& aMailboxInboxId ) { FUNC_LOG; - TMailListActivationData tmp; - + TMailListActivationData tmp; + tmp.iMailBoxId = aMailboxId; tmp.iFolderId = aMailboxInboxId; - - const TPckgBuf pkgOut( tmp ); - + + const TPckgBuf pkgOut( tmp ); + iAppUi.EnterFsEmailViewL( MailListId, KStartListWithFolderId, pkgOut ); } @@ -1851,23 +1891,23 @@ TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var, 0, 0)); - + TAknLayoutRect gridIconRect; gridIconRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); - + //TInt gridIconSize = iAppUi.LayoutHandler()->GridIconSize(); TSize iconSize = gridIconRect.Rect().Size(); //iconSize.SetSize( gridIconSize, gridIconSize ); // - + // Scale bitmaps for( TInt i = 0 ; i < iIconArray.Count() ; i++ ) { @@ -1877,7 +1917,7 @@ for ( TInt item = 0; item < iCurrentLevel.iItemVisualData.Count() ; item++ ) { iCurrentLevel.iItemVisualData[item].iImage->SetSize( iconSize ); - } + } } } @@ -1894,61 +1934,61 @@ // Use layout data instead of hard-coded values TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var, 0, 0)); - + TAknLayoutRect gridIconRect; gridIconRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); - + TSize iconSize = gridIconRect.Rect().Size(); // - + const CFbsBitmap* bitmap = launcherItemIcon->Bitmap(); - const CFbsBitmap* mask = launcherItemIcon->Mask(); + const CFbsBitmap* mask = launcherItemIcon->Mask(); // First add plugin id and icon id pair to array, needed in provide bitmap TPluginIdIconIdPair idPair; idPair.iPluginArrayIndex = aPluginArrayIndex; - idPair.iIconId = iPluginTextureId; - iPluginIdIconIdPairs.Append( idPair ); + idPair.iIconId = iPluginTextureId; + iPluginIdIconIdPairs.Append( idPair ); // Create texture, goes to provide bitmap - CAlfTexture* texture = &CAlfStatic::Env().TextureManager().CreateTextureL( iPluginTextureId, this, EAlfTextureFlagDefault ); - // Update texture id - iPluginTextureId++; // Id is updated dynamically + CAlfTexture* texture = &CAlfStatic::Env().TextureManager().CreateTextureL( iPluginTextureId, this, EAlfTextureFlagDefault ); + // Update texture id + iPluginTextureId++; // Id is updated dynamically // Set initiel size // Use layout data instead of hard-coded values //TSize iconSize(iAppUi.LayoutHandler()->GridIconSize(), iAppUi.LayoutHandler()->GridIconSize() ); // - texture->Size().SetSize( iconSize.iHeight, iconSize.iWidth ); + texture->Size().SetSize( iconSize.iHeight, iconSize.iWidth ); iModel->AddL( EShortcut, aItem->Id(), *launcherItemText, *texture, 0, - aItem ); - iIconArray.AppendL( texture ); + aItem ); + iIconArray.AppendL( texture ); } else { CAlfTexture* texture = &iAppUi.FsTextureManager()->TextureByIndex( EGridInboxTexture ); - + iModel->AddL( EShortcut, aItem->Id(), *launcherItemText, *texture, 0, - aItem ); + aItem ); iIconArray.AppendL( texture ); } @@ -1962,12 +2002,12 @@ if ( iConstructionCompleted ) { iCurrentLevel.iParent = 0; - + // Use layout data instead of hard-coded values TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect scrollBarRect; // // scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); @@ -1975,16 +2015,16 @@ // TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TAknLayoutRect cellRect; cellRect.LayoutRect(gridRect, AknLayoutScalable_Apps::aid_size_cell_cmail_l(var, 0, 0)); - + TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var, 0, 0)); - + TAknLayoutRect gridIconRect; gridIconRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); - + TAknLayoutRect selectorRect; selectorRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::grid_highlight_pane_cp018(var)); @@ -1992,10 +2032,10 @@ iSelectorImageVisual->SetSize( selectorRect.Rect().Size() ); // layoutHandler->SelectorVisualSizeInThisResolution() ); TSize displaySize = mainPaneRect.Size();//iControl->DisplayArea().Size(); - + TInt columns = iVisibleColumns = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits(var).LastColumn() + 1; //layoutHandler->GridColumnsInThisResolution(); TInt rows = iVisibleRows = AknLayoutScalable_Apps::cell_cmail_l_pane_ParamLimits(var).LastRow() + 1; //layoutHandler->GridRowsInThisResolution(); - + // iCurrentLevel.iGridLayout->SetSize( gridRect.Size() ); @@ -2016,7 +2056,7 @@ iScrollbar->MakeVisible(EFalse); } // - + TInt scrollbarTopLeftX = displaySize.iWidth - scrollbarWidth; TInt scrollbarTopLeftY = 0; TInt scrollbarBottomRightX = displaySize.iWidth; @@ -2050,17 +2090,17 @@ TAlfTimedPoint( scrollbarTopLeftX, scrollbarTopLeftY ) ); iWidgetLayout->SetAnchor( EAlfAnchorBottomRight, - 0, + 0, EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, EAlfAnchorMetricAbsolute, TAlfTimedPoint( scrollbarBottomRightX, scrollbarBottomRightY ) ); - + // Set anchors for the grid iWidgetLayout->SetAnchor( EAlfAnchorTopLeft, - 1, + 1, EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, @@ -2068,7 +2108,7 @@ TAlfTimedPoint( gridTopLeftX, gridTopLeftY ) ); iWidgetLayout->SetAnchor( EAlfAnchorBottomRight, - 1, + 1, EAlfAnchorOriginLeft, EAlfAnchorOriginTop, EAlfAnchorMetricAbsolute, @@ -2076,9 +2116,9 @@ TAlfTimedPoint( gridBottomRightX, gridBottomRightY ) ); iParentLayout->UpdateChildrenLayout(); - + TSize gridSize = iCurrentLevel.iGridLayout->Size().IntTarget().AsSize(); - iColumnWidth = gridSize.iWidth / iVisibleColumns; + iColumnWidth = gridSize.iWidth / iVisibleColumns; iRowHeight = gridSize.iHeight / iVisibleRows; // Selector ring wrap limits can be calculated when row and column sizes are known. @@ -2104,9 +2144,9 @@ iRingMovementXFuncMappingDataProvider.SetEnd((iVisibleColumns+1)*iColumnWidth); iRingMovementYFuncMappingDataProvider.SetStart(-iRowHeight); iRingMovementYFuncMappingDataProvider.SetEnd((iRowCount+1)*iRowHeight); - + iRingMovementXFunc->SetMappingTableValues( -(iVisibleColumns+2)*iColumnWidth, (iVisibleColumns*2+2)*iColumnWidth, &iRingMovementXFuncMappingDataProvider ); - iRingMovementYFunc->SetMappingTableValues( -(iRowCount+2)*iRowHeight, (iRowCount*2+2)*iRowHeight, &iRingMovementYFuncMappingDataProvider ); + iRingMovementYFunc->SetMappingTableValues( -(iRowCount+2)*iRowHeight, (iRowCount*2+2)*iRowHeight, &iRingMovementYFuncMappingDataProvider ); } } @@ -2123,13 +2163,13 @@ HBufC* text_7 = StringLoader::LoadLC( R_DISCLAIMER_PART_7 ); HBufC* text_8 = StringLoader::LoadLC( R_DISCLAIMER_PART_8 ); HBufC* text_9 = StringLoader::LoadLC( R_DISCLAIMER_PART_9 ); - HBufC* text_10 = StringLoader::LoadLC( R_DISCLAIMER_PART_10 ); + HBufC* text_10 = StringLoader::LoadLC( R_DISCLAIMER_PART_10 ); HBufC* text_11 = StringLoader::LoadLC( R_DISCLAIMER_PART_11 ); - + //Create a buffer for dialog content - HBufC* text = HBufC::NewLC( text_1->Length() + text_2->Length() + text_3->Length() + - text_4->Length() + text_5->Length() + text_6->Length() + - text_7->Length() + text_8->Length() + text_9->Length() + + HBufC* text = HBufC::NewLC( text_1->Length() + text_2->Length() + text_3->Length() + + text_4->Length() + text_5->Length() + text_6->Length() + + text_7->Length() + text_8->Length() + text_9->Length() + text_10->Length() + text_11->Length() ); //Copy the disclaimer text parts to dialog content text->Des() += *text_1; @@ -2142,8 +2182,8 @@ text->Des() += *text_8; text->Des() += *text_9; text->Des() += *text_10; - text->Des() += *text_11; - + text->Des() += *text_11; + CAknMessageQueryDialog* dlg = CAknMessageQueryDialog::NewL( *text ); CleanupStack::PopAndDestroy( text ); CleanupStack::PopAndDestroy( text_11 ); @@ -2158,21 +2198,21 @@ CleanupStack::PopAndDestroy( text_2 ); CleanupStack::PopAndDestroy( text_1 ); dlg->PrepareLC( R_DISCLAIMER_MESSAGE ); - + //Create heading for the dialog, load and create the heading text CAknPopupHeadingPane* headingPane = dlg->Heading(); HBufC* appName = StringLoader::LoadLC(R_FSEMAIL_APP_NAME ); HBufC* version = StringLoader::LoadLC( R_DISCLAIMER_FSEMAIL_VERSION ); HBufC* title = HBufC::NewLC(version->Length() + appName->Length() + 1); - title->Des() += *appName; + title->Des() += *appName; title->Des() += KSpace; title->Des() += *version; headingPane->SetTextL( *title ); CleanupStack::PopAndDestroy( title ); CleanupStack::PopAndDestroy( version ); - CleanupStack::PopAndDestroy( appName ); + CleanupStack::PopAndDestroy( appName ); dlg->ButtonGroupContainer().SetCommandSetL( R_AVKON_SOFTKEYS_OK_EMPTY ); - //show dialog + //show dialog TInt ret = dlg->RunLD(); } @@ -2185,25 +2225,23 @@ if ( iConstructionCompleted ) { iItemIdInButtonDownEvent.iItemId = KErrNotFound; - - // Use layout data instead of hard-coded values + TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TAknLayoutRect cellRect; cellRect.LayoutRect(gridRect, AknLayoutScalable_Apps::aid_size_cell_cmail_l(var, 0, 0)); - + TSize displaySize = cellRect.Rect().Size(); - // iParentLayout->SetSize( displaySize ); - RescaleIconsL(); - VisualLayoutUpdatedL(); + RescaleIconsL(); + VisualLayoutUpdatedL(); UpdateFocusVisibility(); } @@ -2213,7 +2251,7 @@ { FUNC_LOG; iRefreshNeeded = ETrue; - + CFsEmailUiViewBase::HandleDynamicVariantSwitchOnBackgroundL( aType ); } @@ -2245,7 +2283,7 @@ TRect scrollbarRect = aParent->DisplayRectTarget(); scrollbarRect.Move(mainPaneRect.iTl); iScrollbar->SetRect(scrollbarRect); - + iScrollbar->MakeVisible(EFalse); iScrollbar->SetModelL(&iScrollbarModel); } @@ -2253,7 +2291,7 @@ void CFSEmailUiLauncherGridVisualiser::UpdateScrollBarRangeL() { FUNC_LOG; - + iScrollbarModel.SetScrollSpan(iRowCount); iScrollbarModel.SetWindowSize(iVisibleRows); iScrollbarModel.SetFocusPosition(iFirstVisibleRow); @@ -2267,7 +2305,7 @@ const TInt KScrollTransitionTimeMs = KSelectTransitionTimeMs; if (aScrollBar == iScrollbar) { - + switch( aEventType ) { case EEikScrollHome : @@ -2290,7 +2328,7 @@ void CFSEmailUiLauncherGridVisualiser::UpdateLauncherItemListL() { FUNC_LOG; - + // Read info about all implementations into infoArray RImplInfoPtrArray infoArray; CleanupResetAndDestroyClosePushL( infoArray ); @@ -2310,7 +2348,7 @@ for ( TInt infoIndex = 0; infoIndex < infoCount; infoIndex++ ) { TUid implementationUid = infoArray[infoIndex]->ImplementationUid(); - + // Check whether item can be found from current laucher items TBool itemFound = EFalse; for ( TInt itemIndex = 0; itemIndex < iLauncherItemUids.Count(); itemIndex++ ) @@ -2353,7 +2391,7 @@ CleanupStack::PopAndDestroy( &infoArray ); } -/** +/** * Sets application title when leaving this view */ void CFSEmailUiLauncherGridVisualiser::SetDefaultStatusPaneTextL() @@ -2368,7 +2406,7 @@ iWizardWaitnoteShown = aWaitnoteShown; } -/** +/** * Check status of all configured mailboxes */ TFSLauncherGridMailboxStatus CFSEmailUiLauncherGridVisualiser::CheckMailboxStatusL() @@ -2376,7 +2414,7 @@ FUNC_LOG; RPointerArray mailBoxes; CleanupResetAndDestroyClosePushL( mailBoxes ); - TFSMailMsgId id; + TFSMailMsgId id; TInt err = iAppUi.GetMailClient()->ListMailBoxes( id, mailBoxes ); @@ -2385,7 +2423,7 @@ returnStatus.iMailboxCount = mailBoxes.Count(); // Reset counters returnStatus.iMailboxesOnline = returnStatus.iMailboxesOffline = returnStatus.iMailboxesSyncing = 0; - + for ( TInt i = 0; i < mailBoxes.Count(); i++ ) { // First check online/offline status @@ -2398,7 +2436,7 @@ { returnStatus.iMailboxesOnline++; } - + // Then check sync state TSSMailSyncState latestSyncstate = mailBoxes[i]->CurrentSyncState(); if( latestSyncstate == InboxSyncing || @@ -2408,12 +2446,12 @@ returnStatus.iMailboxesSyncing++; } } - + CleanupStack::PopAndDestroy( &mailBoxes ); return returnStatus; } -// Bitmap provider for grid ecom plugins icons +// Bitmap provider for grid ecom plugins icons void CFSEmailUiLauncherGridVisualiser::ProvideBitmapL(TInt aId, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap) { FUNC_LOG; @@ -2421,31 +2459,31 @@ TRect mainPaneRect; AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); TInt var = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; - + TAknLayoutRect scrollBarRect; scrollBarRect.LayoutRect(mainPaneRect, AknLayoutScalable_Avkon::aid_size_touch_scroll_bar()); TRect gridRect = mainPaneRect; gridRect.iBr.iX -= scrollBarRect.Rect().Width(); - + TAknLayoutRect itemRect; itemRect.LayoutRect(gridRect, AknLayoutScalable_Apps::cell_cmail_l_pane(var, 0, 0)); - + TAknLayoutRect gridIconRect; gridIconRect.LayoutRect(itemRect.Rect(), AknLayoutScalable_Apps::cell_cmail_l_pane_g1(var)); -// - - CAknIcon* launcherItemIcon(0); +// + + CAknIcon* launcherItemIcon(0); for ( TInt i=0; iIcon(); - } + } } - + if ( launcherItemIcon ) { -// Use layout data instead of hard-coded values +// Use layout data instead of hard-coded values // Set bitmap size //TSize iconSize(iAppUi.LayoutHandler()->GridIconSize(), iAppUi.LayoutHandler()->GridIconSize() ); @@ -2460,15 +2498,15 @@ { AknIconUtils::DisableCompression( launcherItemIcon->Mask()); AknIconUtils::SetSize( launcherItemIcon->Mask(), iconSize, EAspectRatioPreserved ); - } + } // Create duplicate sof original for alf CFbsBitmap* bitmap = new (ELeave) CFbsBitmap; - bitmap->Duplicate( launcherItemIcon->Bitmap()->Handle() ); + bitmap->Duplicate( launcherItemIcon->Bitmap()->Handle() ); CFbsBitmap* mask = new (ELeave) CFbsBitmap; - mask->Duplicate( launcherItemIcon->Mask()->Handle() ); - + mask->Duplicate( launcherItemIcon->Mask()->Handle() ); + aBitmap = bitmap; - aMaskBitmap = mask; + aMaskBitmap = mask; } else { @@ -2483,7 +2521,7 @@ iDoubleClickLock = EFalse; } -TReal32 CFSEmailUiLauncherGridVisualiser::TRingMovementFuncMappingDataProvider::MapValue(TReal32 aValue, TInt /*aMode*/) const +TReal32 CFSEmailUiLauncherGridVisualiser::TRingMovementFuncMappingDataProvider::MapValue(TReal32 aValue, TInt /*aMode*/) const { FUNC_LOG; AlfUtil::WrapValue(aValue, iStart, iEnd); @@ -2497,7 +2535,7 @@ { TAlfTimedPoint selectorPos; selectorPos.iX.SetMappingFunctionIdentifier( 0 ); - selectorPos.iY.SetMappingFunctionIdentifier( 0 ); + selectorPos.iY.SetMappingFunctionIdentifier( 0 ); iSelector->SetPos( selectorPos ); } } @@ -2507,7 +2545,7 @@ if( iSelector ) { TAlfTimedValue selectorOpacity; - if( IsFocusShown() || iItemIdInButtonDownEvent.iItemId >= 0 ) + if( IsFocusShown() || iItemIdInButtonDownEvent.iItemId >= 0 ) { selectorOpacity.SetValueNow( 1 ); } @@ -2527,16 +2565,39 @@ void CFSEmailUiLauncherGridVisualiser::MailboxDeletionComplete() { - TRAP_IGNORE( HandleContentChangeL() ); + TRAP_IGNORE( HandleContentChangeL() ); } -void CFSEmailUiLauncherGridVisualiser::HandleTimerFocusStateChange( TBool aShow ) +void CFSEmailUiLauncherGridVisualiser::FocusVisibilityChange( TBool aVisible ) + { + CFsEmailUiViewBase::FocusVisibilityChange( aVisible ); + UpdateFocusVisibility(); + ResizeItemIcon( !aVisible ); + } + + +// ---------------------------------------------------------------------------- +// LaunchStylusPopupMenuL() +// Launches and displays the pop-up menu invoked by a long tap event. +// ---------------------------------------------------------------------------- +// +void CFSEmailUiLauncherGridVisualiser::LaunchStylusPopupMenu( + const TInt aItemId ) { - CFsEmailUiViewBase::HandleTimerFocusStateChange( aShow ); - if (!aShow) - { - UpdateFocusVisibility(); - ResizeItemIcon( ETrue ); - } + // Get the ID of the mailbox in case the user wants to delete it. + iMailboxToDelete = iCurrentLevel.iItems[aItemId].iMailBoxId; + + // Get the item position and use it to determine the position of the menu. + const TRect rect( + iCurrentLevel.iItemVisualData[aItemId].iBase->DisplayRect() ); + TPoint position( rect.iTl.iX + rect.Width() / 2, + rect.iTl.iY + rect.Height() / 2 ); + iStylusPopUpMenu->SetPosition( position ); + + // Display the menu. + iStylusPopUpMenu->ShowMenu(); + iStylusPopUpMenuLaunched = ETrue; } -// End of file + + +// End of file.