--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/filemanager/View/src/CFileManagerInfoPopup.cpp Mon Jan 18 20:09:41 2010 +0200
@@ -0,0 +1,443 @@
+/*
+* Copyright (c) 2002-2007 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: Popup to show the item information, view info
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknlists.h>
+#include <StringLoader.h>
+#include <cmemstatepopup.h>
+#include <FileManagerView.rsg>
+#include <CFileManagerItemProperties.h>
+#include <CFileManagerFeatureManager.h>
+#include <drmuihandling.h>
+#include "CFileManagerInfoPopup.h"
+#include "CFileManagerFullOmaDrmInfo.h"
+
+// CONSTANTS
+_LIT( KDateFormat1, "%1" );
+_LIT( KDateFormat2, "%2" );
+_LIT( KDateFormat3, "%3" );
+_LIT( KTimeFormatBefore, "%-B" );
+_LIT( KTimeFormatAfter, "%+B" );
+_LIT( KTimeFormatHour, "%J" );
+_LIT( KTimeFormatMinutes, "%T" );
+_LIT( KTimeFormatSpace, " ");
+
+_LIT( KNumberFormat, "%d" );
+_LIT( KSeparator, "\t" );
+const TUint KDefaultItemCount = 3;
+const TUint KMaxInfoPopupWidth = 16; // From AVKON LAF document
+const TUint KSecondSeparator = 1;
+const TUint KThirdSeparator = 2;
+const TInt KNumBufLen = 24;
+_LIT( KNumBufFormatString, "%d" );
+_LIT( KNumBufSpaceString, " " );
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::CFileManagerInfoPopup
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup::CFileManagerInfoPopup(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager ) :
+ iProperties( aProperties ),
+ iFeatureManager( aFeatureManager ),
+ iUiHandling( NULL )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ConstructDataArrayL
+//
+// -----------------------------------------------------------------------------
+//
+MDesCArray* CFileManagerInfoPopup::ConstructDataArrayL()
+ {
+ // Get unit utility instance
+ CMemStatePopup::GetUtilL( iUtil );
+
+ CDesCArray* array = new( ELeave ) CDesCArrayFlat( KDefaultItemCount );
+ CleanupStack::PushL( array );
+
+ HBufC* title = NULL;
+ TUint32 itemType( iProperties.TypeL() );
+ if( itemType & CFileManagerItemProperties::EFolder )
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_FLDR );
+ }
+ else if( itemType & CFileManagerItemProperties::ELink )
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_LINK );
+ }
+ else
+ {
+ title = StringLoader::LoadLC( R_QTN_FMGR_INFO_HEADING_FILE );
+ }
+ SetTitleL( *title );
+ CleanupStack::PopAndDestroy( title );
+
+ if ( ( itemType & CFileManagerItemProperties::EDrmProtected ) &&
+ iFeatureManager.IsDrmFullSupported() )
+ {
+ CFileManagerFullOmaDrmInfo* drmInfo =
+ CFileManagerFullOmaDrmInfo::NewLC( *array, iProperties.FullPath(), *iCoeEnv );
+ CleanupStack::PopAndDestroy( drmInfo );
+ }
+
+ // Name of the file/folder
+ HBufC* nameEntry = NameEntryLC();
+ array->AppendL( *nameEntry );
+ CleanupStack::PopAndDestroy( nameEntry );
+
+ if( itemType & CFileManagerItemProperties::EFile )
+ {
+ // Type of the file
+ HBufC* type = TypeEntryLC();
+ array->AppendL( *type );
+ CleanupStack::PopAndDestroy( type );
+ }
+
+ // Modification date
+ HBufC* date = DateEntryLC();
+ array->AppendL( *date );
+ CleanupStack::PopAndDestroy( date );
+
+ // Modification time
+ HBufC* time = TimeEntryLC();
+ array->AppendL( *time );
+ CleanupStack::PopAndDestroy( time );
+
+ // Size of file/folder
+ HBufC* size = SizeEntryLC();
+ array->AppendL( *size );
+ CleanupStack::PopAndDestroy( size );
+
+ TUint32 defaultFolderMask = CFileManagerItemProperties::EFolder |
+ CFileManagerItemProperties::EDefault;
+ if( ( itemType & defaultFolderMask ) == defaultFolderMask )
+ {
+ HBufC* str = DefaultFolderEntryLC();
+ array->AppendL( *str );
+ CleanupStack::PopAndDestroy( str );
+ }
+
+ if( itemType & CFileManagerItemProperties::EFolder )
+ {
+ HBufC* folders = ResourceStringValueLC(
+ R_QTN_FMGR_INFO_CONTAIN_FLDR,
+ iProperties.FoldersContainedL() );
+ array->AppendL( *folders );
+ CleanupStack::PopAndDestroy( folders );
+
+ HBufC* files = ResourceStringValueLC(
+ R_QTN_FMGR_INFO_CONTAIN_FILE,
+ iProperties.FilesContainedL() );
+ array->AppendL( *files );
+ CleanupStack::PopAndDestroy( files );
+ }
+
+ CleanupStack::Pop( array );
+ return array;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup* CFileManagerInfoPopup::NewL(
+ CFileManagerItemProperties& aProperties,
+ const CFileManagerFeatureManager& aFeatureManager )
+ {
+ CFileManagerInfoPopup* self = new( ELeave ) CFileManagerInfoPopup(
+ aProperties, aFeatureManager );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CFileManagerInfoPopup::ConstructL()
+ {
+ iUiHandling = DRM::CDrmUiHandling::NewL();
+
+ CFileManagerPopupBase::ConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::~CFileManagerInfoPopup
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CFileManagerInfoPopup::~CFileManagerInfoPopup()
+ {
+ delete iUtil;
+
+ delete iUiHandling;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::NameEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::NameEntryLC()
+ {
+ HBufC* name = StringLoader::LoadLC( R_QTN_SWINS_LSH2_APPS_NAME );
+ HBufC* dataStr = HBufC::NewLC(
+ name->Length() + 1 + iProperties.LocalizedName().Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *name );
+ dataPtr.Append( KSeparator );
+ HBufC* itemNameBuf = NULL;
+ if ( iProperties.TypeL() & CFileManagerItemProperties::EFolder )
+ {
+ const TPtrC ptr( iProperties.LocalizedName() );
+ itemNameBuf = ptr.AllocLC();
+ }
+ else
+ {
+ const TPtrC ptr( iProperties.Name() );
+ itemNameBuf = ptr.AllocLC();
+ }
+ // Remove all possible tabs in the name so listbox won't get broken
+ TPtr itemNamePtr = itemNameBuf->Des();
+ AknTextUtils::StripCharacters( itemNamePtr, KSeparator );
+ dataPtr.Append( itemNamePtr );
+ CleanupStack::PopAndDestroy( itemNameBuf );
+ CleanupStack::Pop( dataStr );
+ CleanupStack::PopAndDestroy( name );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::TypeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::TypeEntryLC()
+ {
+ HBufC* type = StringLoader::LoadLC( R_QTN_SWINS_LSH2_APPS_TYPE );
+ HBufC* dataStr = HBufC::NewL( type->Length() + 1 + iProperties.Ext().Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *type );
+ dataPtr.Append( KSeparator );
+ const TPtrC ptr( iProperties.Ext() );
+ HBufC* extBuf = ptr.AllocLC();
+ // Remove all possible tabs in the name so listbox won't get broken
+ TPtr extPtr = extBuf->Des();
+ AknTextUtils::StripCharacters( extPtr, KSeparator );
+ dataPtr.Append( extPtr );
+ CleanupStack::PopAndDestroy( extBuf );
+ CleanupStack::PopAndDestroy( type );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::DateEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::DateEntryLC()
+ {
+ HBufC* date = StringLoader::LoadLC( R_QTN_ALBUM_DATIM_DATE );
+ TBuf<KMaxInfoPopupWidth> dateStr;
+ TBuf<KMaxInfoPopupWidth> dateStrFormat;
+ // Localized date separator form
+ TLocale local;
+ TTime localTime;
+ User::LeaveIfError( iProperties.ModifiedLocalDate( localTime ) );
+ dateStrFormat.Append( KDateFormat1 );
+ dateStrFormat.Append( local.DateSeparator( KSecondSeparator ) );
+ dateStrFormat.Append( KDateFormat2 );
+ dateStrFormat.Append( local.DateSeparator( KThirdSeparator ) );
+ dateStrFormat.Append( KDateFormat3 );
+ localTime.FormatL( dateStr, dateStrFormat );
+ HBufC* dataStr = HBufC::NewL( date->Length() + 1 + dateStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *date );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( dateStr );
+
+ CleanupStack::PopAndDestroy( date );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::TimeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::TimeEntryLC()
+ {
+ HBufC* time = StringLoader::LoadLC( R_QTN_ALBUM_DATIM_TIME );
+ TBuf<KMaxInfoPopupWidth> timeStr;
+ TBuf<KMaxInfoPopupWidth> timeStrFormat;
+ TLocale local;
+ TTime localTime;
+ User::LeaveIfError( iProperties.ModifiedLocalDate( localTime ) );
+
+ if( local.AmPmSymbolPosition() == ELocaleBefore )
+ {
+ timeStrFormat.Append( KTimeFormatBefore );
+ timeStrFormat.Append( KTimeFormatSpace );
+ timeStrFormat.Append( KTimeFormatHour );
+ timeStrFormat.Append( local.TimeSeparator( KSecondSeparator ) );
+ timeStrFormat.Append( KTimeFormatMinutes );
+
+ localTime.FormatL( timeStr, timeStrFormat );
+ }
+ else
+ {
+ timeStrFormat.Append( KTimeFormatHour );
+ timeStrFormat.Append( local.TimeSeparator( KSecondSeparator ) );
+ timeStrFormat.Append( KTimeFormatMinutes );
+ timeStrFormat.Append( KTimeFormatSpace );
+ timeStrFormat.Append( KTimeFormatAfter );
+
+ localTime.FormatL( timeStr, timeStrFormat );
+ }
+
+ HBufC* dataStr = HBufC::NewL( time->Length() + 1 + timeStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *time );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( timeStr );
+
+ CleanupStack::PopAndDestroy( time );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::SizeEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::SizeEntryLC()
+ {
+ TInt64 sizeInBytes( iProperties.SizeL() );
+ TPtrC unit( iUtil->SolveUnitAndSize( sizeInBytes ) );
+ TBuf< KNumBufLen > numBuf;
+ numBuf.Format( KNumBufFormatString, I64INT( sizeInBytes ) );
+
+ HBufC* header = StringLoader::LoadLC( R_QTN_ALBUM_LITXT_SIZE );
+ HBufC* dataStr = HBufC::NewL(
+ header->Length() + 1 +
+ numBuf.Length() +
+ KNumBufSpaceString().Length() +
+ unit.Length() );
+ TPtr dataPtr( dataStr->Des() );
+
+ dataPtr.Append( *header );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( numBuf );
+ dataPtr.Append( KNumBufSpaceString );
+ dataPtr.Append( unit );
+
+ CleanupStack::PopAndDestroy( header );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::DefaultFolderEntryLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::DefaultFolderEntryLC()
+ {
+ HBufC* header = StringLoader::LoadLC( R_QTN_FMGR_INFO_FLDR_DEFAULT );
+ HBufC* data = StringLoader::LoadLC( R_QTN_FMGR_INFO_DEF_FLDR_TEXT );
+ HBufC* dataStr = HBufC::NewL( header->Length() + 1 + data->Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *header );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( *data );
+
+ CleanupStack::PopAndDestroy( data );
+ CleanupStack::PopAndDestroy( header );
+ CleanupStack::PushL( dataStr );
+
+ return dataStr;
+ }
+
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ResourceStringValueLC
+//
+// -----------------------------------------------------------------------------
+//
+HBufC* CFileManagerInfoPopup::ResourceStringValueLC( TInt aResId, TInt aValue )
+ {
+ HBufC* string = StringLoader::LoadLC( aResId );
+ TBuf<KMaxInfoPopupWidth> infoStr;
+ infoStr.Format( KNumberFormat, aValue );
+ HBufC* dataStr = HBufC::NewL( string->Length() + 1 + infoStr.Length() );
+ TPtr dataPtr( dataStr->Des() );
+ dataPtr.Append( *string );
+ dataPtr.Append( KSeparator );
+ dataPtr.Append( infoStr );
+
+ CleanupStack::PopAndDestroy( string );
+ CleanupStack::PushL( dataStr );
+
+ AknTextUtils::LanguageSpecificNumberConversion( dataPtr );
+
+ return dataStr;
+ }
+
+#ifdef RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+// -----------------------------------------------------------------------------
+// CFileManagerInfoPopup::ActivateLinkL
+//
+// -----------------------------------------------------------------------------
+//
+void CFileManagerInfoPopup::ActivateLinkL()
+ {
+ CFileManagerFullOmaDrmInfo::ViewDetailsL(
+ iProperties.FullPath(),
+ iUiHandling );
+ }
+#endif //RD_DRM_COMMON_INTERFACE_FOR_OMA_AND_WMDRM
+
+// End of File