diff -r 8ce15fced3a6 -r cad71a31b7fc srsf/vcommandhandler/src/vcfolderinfo.cpp --- a/srsf/vcommandhandler/src/vcfolderinfo.cpp Thu Aug 19 09:56:14 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,259 +0,0 @@ -/* -* Copyright (c) 2006 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 CVFolderInfo class -* -*/ - - -#include -#include -#include -#include -#include -#include -#include "rubydebug.h" - -/** - * File name to read icons from if icon file name is not specified - */ -_LIT( KDefaultIconFile, "Z:\\resource\\apps\\vcommand.mif" ); -const TInt KDefaultIconIndex = KMifIdFirst; // first image in the file - -/** -* The version of the streamed data protocol -* It is rather likely, that the format of the data streamed changes in the future. -* Using the protocol version, the code can check if it knows how to parse the -* input stream -*/ -const TInt32 KVCFolderInfoProtocolVersion = 2; - -static const TAknsItemID* const KIconId[] = - { - &KAknsIIDQgnPropFolderVcGeneral, - &KAknsIIDQgnPropFolderVcTools, - &KAknsIIDQgnPropFolderVcOrganiser, - &KAknsIIDQgnPropFolderVcMessage, - &KAknsIIDQgnPropFolderVcMedia, - &KAknsIIDQgnPropFolderVcProfiles - }; - -/** - * This object does not take an ownership of the passed descriptors, - * but makes own copies. - * - * @param aTitle Folder title. It is shown at the top of the screen, - * when the folder is opened in the VCommand application - * @param aListedName Version of a title shown when the folder is - * is displayed in the list of VCommands in the VCommand app - * @param aHelpTopicId Topic to open when help is requested for the - * given folder - * @param aIconIndex Index of the folder icon in the folder icons mbm file - * each index correspods to two images - the actual icon and its mask - * @param aIconFile Mbm file where the icons are obtained from. If KNullDesC, - * the default icon file is used - */ -EXPORT_C CVCFolderInfo* CVCFolderInfo::NewL( const TDesC& aTitle, - const TDesC& aListedName, TUint32 aHelpTopicId, TUint aIconIndex, - const TDesC& aIconFile ) - { - CVCFolderInfo* self = new (ELeave) CVCFolderInfo( aHelpTopicId, aIconIndex ); - CleanupStack::PushL( self ); - self->ConstructL( aTitle, aListedName, aIconFile ); - CleanupStack::Pop( self ); - return self; - } - -/** -* Copy the existing CVCFolderInfo -*/ -EXPORT_C CVCFolderInfo* CVCFolderInfo::NewL( const CVCFolderInfo& aOriginal ) - { - CVCFolderInfo* self = new (ELeave) CVCFolderInfo( aOriginal.HelpTopicId(), - aOriginal.IconIndex() ); - CleanupStack::PushL( self ); - self->ConstructL( aOriginal.Title(), aOriginal.ListedName(), aOriginal.IconFile() ); - CleanupStack::Pop( self ); - return self; - } - -/** - * Constructs the folder information from stream - * @leave KErrNotSupported if the stream data format is unsupported - */ - EXPORT_C CVCFolderInfo* CVCFolderInfo::NewL( RReadStream &aStream ) - { - CVCFolderInfo* self = new (ELeave) CVCFolderInfo; - CleanupStack::PushL( self ); - self->ConstructL( aStream ); - CleanupStack::Pop( self ); - return self; - } - -CVCFolderInfo::CVCFolderInfo( TUint32 aHelpTopicId, TUint aIconIndex ) : - iHelpTopicId( aHelpTopicId ), iIconIndex (aIconIndex ) - { - // empty - } - -void CVCFolderInfo::ConstructL( RReadStream &aStream ) - { - /** - * @todo extract the repeated descriptor internalization code into - * a separate method - */ - TInt32 ver; - aStream >> ver; - __ASSERT_ALWAYS( ver == KVCFolderInfoProtocolVersion, User::Leave( KErrNotSupported ) ); - iTitle = HBufC::NewL( aStream.ReadInt32L() ); - TPtr pTitle = iTitle->Des(); - aStream >> pTitle; - iListedName = HBufC::NewL( aStream.ReadInt32L() ); - TPtr pListedName = iListedName->Des(); - aStream >> pListedName; - iHelpTopicId = aStream.ReadUint32L(); - iIconFile = HBufC::NewL( aStream.ReadInt32L() ); - TPtr pIconFile = iIconFile->Des(); - aStream >> pIconFile; - iIconIndex = aStream.ReadUint32L(); - } - - -/** -* Second-phase constructor -*/ -void CVCFolderInfo::ConstructL( const TDesC& aTitle, const TDesC& aListedName, - const TDesC& aIconFile ) - { - RUBY_DEBUG_BLOCKL( "" ); - iTitle = HBufC::NewL( aTitle.Length() ); - *iTitle = aTitle; - iListedName = HBufC::NewL( aListedName.Length() ); - *iListedName = aListedName; - iIconFile = HBufC::NewL( aIconFile.Length() ); - *iIconFile = aIconFile; - } - -EXPORT_C CVCFolderInfo::~CVCFolderInfo() - { - delete iListedName; - delete iTitle; - delete iIconFile; - } - -/** - * Saves the command to stream. - * Descriptor components are saved as pairs, where - * is TInt32 and is the default descriptor represetation - * TBools are saved as TInt32 either - */ -EXPORT_C void CVCFolderInfo::ExternalizeL( RWriteStream &aStream ) const - { - aStream << KVCFolderInfoProtocolVersion; - aStream << static_cast( iTitle->Length() ); - aStream << *iTitle; - aStream << static_cast( iListedName->Length() ); - aStream << *iListedName; - aStream << iHelpTopicId; - aStream << static_cast ( iIconFile->Length() ); - aStream << *iIconFile; - // Mandate saving index as Uint32 to preserve the string format - aStream << static_cast ( iIconIndex ); - } - - -EXPORT_C const TDesC& CVCFolderInfo::Title() const - { - return *iTitle; - } - -EXPORT_C const TDesC& CVCFolderInfo::ListedName() const - { - return *iListedName; - } - -EXPORT_C TUint32 CVCFolderInfo::HelpTopicId() const - { - return iHelpTopicId; - } - -EXPORT_C TBool CVCFolderInfo::operator==( const CVCFolderInfo& aFolderInfo ) const - { - return ( - ( iHelpTopicId == aFolderInfo.HelpTopicId() ) && - ( *iTitle == aFolderInfo.Title() ) && - ( *iListedName == aFolderInfo.ListedName() ) && - ( *iIconFile == aFolderInfo.IconFile() ) && - ( iIconIndex == aFolderInfo.IconIndex() ) - ); - } - -EXPORT_C TDesC& CVCFolderInfo::IconFile() const - { - return *iIconFile; - } - -EXPORT_C TUint CVCFolderInfo::IconIndex() const - { - return iIconIndex; - } - -/** -* Creates an icon to represent this folder. Works only if CEikonEnv is available -* @return Icon for the folder -*/ -EXPORT_C CGulIcon* CVCFolderInfo::IconLC() const - { - MAknsSkinInstance* skin = AknsUtils::SkinInstance(); - CFbsBitmap* bitmap = NULL; - CFbsBitmap* mask = NULL; - const TInt KBitmapsPerIcon = 2; - - // Every "index" corrsponds to two bitmaps - actual icon and its mask - TInt iconIndex = KMifIdFirst + IconIndex()*KBitmapsPerIcon; - TInt maskIndex = iconIndex + 1; - TDesC& iconFile = IconFile(); - if ( iconFile == KNullDesC ) - { - iconFile = KDefaultIconFile; - } - - TRAPD( err, - AknsUtils::CreateIconLC( skin, *KIconId[ IconIndex() ], - bitmap, mask, iconFile, iconIndex, - maskIndex ); - CleanupStack::Pop( 2 ); // mask, bitmap - ) - if( err != KErrNone ) - { - RUBY_DEBUG1( "CreateIconLC failed with %d. Loading default icon", err ); - AknsUtils::CreateIconLC( skin, *KIconId[ IconIndex() ], - bitmap, mask, KDefaultIconFile, KDefaultIconIndex, - KDefaultIconIndex + 1 ); - CleanupStack::Pop( 2 ); // mask, bitmap - } - - CleanupStack::PushL( mask ); - CleanupStack::PushL( bitmap ); - CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); - icon->SetBitmapsOwnedExternally( EFalse ); - - // icon now owns the bitmaps, no need to keep on cleanup stack. - CleanupStack::Pop( bitmap ); - CleanupStack::Pop( mask ); - - CleanupStack::PushL( icon ); - return icon; - } - -//End of file