diff -r 57d4cdd99204 -r edfc90759b9f imageeditor/ImageEditorUI/src/WaitIndicator.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/imageeditor/ImageEditorUI/src/WaitIndicator.cpp Fri Jan 29 13:53:17 2010 +0200 @@ -0,0 +1,227 @@ +/* +* Copyright (c) 2010 Ixonos Plc. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the "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: +* Ixonos Plc +* +* Description: +* +*/ + +// INCLUDE FILES +#include "WaitIndicator.h" +#include + +#include +#include + +#include +#include +#include + +// ----------------------------------------------------------------------------- +// CWaitIndicator::CWaitIndicator() +// C++ constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +CWaitIndicator::CWaitIndicator() +:CTimer( EPriorityStandard ) + { + CActiveScheduler::Add( this ); + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWaitIndicator* CWaitIndicator::NewL() + { + CWaitIndicator* self = new( ELeave ) CWaitIndicator(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator::ConstructL +// Symbian two phased constructor may leave +// ----------------------------------------------------------------------------- +// +void CWaitIndicator::ConstructL() + { + CTimer::ConstructL(); + + // Bitmap file name and drive letter. + // Path is generated using PathInfo. + _LIT( KMbmDrive, "z:" ); + _LIT( KMbmFileName, "ImageEditorUI.mbm" ); + + // Waitnote bitmap count + const TInt KWaitnoteBitmapCount = 10; + + TFileName mbmPath; + mbmPath.Copy( KMbmDrive ); + mbmPath.Append( KDC_APP_BITMAP_DIR ); + mbmPath.Append( KMbmFileName ); + + for ( TInt i = 0; i < KWaitnoteBitmapCount; ++i ) + { + CFbsBitmap* bitmap; + CFbsBitmap* mask; + + // *2 for bitmap and mask + AknIconUtils::CreateIconL( bitmap, mask, mbmPath, + EMbmImageeditoruiQgn_graf_ring_wait_01 + i * 2, + EMbmImageeditoruiQgn_graf_ring_wait_01_mask + i * 2 ); + + TInt err = iBitmaps.Append( bitmap ); + if( err ) + { + delete bitmap; + delete mask; + } + else + { + err = iBitmaps.Append( mask ); + if( err ) + { + delete mask; + } + } + User::LeaveIfError( err ); + } + } + +// ----------------------------------------------------------------------------- +// Destructor +// ----------------------------------------------------------------------------- +// +CWaitIndicator::~CWaitIndicator() + { + Cancel(); + iBitmaps.ResetAndDestroy(); + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator:: +// ----------------------------------------------------------------------------- +// +TBool CWaitIndicator::IsVisible() + { + return IsActive(); + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator:: +// ----------------------------------------------------------------------------- +// +void CWaitIndicator::Show() + { + // From LAF + TTimeIntervalMicroSeconds32 KWaitNoteDelay = TTimeIntervalMicroSeconds32( 1000*100 ); + + if( !IsActive() ) + { + // Start timer if not already + After( KWaitNoteDelay ); + } + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator:: +// ----------------------------------------------------------------------------- +// +void CWaitIndicator::Hide() + { + // Stop waitnote + Cancel(); + + // Request draw event + DrawNow(); + } + +// ---------------------------------------------------------------------------- +// CWaitIndicator::RunL +// ---------------------------------------------------------------------------- +// +void CWaitIndicator::RunL() + { + // From LAF + TTimeIntervalMicroSeconds32 KWaitNoteInterval = TTimeIntervalMicroSeconds32( 1000*100 ); + + // Waitnote bitmap count + const TInt KWaitnoteBitmapCount = 10; + + // Start timer again + After( KWaitNoteInterval ); + + // Draw next frame + ++iIndex; + if ( iIndex >= KWaitnoteBitmapCount ) + { + iIndex = 0; + } + DrawNow(); + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator::Draw +// ----------------------------------------------------------------------------- +// +void CWaitIndicator::Draw( CWindowGc& aGc ) const + { + if( IsActive() ) + { + // *2 because masks are in same array + CFbsBitmap* bitmap = iBitmaps[iIndex * 2]; + CFbsBitmap* mask = iBitmaps[iIndex * 2 + 1]; + + TSize bitmapSize( bitmap->SizeInPixels() ); + TSize rectSize( iRect.Size() ); + TPoint topLeft( iRect.iTl ); + + // Center the image + if( bitmapSize.iWidth < rectSize.iWidth ) + { + topLeft.iX = ( rectSize.iWidth - bitmapSize.iWidth ) / 2; + } + if( bitmapSize.iHeight < rectSize.iHeight ) + { + topLeft.iY = ( rectSize.iHeight - bitmapSize.iHeight ) / 2; + } + + // Draw wait indicator + aGc.BitBltMasked( topLeft, bitmap, TRect( bitmapSize ), mask, EFalse ); + } + } + +// ----------------------------------------------------------------------------- +// CWaitIndicator:: +// ----------------------------------------------------------------------------- +// +void CWaitIndicator::SizeChanged() + { + // Waitnote bitmap count + const TInt KWaitnoteBitmapCount = 10; + + // From LAF + // Variety 0 + TAknWindowLineLayout layout = AknLayoutScalable_Apps::main_image2_pane_g1( 0 ); + TSize waitNoteSize( layout.iW, layout.iH ); + for ( TInt i = 0; i < KWaitnoteBitmapCount; ++i ) + { + AknIconUtils::SetSize( iBitmaps[i * 2], waitNoteSize ); + } + } + +// End of File