messagingappbase/msgeditor/modelsrc/MsgAttachmentInfo.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgeditor/modelsrc/MsgAttachmentInfo.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,461 @@
+/*
+* 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:  MsgAttachmentInfo implementation
+*
+*/
+
+
+
+// ========== INCLUDE FILES ================================
+
+#include <eikenv.h>
+#include <gulicon.h>
+
+#include "MsgAttachmentInfo.h"
+#include "MsgAttachmentModel.h"
+#include "MsgAttachmentUtils.h"
+
+// ========== EXTERNAL DATA STRUCTURES =====================
+
+// ========== EXTERNAL FUNCTION PROTOTYPES =================
+
+// ========== CONSTANTS ====================================
+
+// ========== MACROS =======================================
+
+// ========== LOCAL CONSTANTS AND MACROS ===================
+
+// ========== MODULE DATA STRUCTURES =======================
+
+// ========== LOCAL FUNCTION PROTOTYPES ====================
+
+// ========== LOCAL FUNCTIONS ==============================
+
+// ========== MEMBER FUNCTIONS =============================
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::NewL
+//
+// Factory method.
+// ---------------------------------------------------------
+//
+CMsgAttachmentInfo* CMsgAttachmentInfo::NewL(
+    CMsgAttachmentModel& aAttachmentModel,
+    const TFileName& aFileName,
+    TInt aSize,
+    TBool aFetched,
+    TBool aAttachedThisSession,
+    TMsvAttachmentId aAttachmentId,
+    const TDataType& aDataType,
+    TDRMDataType aDRMDataType )
+    {
+    CMsgAttachmentInfo* self = new ( ELeave ) CMsgAttachmentInfo(
+        aAttachmentModel,
+        aFileName,
+        aSize,
+        aFetched,
+        aAttachedThisSession );
+
+    CleanupStack::PushL( self );
+    
+    // Must be set before ConstructL is called as might be used on
+    // during CMsgAttachmentModel::BitmapForFileL function call.
+    self->SetAttachmentId( aAttachmentId ); 
+    self->ConstructL( aDataType, aDRMDataType );
+    CleanupStack::Pop(); // self
+
+    return self;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::~CMsgAttachmentInfo
+//
+// Destructor.
+// ---------------------------------------------------------
+//
+EXPORT_C CMsgAttachmentInfo::~CMsgAttachmentInfo()
+    {
+    delete iIcon;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::FileName
+//
+// Returns reference to the filename.
+// ---------------------------------------------------------
+//
+EXPORT_C const TFileName& CMsgAttachmentInfo::FileName() const
+    {
+    return iFileName;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetFileName
+//
+// Set the filename of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetFileName( const TFileName& aFileName )
+    {
+    iFileName = aFileName;
+
+    // find file size
+    RFile file;
+    RFs& fs = CEikonEnv::Static()->FsSession();
+
+    TInt err = file.Open( fs, iFileName, EFileShareAny );
+    if ( err == KErrAccessDenied || err == KErrInUse )
+        {
+        err = file.Open( fs, iFileName, EFileShareReadersOnly );
+        }
+    if ( err == KErrNone )
+        {
+        file.Size( iSize );
+        }
+    file.Close();
+
+    TRAP_IGNORE( ChangeSizeAndIconL() );
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::Size
+//
+// Returns the size.
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CMsgAttachmentInfo::Size() const
+    {
+    return iSize;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SizeString
+//
+// Returns the size string.
+// ---------------------------------------------------------
+//
+EXPORT_C TBuf<KMsgAttaSizeStringLength> CMsgAttachmentInfo::SizeString() const
+    {
+    return iSizeString;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::AttachmentId
+//
+// Returns the attachment id.
+// ---------------------------------------------------------
+//
+EXPORT_C TMsvAttachmentId CMsgAttachmentInfo::AttachmentId() const
+    {
+    return iAttachmentId;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetAttachmentId
+//
+// Sets the attachment id.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetAttachmentId( TMsvAttachmentId aId )
+    {
+    iAttachmentId = aId;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::IsFetched
+//
+// Returns ETrue if this attachment is fetched.
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CMsgAttachmentInfo::IsFetched() const
+    {
+    return iAttachmentFlags & EAttachmentFetched;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetFetched
+//
+// Sets the fetched attribute of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetFetched( TBool aFetched )
+    {
+    TBool updateIcon( EFalse );
+    
+    if ( aFetched && !IsFetched() )
+        {
+        iAttachmentFlags |= EAttachmentFetched;
+        updateIcon = ETrue;
+        }
+    else if ( !aFetched && IsFetched() )
+        {
+        iAttachmentFlags &= ~EAttachmentFetched;
+        updateIcon = ETrue;
+        }
+        
+    if ( iIcon && updateIcon )
+        {
+        // No need to update icon if it's not yet initialized.
+        TRAP_IGNORE( DoUpdateIconL() );
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::DataType
+//
+// Returns the datatype (MIME type) of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C const TDataType& CMsgAttachmentInfo::DataType() const
+    {
+    return iDataType;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetDataType
+//
+// Sets the datatype (MIME type) of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetDataType( const TDataType& aDataType )
+    {
+    if ( iDataType.Des8().CompareF( aDataType.Des8() ) != 0 )
+        {
+        iDataType = aDataType;
+        
+        TRAP_IGNORE( DoUpdateIconL() );
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetDRMDataType(TDRMDataType aDRMDataType)
+//
+// Sets the DRMtype of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetDRMDataType( TDRMDataType aDRMDataType )
+    {
+    if ( iDRMDataType != aDRMDataType )
+        {
+        iDRMDataType = aDRMDataType;
+        
+        TRAP_IGNORE( DoUpdateIconL() );
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::DRMDataType
+//
+// Returns the DRMtype of this attachment.
+// ---------------------------------------------------------
+//
+EXPORT_C TInt CMsgAttachmentInfo::DRMDataType() const
+    {
+    return iDRMDataType;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::IsAttachedThisSession
+//
+// Returns ETrue if this attachment was attached in this session.
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CMsgAttachmentInfo::IsAttachedThisSession() const
+    {
+    return iAttachmentFlags & EAttachedThisSession;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetAttachedThisSession
+//
+// Sets flag which tells if this attachment is attached in this session.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetAttachedThisSession( TBool aFlag )
+    {
+    if ( aFlag )
+        {
+        iAttachmentFlags |= EAttachedThisSession;
+        }
+    else
+        {
+        iAttachmentFlags &= ~EAttachedThisSession;
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::IsSupported
+//
+// Returns supported flag.
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CMsgAttachmentInfo::IsSupported() const
+    {
+    return iAttachmentFlags & EAttachmentSupported;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetSupported
+//
+// Sets supported flag.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetSupported( TBool aFlag )
+    {
+    if ( aFlag )
+        {
+        iAttachmentFlags |= EAttachmentSupported;
+        }
+    else
+        {
+        iAttachmentFlags &= ~EAttachmentSupported;
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::Icon
+//
+// Returns the icon.
+// ---------------------------------------------------------
+//
+EXPORT_C CGulIcon* CMsgAttachmentInfo::Icon() const
+    {
+    return iIcon;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetSeparator
+//
+// Returns separator flag.
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetSeparator( TBool aFlag )
+    {
+    if ( aFlag )
+        {
+        iAttachmentFlags |= ESeparatorBefore;
+        }
+    else
+        {
+        iAttachmentFlags &= ~ESeparatorBefore;
+        }
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::IsSeparator
+//
+// Sets separator flag.
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CMsgAttachmentInfo::IsSeparator() const
+    {
+    return iAttachmentFlags & ESeparatorBefore;;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::CMsgAttachmentInfo
+//
+// Constructor.
+// ---------------------------------------------------------
+//
+EXPORT_C CMsgAttachmentInfo::CMsgAttachmentInfo( CMsgAttachmentModel& aAttachmentModel,
+                                                 const TFileName& aFileName,
+                                                 TInt aSize,
+                                                 TBool aFetched,
+                                                 TBool aAttachedThisSession ) :
+    iAttachmentModel( aAttachmentModel ),
+    iFileName( aFileName ),
+    iSize( aSize ),
+    iCharset( KErrNotFound )
+    {
+    SetFetched( aFetched );
+    SetAttachedThisSession ( aAttachedThisSession );
+    SetSupported( ETrue );
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::ConstructL
+//
+//
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::ConstructL( const TDataType& aDataType,
+                                              TDRMDataType aDRMDataType )
+    {
+    iDataType = aDataType;
+    iDRMDataType = aDRMDataType;
+    ChangeSizeAndIconL();
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::ChangeSizeAndIconL
+//
+//
+// ---------------------------------------------------------
+//
+void CMsgAttachmentInfo::ChangeSizeAndIconL()
+    {
+    MsgAttachmentUtils::FileSizeToStringL( iSizeString, iSize );
+
+    DoUpdateIconL();
+    }
+
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::SetSaved
+//
+//
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgAttachmentInfo::SetSaved( TBool aSaved )
+    {
+    if ( aSaved )
+        {
+        iAttachmentFlags |= EAttachmentSaved;
+        }
+    else
+        {
+        iAttachmentFlags &= ~EAttachmentSaved;
+        }
+    }
+    
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::IsSaved
+//
+//
+// ---------------------------------------------------------
+//
+EXPORT_C TBool CMsgAttachmentInfo::IsSaved( ) const
+    {
+    return iAttachmentFlags & EAttachmentSaved;
+    }
+
+// ---------------------------------------------------------
+// CMsgAttachmentInfo::DoUpdateIconL
+//
+//
+// ---------------------------------------------------------
+//
+void CMsgAttachmentInfo::DoUpdateIconL()
+    {
+    CGulIcon* resultIcon = iAttachmentModel.BitmapForFileL( *this );
+        
+    // icons are owned by atta info object.
+    delete iIcon;
+    iIcon = resultIcon;
+    }
+
+// ========== OTHER EXPORTED FUNCTIONS =====================
+
+//  End of File