diff -r 000000000000 -r 7f85d04be362 homesync/contentmanager/mediaservant/src/msitembrowser.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/homesync/contentmanager/mediaservant/src/msitembrowser.cpp Thu Dec 17 08:52:00 2009 +0200 @@ -0,0 +1,316 @@ +/* +* Copyright (c) 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" +* 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: CMSItemBrowser class implementation +* +*/ + + + +#include +#include +#include +#include +#include +#include +#include + +#include "cmbaselistitem.h" +#include "msappui.h" +#include "msitembrowser.h" +#include "msengine.h" +#include "msconstants.h" +#include "msdebug.h" + + +// -------------------------------------------------------------------------- +// CMSItemBrowser::ConstructL() +// -------------------------------------------------------------------------- +// +void CMSItemBrowser::ConstructL( TRect aRect ) + { + LOG(_L("[MediaServant]\t CMSItemBrowser::ConstructL")); + + GetBrowseDataL(); + + CreateWindowL(); + + iListBox = new (ELeave) CAknDoubleGraphicStyleListBox; + + SetListBoxFromResourceL(iListBox, R_BROWSE_VIEW_LISTBOX); + + // Create icons + CAknIconArray* icons = new (ELeave) CAknIconArray( EIconCount ); + CleanupStack::PushL( icons ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + + // mark icon + AppendIconToArrayL( icons, skin, + KAvkonMifFileName, + KAknsIIDDefault, + EMbmAvkonQgn_indi_marked_add, + EMbmAvkonQgn_indi_marked_add_mask ); + + // image icon + AppendIconToArrayL( icons, skin, + KMSMifFileName, + KAknsIIDDefault, + EMbmMediaservantQgn_prop_file_image, + EMbmMediaservantQgn_prop_file_image_mask ); + // audio icon + AppendIconToArrayL( icons, skin, + KMSMifFileName, + KAknsIIDDefault, + EMbmMediaservantQgn_prop_file_audio, + EMbmMediaservantQgn_prop_file_audio_mask ); + // video icon + AppendIconToArrayL( icons, skin, + KMSMifFileName, + KAknsIIDDefault, + EMbmMediaservantQgn_prop_file_video, + EMbmMediaservantQgn_prop_file_video_mask ); + + + iListBox->ItemDrawer()->FormattedCellData()->SetIconArray(icons); + CleanupStack::Pop(icons); + + // Container is listbox observer + iListBox->SetListBoxObserver( this ); + + SetRect(aRect); + + // Add data to listbox + UpdateListBoxDataL(); + + ActivateL(); // Activates window. ( Ready to draw ) + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::~CMSItemBrowser +// -------------------------------------------------------------------------- +CMSItemBrowser::~CMSItemBrowser() + { + if ( iItemArray ) + { + iItemArray->ResetAndDestroy(); + iItemArray->Close(); + delete iItemArray; + } + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::CountComponentControls() +// Returns number of components. +// -------------------------------------------------------------------------- +// +TInt CMSItemBrowser::CountComponentControls() const + { + return 1; // return number of controls inside this container + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::ComponentControl() +// Returns pointer to particular component. +// -------------------------------------------------------------------------- +// +CCoeControl* CMSItemBrowser::ComponentControl( TInt /*aIndex*/) const + + { + return iListBox; // return a pointer to the listbox + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::OfferKeyEventL() +// Handles the key events. +// -------------------------------------------------------------------------- +// +TKeyResponse CMSItemBrowser::OfferKeyEventL( + const TKeyEvent& aKeyEvent, + TEventCode aType ) + { + LOG(_L("[MediaServant]\t CMSItemBrowser::OfferKeyEventL")); + + TKeyResponse response = EKeyWasNotConsumed; + + if ( aType != EEventKey ) + { + response = EKeyWasNotConsumed; + } + + if ( iListBox ) + { + response = iListBox->OfferKeyEventL( aKeyEvent, aType ); + } + + return response; + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::HandleListBoxEventL() +// Handles listbox event. +// -------------------------------------------------------------------------- +void CMSItemBrowser::HandleListBoxEventL( + CEikListBox* /*aListBox*/, + TListBoxEvent /*aEventType*/ ) + { + LOG(_L("[MediaServant]\t CMSItemBrowser::HandleListBoxEventL")); + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::ReadDataFromEngineL() +// Reads data items from engine +// -------------------------------------------------------------------------- +// +void CMSItemBrowser::UpdateListBoxDataL() + { + LOG(_L("[MediaServant]\t CMSItemBrowser::UpdateListBoxDataL")); + + // Listbox items + CDesCArray* itemArray = static_cast + (iListBox->Model()->ItemTextArray()); + // Clear list + itemArray->Reset(); + + TInt count = iItemArray->Count(); + + for (TInt index = 0; index < count; index++) + { + TInt iconType; + CCmBaseListItem* item = (*iItemArray)[index]; + TUint32 fileSize = item->Size(); + HBufC* fileSizeStr = NULL; + HBufC* primaryText = HBufC::NewLC( KMaxDataTypeLength ); + HBufC* secondaryText = HBufC::NewLC( KMaxDataTypeLength ); + + switch ( iMediaType ) + { + case ECmVideo: + // fall through + case ECmOtherVideo: + { + iconType = EIconVideo; + break; + } + case ECmImage: + // fall through + case ECmOtherImage: + { + iconType = EIconImage; + break; + } + case ECmAudio: + { + iconType = EIconAudio; + + secondaryText->Des().Copy( item->SecondaryText() ); + break; + } + default: + { + iconType = EIconVideo; + break; + } + } + + // Set item secondary text + if ( fileSize < KMega ) + { + if ( secondaryText->Length() ) + { + secondaryText->Des().Append( KDelimiter); + } + + fileSizeStr = StringLoader::LoadLC( + R_MS_FILE_SIZE_KB, fileSize / KKilo ); + } + else + { + if ( secondaryText->Length() ) + { + secondaryText->Des().Append( KDelimiter ); + } + + TReal size( 0 ); + Math::Round( size, TReal( fileSize ) / KMega, 0 ); + fileSizeStr = StringLoader::LoadLC( + R_MS_FILE_SIZE_MB, size ); + } + + secondaryText->Des().Append( *fileSizeStr ); + if ( fileSizeStr ) + { + CleanupStack::PopAndDestroy( fileSizeStr ); + } + + // do number conversion + TPtr ptr = secondaryText->Des(); + AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); + + // add item + AppendItemToListBoxArrayL( + iListBox, + iListBox->Model(), + iconType, // default icon + (*iItemArray)[index]->PrimaryText(), + *secondaryText ); + CleanupStack::PopAndDestroy( secondaryText ); + CleanupStack::PopAndDestroy( primaryText ); + } + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::SetCurrentFileStatus +// -------------------------------------------------------------------------- +// +void CMSItemBrowser::SetFileStatus( TInt aIndex, + TCmListItemStatus aStatus ) + { + LOG(_L("[MediaServant]\t CMSItemBrowser::SetFileStatus")); + + (*iItemArray)[aIndex]->SetStatus( aStatus ); + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::GetCurrentFileStatus +// -------------------------------------------------------------------------- +// +TCmListItemStatus CMSItemBrowser::FileStatus( TInt aIndex ) + { + LOG(_L("[MediaServant]\t CMSItemBrowser::FileStatus")); + + return (*iItemArray)[ aIndex ]->Status(); + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::ListBox() +// Returns listbox +// -------------------------------------------------------------------------- +// +CEikListBox* CMSItemBrowser::ListBox() + { + return iListBox; + } + +// -------------------------------------------------------------------------- +// CMSItemBrowser::SizeChanged() +// Called by framework when the view size is changed. +// -------------------------------------------------------------------------- +// +void CMSItemBrowser::SizeChanged() + { + // container control resize code. + if ( iListBox ) + { + iListBox->SetRect( Rect() ); // Set rectangle of listbox. + } + }