diff -r 8bda91a87a00 -r 8ee96d21d9bf profilesservices/FileList/Src/CFLDPopupList.cpp --- a/profilesservices/FileList/Src/CFLDPopupList.cpp Thu Aug 19 10:12:30 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,637 +0,0 @@ -/* -* Copyright (c) 2002 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" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: Implementation of the CFLDPopupList. -* -*/ - - - -// CLASS HEADER -#include "CFLDPopupList.h" - -// INTERNAL INCLUDES -#include "CFLDFileListModel.h" -#include "MFLDFileObserver.h" -#include "MFLDFileListBoxObserver.h" - -// EXTERNAL INCLUDES -#include -#include -#include -#include -#include // KAvkonBitmapFile, KAvkonVariatedBitmapsFile -#include // MBM indices for seamless link -#include -#include -#include -#include -#include -#ifdef RD_TACTILE_FEEDBACK -#include -#endif //RD_TACTILE_FEEDBACK -// CONSTANTS -namespace - { - _LIT( KFLDMassStorageBitmapFile, "z:filelist.mbm" ); - _LIT( KFLDMemoryCardUiBitmapFile, "z:aknmemorycardui.mbm" ); - - const TInt KIconGranularity( 3 ); - } - - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CFLDPopupList::CFLDPopupList -// C++ constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CFLDPopupList::CFLDPopupList( - MFLDFileObserver& aFileObserver, - MFLDFileListBoxObserver* aListBoxObserver, - CFLDFileListModel& aModel ) - : CAknPopupList(), - iFileObserver( aFileObserver ), - iListBoxObserver( aListBoxObserver ), - iModel( aModel ), - iPoint(-1,-1) - { - } - - -void CFLDPopupList::ConstructL( - CEikListBox* aListBox, TInt aCbaResource, AknPopupLayouts::TAknPopupLayouts aType ) - { - // Notify foreground lost - CCoeEnv* coeEnv = CCoeEnv::Static(); - coeEnv->AddForegroundObserverL( *this ); - coeEnv->AddFocusObserverL( *this ); - - CAknPopupList::ConstructL( aListBox, aCbaResource, aType ); - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CFLDPopupList* CFLDPopupList::NewL( - CEikListBox* aListBox, - TInt aCbaResource, - MFLDFileObserver& aFileObserver, - MFLDFileListBoxObserver* aListBoxObserver, - CFLDFileListModel& aModel, - AknPopupLayouts::TAknPopupLayouts aType ) - { - CFLDPopupList* self = new( ELeave ) - CFLDPopupList( aFileObserver, aListBoxObserver, aModel ); - CleanupStack::PushL( self ); - self->ConstructL( aListBox, aCbaResource, aType ); - CleanupStack::Pop( self ); - return self; - } - -// Destructor - CFLDPopupList::~CFLDPopupList() - { - CCoeEnv::Static()->RemoveForegroundObserver( *this ); - CCoeEnv::Static()->RemoveFocusObserver( *this ); - } - - // ----------------------------------------------------------------------------- - // CFLDPopupList::HandlePointerEventL - // (other items were commented in a header). - // ----------------------------------------------------------------------------- - // - void CFLDPopupList::HandlePointerEventL(const TPointerEvent& aPointerEvent) - { - if ( aPointerEvent.iType == TPointerEvent::EButton1Down) - { - iPoint = aPointerEvent.iPosition; - CancelPreview(); - } - if (!Rect().Contains(iPoint)) - { -#ifdef RD_TACTILE_FEEDBACK - MTouchFeedback* feedback = MTouchFeedback::Instance(); - if (feedback) - { - feedback->InstantFeedback(this, ETouchFeedbackBasic); - } -#endif //RD_TACTILE_FEEDBACK } - AttemptExitL(EFalse); - } - CAknPopupList::HandlePointerEventL(aPointerEvent); - } -// ----------------------------------------------------------------------------- -// CFLDPopupList::AttemptExitL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::AttemptExitL( TBool aAccept ) - { - if( iExitChecksDone ) - { - CAknPopupList::AttemptExitL( aAccept ); - return; - } - - TFileName fileName( KNullDesC ); - iModel.GetFileName( fileName, iListBox->CurrentItemIndex() ); - -#ifdef RD_VIDEO_AS_RINGING_TONE - // Get current softkey state - if( iListBoxObserver ) - { - iListBoxObserver->HandleSoftKeyState( iSoftKeyState ); - } - TBool isVideo( EFalse ); - if ( iModel.MediaFileType( fileName ) == ECLFMediaTypeVideo ) - { - isVideo = ETrue; - } -#endif - - if( aAccept ) - { - // User made a selection (didn't press cancel). - -#ifdef RD_VIDEO_AS_RINGING_TONE - if( isVideo ) - { - if( iSoftKeyState == - MFLDFileListBoxObserver::EToneSelectionSoftKeyState ) - { - // Cancel listbox timer - if( iListBoxObserver ) - { - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EOtherKeyEvent, - fileName ); - } - } - else - { - // No need to cancel timer - // (it has been already cancelled) - } - } - else - { - // Cancel listbox timer - if( iListBoxObserver ) - { - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EOtherKeyEvent, - fileName ); - } - } -#else - // Cancel listbox timer - if( iListBoxObserver ) - { - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EOtherKeyEvent, - fileName ); - } -#endif - -#ifdef RD_VIDEO_AS_RINGING_TONE - if( !isVideo ) // Only perform file validity check for audio files here - { - // Ask the observer if the file is valid. - if( !iFileObserver.IsFileValidL( - fileName, MFLDFileObserver::ESelect ) ) - { - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - } - -#else - // Ask the observer if the file is valid. - if( !iFileObserver.IsFileValidL( - fileName, MFLDFileObserver::ESelect ) ) - { - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } -#endif - - -#ifdef RD_VIDEO_AS_RINGING_TONE - if( iListBoxObserver ) - { - // Ask the observer if the file is video - if( isVideo ) - {// File is a video - - // Change the softkeys back to normal - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EVideoPreviewCanceled, - fileName ); - - if( iSoftKeyState - == MFLDFileListBoxObserver::EToneSelectionSoftKeyState ) - { // File is a video and we are in tone selection list - - // Ask the observer if the file is valid. - if( !iFileObserver.IsFileValidL( - fileName, MFLDFileObserver::ESelect ) ) - { - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - } - else if( iSoftKeyState - == MFLDFileListBoxObserver::EPreviewSoftKeyState ) - { // File is a video and it has been focused for 1s - - // Ask the observer if the file is valid. - if( !iFileObserver.IsFileValidL( - fileName, MFLDFileObserver::EPlay ) ) - { - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EVideoPreview, - fileName ); - - // Disable scrollbar - ListBox()->ScrollBarFrame()->VerticalScrollBar()->SetDimmed( ETrue ); - - // Remove the focus from listbox - ListBox()->SetDimmed( ETrue ); - - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - else if( iSoftKeyState - == MFLDFileListBoxObserver::EPreviewSelectSoftKeyState ) - { // File is a video and it is in preview state - - // Ask the observer if the file is valid. - if( !iFileObserver.IsFileValidL( - fileName, MFLDFileObserver::ESelect ) ) - { - // When video screen is closed, - // listbox must be forced to be refreshed - // ( otherwise scrollbar is not redrawn) - ListBox()->SetDimmed( EFalse ); - ListBox()->ScrollBarFrame()->VerticalScrollBar()->SetDimmed( EFalse ); - DrawNow( CEikonEnv::Static()->EikAppUi()->ApplicationRect() ); - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - - // When video screen is closed, listbox must be refreshed - DrawDeferred(); - } - } - } - } - else // if( aAccept ) - { - // User canceled selection - if( iListBoxObserver ) - { - if( isVideo ) - { // File is a video - - // Change the softkeys back to normal - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EVideoPreviewCanceled, - fileName ); - - if( iSoftKeyState == - MFLDFileListBoxObserver::EPreviewSelectSoftKeyState ) - { // File is a video and it is in preview state - - // When video screen is closed, - // listbox must be forced to be refreshed - // ( otherwise scrollbar is not redrawn) - ListBox()->SetDimmed( EFalse ); - ListBox()->ScrollBarFrame()->VerticalScrollBar()->SetDimmed( EFalse ); - DrawNow( CEikonEnv::Static()->EikAppUi()->ApplicationRect() ); - // Not ok to close the pop-up. - // Return. Don't call CAknPopupList::AttemptExitL. - return; - } - } - } -#endif - - } - - iExitChecksDone = ETrue; - CAknPopupList::AttemptExitL( aAccept ); - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleResourceChange -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleResourceChange( TInt aType ) - { -#ifdef RD_VIDEO_AS_RINGING_TONE - if( aType == KEikDynamicLayoutVariantSwitch || - aType == KAknsMessageSkinChange ) - { - if( iListBoxObserver ) - { - TRAP_IGNORE( iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EVideoPreviewCanceled ) ); - if( ListBox()->IsFocused() ) - { - ListBox()->SetDimmed( EFalse ); - ListBox()->ScrollBarFrame()->VerticalScrollBar()->SetDimmed( EFalse ); - } - } - } -#endif - if( aType == KAknsMessageSkinChange ) - { - TRAP_IGNORE( PopulateIconArrayL() ); - } - - CAknPopupList::HandleResourceChange( aType ); - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::GetFileListBoxObserver -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -MFLDFileListBoxObserver* CFLDPopupList::GetFileListBoxObserver() - { - return iListBoxObserver; - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleListBoxEventL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleListBoxEventL( CEikListBox* aListBox, - TListBoxEvent aEventType ) - { - switch( aEventType ) - { - // Special handling for touch: first click just starts preview; - // second click (double click) will select the tone. - // Fall through. - case EEventItemClicked: - { - iModel.GetFileName( iCurrentFileName, iListBox->CurrentItemIndex() ); - iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EFocusChanged, iCurrentFileName ); - return; - } - - case EEventItemDoubleClicked: - AttemptExitL( ETrue ); - return; - - default: - break; - } - - CAknPopupList::HandleListBoxEventL( aListBox, aEventType ); - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::CancelPreview -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::CancelPreview() - { - if( iListBoxObserver ) - { - TRAP_IGNORE( iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EOtherKeyEvent, KNullDesC ) ); - } - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::PopupListWindow:: -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -RWindow& CFLDPopupList::PopupListWindow() const - { - return Window(); - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleGainingForeground -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleGainingForeground() - { - TRAP_IGNORE( ListBox()->HandleItemAdditionL() ); - } -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleLosingForeground -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleLosingForeground() - { - if( iListBoxObserver ) - { - iListBoxObserver->HandleSoftKeyState( iSoftKeyState ); - if( iSoftKeyState == MFLDFileListBoxObserver::EPreviewSelectSoftKeyState ) - { - TRAP_IGNORE( iListBoxObserver->HandleFileListBoxEventL( - MFLDFileListBoxObserver::EVideoPreviewCanceled, KNullDesC ) ); - DrawNow(); - } - - // Set the vertical scroll bar and listbox to not dimmed. - if ( ListBox()->IsFocused() ) - { - ListBox()->SetDimmed( EFalse ); - ListBox()->ScrollBarFrame()->VerticalScrollBar()->SetDimmed( EFalse ); - } - } - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleChangeInFocus -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleChangeInFocus() - { - if( ListBox()->IsFocused() ) - { - ListBox()->SetDimmed( EFalse ); - } - } -// ----------------------------------------------------------------------------- -// CFLDPopupList::HandleDestructionOfFocusedItem -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::HandleDestructionOfFocusedItem() - { - } - -// ----------------------------------------------------------------------------- -// CFLDPopupList::PopulateIconArrayL -// (other items were commented in a header). -// ----------------------------------------------------------------------------- -// -void CFLDPopupList::PopulateIconArrayL() - { - CAknSingleGraphicBtPopupMenuStyleListBox* listBox = - static_cast( ListBox() ); - - if( !listBox ) - { - return; - } - - // Create new icon array - CArrayPtr* iconArray = new( ELeave ) CAknIconArray( KIconGranularity ); - CleanupStack::PushL( iconArray ); - - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - - // - // Create an empty icon in icon array position 0 - // - CGulIcon* icon = - AknsUtils::CreateGulIconL( skin, KAknsIIDQgnPropEmpty, KAvkonBitmapFile, - EMbmAvkonQgn_prop_empty, EMbmAvkonQgn_prop_empty_mask ); - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - // - // Create an URL icon for download tones in icon array position 1 - // - icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnPropLinkEmbdSmall, - KAvkonVariatedBitmapsFile, - EMbmVariatedbitmapsQgn_prop_link_embd_small, - EMbmVariatedbitmapsQgn_prop_link_embd_small_mask ); - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - // - // Create an memory card icon in icon array position 2 - // - TParse* fp = new(ELeave) TParse(); - fp->Set(KFLDMemoryCardUiBitmapFile, &KDC_APP_BITMAP_DIR, NULL); - TFileName resourceFileName( fp->FullName() ); - delete fp; - - TRgb defaultColour( KRgbBlack ); - CFbsBitmap* bmap = NULL; - CFbsBitmap* mask = NULL; - - AknsUtils::GetCachedColor( skin, defaultColour, - KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13 ); - AknsUtils::CreateColorIconLC( skin, KAknsIIDQgnPropLinkEmbdSmall, - KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13, bmap, mask, - resourceFileName, EMbmAknmemorycarduiQgn_indi_mmc_add, - EMbmAknmemorycarduiQgn_indi_mmc_add_mask, - defaultColour ); - icon = CGulIcon::NewL( bmap, mask ); - icon->SetBitmapsOwnedExternally( EFalse ); - CleanupStack::Pop( 2 ); // icon owns the bitmaps now - - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - // - // Create an audio file icon in icon array position 3 - // - icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnPropFmgrFileSound, - KCommonDialogsBitmapFile, - EMbmCommondialogsQgn_prop_fmgr_file_sound, - EMbmCommondialogsQgn_prop_fmgr_file_sound_mask ); - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - // - // Create a video file icon in icon array position 4 - // - icon = AknsUtils::CreateGulIconL( skin, KAknsIIDQgnPropFmgrFileVideo, - KCommonDialogsBitmapFile, - EMbmCommondialogsQgn_prop_fmgr_file_video, - EMbmCommondialogsQgn_prop_fmgr_file_video_mask ); - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - // - // create mass storage icon in icon array position 5 - // - TParse* fp2 = new(ELeave) TParse(); - fp2->Set(KFLDMassStorageBitmapFile, &KDC_APP_BITMAP_DIR, NULL); - resourceFileName = fp2->FullName(); - delete fp2; - - TRgb defaultColour2( KRgbBlack ); - CFbsBitmap* bmap2 = NULL; - CFbsBitmap* mask2 = NULL; - - AknsUtils::GetCachedColor( skin, defaultColour2, - KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13 ); - AknsUtils::CreateColorIconLC( skin, KAknsIIDQgnPropLinkEmbdSmall, - KAknsIIDQsnIconColors, EAknsCIQsnIconColorsCG13, bmap2, mask2, - resourceFileName, EMbmFilelistQgn_indi_fmgr_ms_add, - EMbmFilelistQgn_indi_fmgr_ms_add_mask, - defaultColour2 ); - - icon = CGulIcon::NewL( bmap2, mask2 ); - icon->SetBitmapsOwnedExternally( EFalse ); - CleanupStack::Pop( 2 ); // icon owns the bitmaps now - - CleanupStack::PushL( icon ); - iconArray->AppendL( icon ); - CleanupStack::Pop( icon ); - - - // Delete old icons - CArrayPtr* arr = listBox->ItemDrawer()->ColumnData()->IconArray(); - if( arr ) - { - arr->ResetAndDestroy(); - delete arr; - arr = NULL; - } - - listBox->ItemDrawer()->ColumnData()->SetIconArrayL( iconArray ); - CleanupStack::Pop( iconArray ); - - } - - -// End of File