--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/msgeditor/mediacontrolsrc/MsgSvgControl.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,442 @@
+/*
+* Copyright (c) 2005-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:
+* MsgEditor svgt UI control - a Message Editor Base control.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "MsgSvgControl.h"
+
+#include <AknDialog.h>
+#include <aknlayoutscalable_apps.cdl.h>
+
+#include <AknUtils.h>
+#include <msgsvgutils.h>
+#include <AknsDrawUtils.h>
+
+#include <gulicon.h>
+#include <MsgEditorCommon.h>
+
+#include "MsgFrameControl.h"
+#include "MsgIconControl.h"
+
+#include "MsgMediaControlLogging.h"
+
+// ==========================================================
+
+// EXTERNAL DATA STRUCTURES
+
+// EXTERNAL FUNCTION PROTOTYPES
+
+// CONSTANTS
+
+// MACROS
+
+// LOCAL CONSTANTS AND MACROS
+
+// MODULE DATA STRUCTURES
+
+// LOCAL FUNCTION PROTOTYPES
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CMsgSvgControl::CMsgSvgControl
+//
+// Constructor.
+// ---------------------------------------------------------
+//
+CMsgSvgControl::CMsgSvgControl( MMsgBaseControlObserver& aBaseControlObserver ) :
+ CMsgMediaControl( aBaseControlObserver, EMsgComponentIdSvg, EMsgSvgControl )
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::ConstructL
+//
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::ConstructL( CMsgEditorView& aParent, MMsgAsyncControlObserver* aObserver )
+ {
+ BaseConstructL( aParent, aObserver );
+
+ SetSize( CalculateControlSize( MsgEditorCommons::MsgDataPane().Size() ) );
+
+ iSvgUtils = new( ELeave ) CMsgSvgUtils;
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::NewL
+//
+// Two-phased constructor.
+// ---------------------------------------------------------
+//
+#ifdef RD_SVGT_IN_MESSAGING
+EXPORT_C CMsgSvgControl* CMsgSvgControl::NewL( CMsgEditorView& aParent,
+ MMsgAsyncControlObserver* aObserver )
+ {
+
+ CMsgSvgControl* self = new( ELeave ) CMsgSvgControl( aParent );
+
+ CleanupStack::PushL( self );
+ self->ConstructL( aParent, aObserver );
+ CleanupStack::Pop( self );
+
+ return self;
+ }
+#else
+EXPORT_C CMsgSvgControl* CMsgSvgControl::NewL( CMsgEditorView& /*aParent*/,
+ MMsgAsyncControlObserver* /*aObserver*/ )
+ {
+ User::Leave( KErrNotSupported );
+ return NULL; //getting rid of warning
+ }
+#endif
+
+// ---------------------------------------------------------
+// CMsgSvgControl::~CMsgSvgControl
+//
+// Destructor
+// ---------------------------------------------------------
+//
+CMsgSvgControl::~CMsgSvgControl()
+ {
+ delete iSvgIndicator;
+ delete iSvgUtils;
+
+ iFileHandle.Close();
+ }
+
+
+// ---------------------------------------------------------
+// CMsgSvgControl::LoadL
+//
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::LoadL( RFile& aFileHandle )
+ {
+ iFileHandle.Close();
+ User::LeaveIfError( iFileHandle.Duplicate( aFileHandle ) );
+
+ DoLoadL();
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::DoLoadL
+//
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::DoLoadL()
+ {
+ TSize thumbnailSize( Size() );
+ thumbnailSize = TSize( Max( 0, thumbnailSize.iWidth - iFrame->FrameBorderSize().iWidth ),
+ Max( 0, thumbnailSize.iHeight - iFrame->FrameBorderSize().iHeight ) );
+
+ // Use svgt thumbnail creation directly
+ CFbsBitmap* thumbnailBitmap = new ( ELeave ) CFbsBitmap;
+ CleanupStack::PushL( thumbnailBitmap );
+
+ User::LeaveIfError( thumbnailBitmap->Create( thumbnailSize,
+ iCoeEnv->ScreenDevice()->DisplayMode() ) );
+
+ CFbsBitmap* thumbnailMask = new ( ELeave ) CFbsBitmap;
+ CleanupStack::PushL( thumbnailMask );
+
+ User::LeaveIfError( thumbnailMask->Create( thumbnailSize,
+ EGray256 ) );
+
+ CGulIcon* thumbnailIcon = CGulIcon::NewL( thumbnailBitmap, thumbnailMask );
+ CleanupStack::Pop( 2, thumbnailBitmap );
+
+ iIconControl->SetIcon( thumbnailIcon );
+
+ // Incase this is not fulfilling the requirements, it might be an
+ // option to go and check for GenerateThumbnailL() in the msgcommonutils
+
+ iSvgUtils->GenerateThumbnailL( iFileHandle,
+ thumbnailIcon->Bitmap(),
+ thumbnailIcon->Mask(),
+ EFalse,
+ thumbnailSize );
+
+ // Resize bitmaps to actual content size.
+ thumbnailBitmap->Resize( thumbnailSize );
+ thumbnailMask->Resize( thumbnailSize );
+
+ iIconControl->SetSize( thumbnailSize );
+ iIconControl->MakeVisible( ETrue );
+
+ iFrame->SetImageSize( thumbnailSize );
+
+ if ( iSvgIndicator )
+ {
+ iSvgIndicator->MakeVisible( ETrue );
+ }
+
+ SetState( EMsgAsyncControlStateReady );
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::Cancel
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::Cancel()
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::LoadIndicatorIconL
+// ---------------------------------------------------------
+//
+EXPORT_C void CMsgSvgControl::LoadIndicatorIconL( const TAknsItemID& aId,
+ const TDesC& aFileName,
+ const TInt aFileBitmapId,
+ const TInt aFileMaskId )
+ {
+ delete iSvgIndicator;
+ iSvgIndicator = NULL;
+
+ iSvgIndicator = CMsgIconControl::NewL( *this );
+ iSvgIndicator->LoadIconL( aId,
+ aFileName,
+ aFileBitmapId,
+ aFileMaskId );
+
+ TAknLayoutRect indicatorRect;
+ indicatorRect.LayoutRect( MsgEditorCommons::MsgDataPane(),
+ AknLayoutScalable_Apps::msg_data_pane_g7().LayoutLine() );
+
+ iSvgIndicator->SetBitmapSizeL( indicatorRect.Rect().Size() );
+
+ if ( iIconControl &&
+ iIconControl->IsVisible() )
+ {
+ iSvgIndicator->MakeVisible( ETrue );
+ }
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::SetIconExtent
+//
+// Updates the icon position & size. Icon control is centered
+// to the control area.
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::SetIconExtent()
+ {
+ if ( iSvgIndicator )
+ {
+ TSize size = iSvgIndicator->BitmapSize();
+
+ TPoint position( iIconControl->Position() );
+ position.iY += iIconControl->Size().iHeight;
+ position.iY -= size.iHeight;
+
+ iSvgIndicator->SetExtent( position, size );
+ }
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::SizeChanged
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::SizeChanged()
+ {
+ CMsgMediaControl::SizeChanged();
+
+ SetIconExtent();
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::ComponentControl
+// ---------------------------------------------------------
+//
+CCoeControl* CMsgSvgControl::ComponentControl( TInt aIndex ) const
+ {
+ CCoeControl* result = NULL;
+
+ switch ( aIndex )
+ {
+ case 0:
+ {
+ result = iFrame;
+ break;
+ }
+ case 1:
+ {
+ result = iIconControl;
+ break;
+ }
+ case 2:
+ {
+ result = iSvgIndicator;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::CountComponentControls
+//
+// ---------------------------------------------------------
+//
+TInt CMsgSvgControl::CountComponentControls() const
+ {
+ TInt result( 2 );
+ if ( iSvgIndicator )
+ {
+ result++;
+ }
+
+ return result;
+ }
+
+
+// ---------------------------------------------------------
+// CMsgSvgControl::Draw
+//
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::Draw( const TRect& aRect ) const
+ {
+ if ( iSvgIndicator )
+ {
+ CWindowGc& gc = SystemGc();
+
+ if ( !AknsDrawUtils::BackgroundBetweenRects( AknsUtils::SkinInstance(),
+ AknsDrawUtils::ControlContext( this ),
+ this,
+ gc,
+ aRect,
+ iIconControl->Rect() ) )
+ {
+ gc.SetBrushColor( AKN_LAF_COLOR( 0 ) );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.DrawRect( aRect );
+ }
+
+ gc.SetBrushColor( KRgbWhite.Value() );
+ gc.SetPenStyle( CGraphicsContext::ENullPen );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+ gc.DrawRect( iIconControl->Rect() );
+ }
+ else
+ {
+ CMsgMediaControl::Draw( aRect );
+ }
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::Close
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::Close()
+ {
+ SetState( EMsgAsyncControlStateIdle );
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::SetAndGetSizeL
+//
+// Calculates and sets the size of the control and returns new size as
+// reference aSize.
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::SetAndGetSizeL( TSize& aSize )
+ {
+ aSize = CalculateControlSize( aSize );
+ SetSize( aSize );
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::HandleResourceChange
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::HandleResourceChange( TInt aType )
+ {
+ CMsgMediaControl::HandleResourceChange( aType );
+
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ SetSize( CalculateControlSize( MsgEditorCommons::MsgDataPane().Size() ) );
+
+ TRAP_IGNORE( DoLoadL() );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CMsgSvgControl::PlayL
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::PlayL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::Stop
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::Stop()
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::PauseL
+// ---------------------------------------------------------
+//
+void CMsgSvgControl::PauseL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CMsgSvgControl::CalculateControlSize
+// ---------------------------------------------------------
+//
+TSize CMsgSvgControl::CalculateControlSize( TSize aProposedSize ) const
+ {
+ TAknLayoutRect controLayout;
+ controLayout.LayoutRect( MsgEditorCommons::MsgDataPane(),
+ AknLayoutScalable_Apps::msg_data_pane_g1().LayoutLine() );
+
+ TSize controlSize = controLayout.Rect().Size();
+
+ // Make sure controlSize is multiple of iBaseLine
+ controlSize.iHeight = iBaseLine * ( controlSize.iHeight / iBaseLine );
+
+ if ( controlSize.iHeight > aProposedSize.iHeight )
+ {
+ controlSize.iHeight = aProposedSize.iHeight;
+ }
+
+ if ( controlSize.iWidth > aProposedSize.iWidth )
+ {
+ controlSize.iWidth = aProposedSize.iWidth;
+ }
+
+ return controlSize;
+ }
+
+// End of File
+