imageeditor/ImageEditorUI/src/WaitIndicator.cpp
changeset 1 edfc90759b9f
--- /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 <ImageEditorUI.mbg>
+
+#include <fbs.h>
+#include <w32std.h>
+
+#include <AknIconUtils.h>
+#include <data_caging_path_literals.hrh>
+#include <aknlayoutscalable_apps.cdl.h>
+
+// -----------------------------------------------------------------------------
+// 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