diff -r 000000000000 -r ff3acec5bc43 mpxplugins/viewplugins/views/albumarteditordialog/src/mpxalbumarteditordialogcustomcontrol.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mpxplugins/viewplugins/views/albumarteditordialog/src/mpxalbumarteditordialogcustomcontrol.cpp Thu Dec 17 08:45:05 2009 +0200 @@ -0,0 +1,380 @@ +/* +* 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: Music Player album art editor dialog implementation +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +#include "mpxalbumarteventobserver.h" +#include "mpxalbumarteditordialogcustomcontrol.h" + +// CONSTANTS +const TInt KMPXLabelCount = 2; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::NewLC +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMPXAlbumArtEditorDialogCustomControl* + CMPXAlbumArtEditorDialogCustomControl::NewLC( + const CCoeControl& aParent, + const TRect &aRect, + MMPXAlbumArtEventObserver* aObserver ) + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::NewLC" ); + CMPXAlbumArtEditorDialogCustomControl* self = + new ( ELeave ) CMPXAlbumArtEditorDialogCustomControl(); + CleanupStack::PushL( self ); + self->ConstructL( aParent, aRect, aObserver ); + return self; + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CMPXAlbumArtEditorDialogCustomControl* + CMPXAlbumArtEditorDialogCustomControl::NewL( + const CCoeControl& aParent, + const TRect &aRect, + MMPXAlbumArtEventObserver* aObserver ) + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::NewL" ); + CMPXAlbumArtEditorDialogCustomControl* self = NewLC( + aParent, aRect, aObserver ); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CMPXAlbumArtEditorDialogCustomControl::~CMPXAlbumArtEditorDialogCustomControl() + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::~CMPXAlbumArtEditorDialogCustomControl" ); + delete iImage; + delete iLabel; + delete iBackground; + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::CMPXAlbumArtEditorDialogCustomControl +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CMPXAlbumArtEditorDialogCustomControl::CMPXAlbumArtEditorDialogCustomControl() : + iLabel( NULL ), iObserver( NULL ) + { + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::ConstructL( + const CCoeControl& aParent, + const TRect &aRect, + MMPXAlbumArtEventObserver* aObserver ) + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::ConstructL" ); + SetMopParent( const_cast < CCoeControl* >( &aParent ) ); + CreateWindowL(); + + iImage = new ( ELeave ) CEikImage(); + iImage->SetContainerWindowL( *this ); + + iLabel = new ( ELeave ) CEikLabel; + iLabel->SetContainerWindowL( *this ); + iLabel->SetTextL( _L( "" ) ); + iLabel->MakeVisible ( EFalse ); + + iObserver = aObserver; + + iMode = EMPXAlbumArtEditorDialogBlank; + SetRect( aRect ); + HandleSkinChangedL(); + ActivateL(); + MakeVisible( ETrue ); + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::UpdateAlbumArt +// Updates new image to CEikImage +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::UpdateAlbumArt( + TMPXAlbumArtEditorDialogMode aMode, + CFbsBitmap* aNewAlbumArt ) + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::UpdateAlbumArt" ); + switch ( aMode ) + { + case EMPXAlbumArtEditorDialogAlbumArt: + { + iImage->SetPictureOwnedExternally( EFalse) ; + iImage->SetNewBitmaps( aNewAlbumArt, NULL ); + iImage->SetSize( iImage->MinimumSize() ); + iImage->SetPictureOwnedExternally( EFalse ); + iImage->SetAlignment( EHCenterVCenter ); + iImage->MakeVisible( ETrue ); + + TRect myRect = Rect(); + TSize bSize = aNewAlbumArt->SizeInPixels(); + AknLayoutUtils::LayoutImage( + iImage, myRect, EColor256, + ( myRect.Width() - bSize.iWidth ) / 2 , + ( myRect.Height() - bSize.iHeight ) / 2, + NULL, NULL, bSize.iWidth, bSize.iHeight ); + + // layout border + TInt tX = ( myRect.Width() - bSize.iWidth ) / 2; + TInt tY = ( myRect.Height() - bSize.iHeight ) / 2; + iBorder.iTl.iX = tX - 1; + iBorder.iTl.iY = tY - 1; + iBorder.iBr.iX = tX + bSize.iWidth + 1; + iBorder.iBr.iY = tY + bSize.iHeight + 1; + + TRAP_IGNORE( SetModeL( EMPXAlbumArtEditorDialogAlbumArt ) ); + break; + } + default: + { + TRAP_IGNORE( SetModeL( aMode ) ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::SetModeL +// Displays image in a specific mode, either Album Art/No Album Art or Various +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::SetModeL( + TMPXAlbumArtEditorDialogMode aMode ) + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::SetModeL" ); + iMode = aMode; + switch( iMode ) + { + case EMPXAlbumArtEditorDialogAlbumArt: + { + iLabel->MakeVisible( EFalse ); + iImage->MakeVisible( ETrue ); + DrawDeferred(); + break; + } + case EMPXAlbumArtEditorDialogNoAlbumArt: + { + if(iImage->Bitmap()) + { + iImage->MakeVisible( EFalse ); + } + iLabel->MakeVisible( EFalse ); + + HBufC* labeltext = StringLoader::LoadLC( + R_MPX_CUI_ALBUM_ART_NO_ART_TEXT ); + iLabel->SetTextL( *labeltext ); + CleanupStack::PopAndDestroy( labeltext ); + + iLabel->MakeVisible( ETrue ); + DrawDeferred(); + break; + } + case EMPXAlbumArtEditorDialogBlank: + iImage->MakeVisible( EFalse ); + break; + default: // some error + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::HandleSkinChangedL +// updates skin color +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::HandleSkinChangedL() + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::HandleSkinChangedL" ); + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + TRgb color = KRgbBlack; + // Color is not updated if it not found from the skin + AknsUtils::GetCachedColor( + skin, + color, + KAknsIIDQsnTextColors, + EAknsCIQsnTextColorsCG6 ); + + AknLayoutUtils::OverrideControlColorL( + *iLabel, + EColorLabelText, + color ); + } + +// --------------------------------------------------------------------------- +// From MMPXAlbumArtUtilObserver +// Notify that extraction of album art started. +// --------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::ExtractAlbumArtStarted() + { + // Do Nothing + } + +// --------------------------------------------------------------------------- +// From MMPXAlbumArtUtilObserver +// Album art is extracted from file and ready to use. +// --------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::ExtractAlbumArtCompleted( + CFbsBitmap* aBitmap, + TInt aErr ) + { + MPX_DEBUG3( "CMPXAlbumArtEditorDialogCustomControl::ExtractAlbumArtCompleted(bitmap:0x%x, err:%d)", + aBitmap, aErr ); + + if ( !aErr ) + { + UpdateAlbumArt( EMPXAlbumArtEditorDialogAlbumArt, aBitmap ); + } + else + { + // error case, do not display album art + UpdateAlbumArt( EMPXAlbumArtEditorDialogNoAlbumArt ); + } + if ( iObserver ) + { + TRAP_IGNORE ( + iObserver->HandleAlbumArtEventL( + EMPXAlbumArtEventExtractCompleted, aErr ) ); + } + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::Draw +// Draws to the display +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::Draw( const TRect& aRect ) const + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::Draw" ); + CWindowGc& gc = SystemGc(); + if ( iBackground ) + { + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + AknsDrawUtils::DrawBackground( + skin, + iBackground, + this, + gc, + aRect.iTl, + aRect, + KAknsDrawParamDefault ); + } + else + { + gc.Clear( aRect ); + } + gc.SetClippingRect( aRect ); + switch( iMode ) + { + case EMPXAlbumArtEditorDialogAlbumArt: + { + gc.SetBrushColor( KRgbBlack ); + gc.SetBrushStyle( CGraphicsContext::ESolidBrush ); + gc.DrawRect( iBorder ); + break; + } + case EMPXAlbumArtEditorDialogBlank: + { + break; + } + default: // either various of no album art + { + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::CountComponentControls +// Returns the number of components in the container. +// ----------------------------------------------------------------------------- +// +TInt CMPXAlbumArtEditorDialogCustomControl::CountComponentControls() const + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::CountComponentControls" ); + return KMPXLabelCount; + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::ComponentControl +// Returns the control given the index. +// ----------------------------------------------------------------------------- +// +CCoeControl* CMPXAlbumArtEditorDialogCustomControl::ComponentControl( + TInt aIndex ) const + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::ComponentControl" ); + switch ( aIndex ) + { + case 0: + return iImage; + case 1: + return iLabel; + default: + return NULL; + } + } + +// ----------------------------------------------------------------------------- +// CMPXAlbumArtEditorDialogCustomControl::SizeChanged +// Resizes controls. +// ----------------------------------------------------------------------------- +// +void CMPXAlbumArtEditorDialogCustomControl::SizeChanged() + { + MPX_FUNC( "CMPXAlbumArtEditorDialogCustomControl::SizeChanged" ); + delete iBackground; + iBackground = NULL; + TRect appRect = iEikonEnv->EikAppUi()->ApplicationRect(); + MPX_TRAPD( error, + iBackground = CAknsBasicBackgroundControlContext::NewL( + KAknsIIDQsnBgAreaMain, appRect, EFalse ) ); + if ( error == KErrNone && iLabel ) + { + TRect coeRect = Rect(); + AknLayoutUtils::LayoutLabel( iLabel, coeRect, + R_MPX_CUI_ALBUM_ART_LAYOUT ); + TRAP_IGNORE( HandleSkinChangedL() ); + } + } + +// End of File