wvuing/IMPSConnectionUI/UISrc/CCnUiSignInControl.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSConnectionUI/UISrc/CCnUiSignInControl.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,348 @@
+/*
+* Copyright (c) 2006-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:  AppUi class of application
+*  Since	   : 3.2
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknsbasicbackgroundcontrolcontext.h>
+#include <aknsskininstance.h>
+#include <aknsutils.h>
+#include <aknutils.h>
+#include <aknsdrawutils.h>
+#include <gulicon.h>
+#include <akniconutils.h>
+#include <fbs.h>
+#include <BAUTILS.h>
+#include <eikbtgpc.h>
+#include <stringloader.h>
+#include <eikon.hrh>
+#include <avkon.hrh>
+#include <AknBidiTextUtils.h>
+#include <LayoutMetaData.cdl.h>
+#include "CCnUiSignInControl.h"
+#include "MCnUiWaitNoteObserver.h"
+#include <IMPSConnectionUiNG.rsg>
+#include <ChatNG.mbg>
+#include <AnimationConfig.h>
+#include <pathinfo.h>
+
+const TInt KMaxLength = 28;
+const TInt KDriveAndColon = 2;
+_LIT( KFileName, "z:\\resource\\apps\\chatng.mif" );
+_LIT( KGifFileName, "signon.gif" );
+
+CCnUiSignInControl* CCnUiSignInControl::NewL( const TDesC& aLabelText, MCnUiWaitNoteObserver* aObserver )
+    {
+    CCnUiSignInControl* self = CCnUiSignInControl::NewLC( aLabelText, aObserver );
+    CleanupStack::Pop(); //self
+    return self;
+    }
+
+CCnUiSignInControl* CCnUiSignInControl::NewLC( const TDesC& aLabelText, MCnUiWaitNoteObserver* aObserver )
+    {
+    CCnUiSignInControl* self = new ( ELeave ) CCnUiSignInControl( aObserver );
+    CleanupStack::PushL( self );
+    self->ConstructL( aLabelText );
+    return self;
+    }
+
+CCnUiSignInControl::CCnUiSignInControl( MCnUiWaitNoteObserver* aObserver ) : iObserver( aObserver )
+    {
+    }
+
+void CCnUiSignInControl::ConstructL( const TDesC& aLabelText )
+    {
+    CreateWindowL();
+    TRect clientRect;
+    AknLayoutUtils::LayoutMetricsRect ( AknLayoutUtils::EMainPane, clientRect );
+    SetCanDrawOutsideRect();
+
+//////////create status label/////////////////////////////////////////////////
+    iLabel = new( ELeave ) CEikLabel;
+    iLabel->SetContainerWindowL( *this );
+    iLabel->SetLabelAlignment( ELayoutAlignCenter );
+    iLabel->SetBrushStyleFromContext();
+    if ( AknLayoutUtils::Variant() == EApacVariant )
+        {
+        iLabel->SetFont( ApacPlain16() );
+        }
+    else
+        {
+        iLabel->SetFont( LatinBold17() );
+        }
+    AssignSignInText( aLabelText );
+
+    TInt xPos = clientRect.iTl.iX + 20;
+    TInt yPos = ( clientRect.iBr.iY * 9 ) / 16;
+    iLabel->SetExtent( TPoint( xPos, yPos ), TSize( clientRect.iBr.iX - 40, 60 ) );
+    iLabel->SetBackground( this );
+    iLabel->MakeVisible( ETrue );
+/////////////////////////////////////////////////////////////////////////////////
+
+///////////Sign-in Background////////////////////////////////////////////////////
+    CFbsBitmap* bitmap;
+    CFbsBitmap* mask;
+    TSize size;
+    AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EMainPane, size );
+    AknIconUtils::CreateIconL( bitmap, mask, KFileName, EMbmChatngQgn_graf_im_signin_screen, EMbmChatngQgn_graf_im_signin_screen_mask );
+    AknIconUtils::SetSize( bitmap, size, EAspectRatioPreserved );
+    AknIconUtils::SetSize( mask, size, EAspectRatioPreserved );
+
+    CleanupStack::PushL( bitmap );
+    CleanupStack::PushL( mask );
+    iImage = CGulIcon::NewL( bitmap, mask );
+    CleanupStack::Pop( 2 ); // bitmap and mask
+//////////////////////////////////////////////////////////////////////////////////
+
+////////////Sign-in Animation/////////////////////////////////////////////////////
+    TInt err = iFs.Connect();
+    if ( err )
+        {
+        User::Leave( err );
+        }
+    // Get ROM and C drives
+    TBuf<KDriveAndColon> romDrive;
+    romDrive = PathInfo::RomRootPath().Left( KDriveAndColon );
+
+    TFileName fn;
+    iFs.PrivatePath( fn );
+    BaflUtils::EnsurePathExistsL( iFs, fn );
+    fn.Insert( 0, romDrive );
+    fn.Append( KGifFileName );
+
+    CICLAnimationDataProvider* aGifProvider;
+    aGifProvider = new ( ELeave ) CICLAnimationDataProvider;
+    CleanupStack::PushL( aGifProvider );
+    aGifProvider->SetFileL( iFs, fn );
+    CleanupStack::Pop( aGifProvider );
+
+    TAnimationConfig aGifConfig;
+    aGifConfig.iFlags = TAnimationConfig::ELoop;
+    aGifConfig.iData = 100;
+
+    iGifImage = CBasicAnimation::NewL( aGifProvider , TPoint( 0, 0 ), CEikonEnv::Static()->WsSession(), Window() );
+    TInt animXPos = clientRect.Width() / 2 - 20;
+    TInt animYPos = yPos - 45;
+    iGifImage->SetPosition( TPoint( animXPos, animYPos ) );
+    iGifImage->Start( aGifConfig );
+////////////////////////////////////////////////////////////////////////////////////
+
+////////Create a CBA for use with this control//////////////////////////////////////
+    iPopoutCba = CEikButtonGroupContainer::NewL( CEikButtonGroupContainer::ECba,
+                                                 CEikButtonGroupContainer::EHorizontal, this, R_AVKON_SOFTKEYS_CANCEL );
+
+    iPopoutCba->MakeVisible( ETrue );
+////////////////////////////////////////////////////////////////////////////////////
+
+    // Sets rectangle of frame.
+    SetRect( clientRect );
+
+    ActivateL();
+    // Activates the window. (Ready to draw
+    MakeVisible( ETrue );
+    }
+
+// Fix codescanner warning: Pointer access in destructors
+void CCnUiSignInControl::MakeCbaInvisible()
+    {
+    iPopoutCba->MakeVisible( EFalse );
+    }
+CCnUiSignInControl::~CCnUiSignInControl()
+    {
+    iObserver = NULL;
+
+    MakeVisible( EFalse );
+    delete iLabel;
+
+    MakeCbaInvisible();
+    delete iPopoutCba;
+
+    delete iImage;
+    iFs.Close();
+    delete iGifImage;
+    }
+
+void CCnUiSignInControl::SizeChanged()
+    {
+    //
+    }
+
+// ---------------------------------------------------------
+// CCnUiSignInControl::CountComponentControls() const
+// ---------------------------------------------------------
+//
+TInt CCnUiSignInControl::CountComponentControls() const
+    {
+    return 1; // return numberr of controls inside this container
+    }
+
+// ---------------------------------------------------------
+// CCnUiSignInControl::ComponentControl(TInt aIndex) const
+// ---------------------------------------------------------
+//
+CCoeControl* CCnUiSignInControl::ComponentControl( TInt aIndex ) const
+    {
+    switch ( aIndex )
+        {
+        case 0:
+            return iLabel;
+        default:
+            return NULL;
+        }
+    }
+
+// ---------------------------------------------------------
+// CCnUiSignInControl::Draw(const TRect& aRect) const
+// ---------------------------------------------------------
+//
+void CCnUiSignInControl::Draw( const TRect& aRect ) const
+    {
+    CWindowGc& gc = SystemGc();
+//    gc.SetPenStyle( CGraphicsContext::ENullPen );
+//    gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+//    gc.DrawRect( aRect );
+
+    if ( iImage )
+        {
+        //TSize imageSize = iImage->Bitmap()->SizeInPixels();
+        TSize imageSize;
+        AknLayoutUtils::LayoutMetricsSize( AknLayoutUtils::EMainPane, imageSize );
+        TInt leftPadding = 0;
+        TInt upperPadding = 0;
+        if ( imageSize.iWidth < Rect().Width() )
+            {
+            leftPadding = ( Rect().Width() - imageSize.iWidth ) / 2;
+            }
+
+        if ( imageSize.iHeight < Rect().Height() )
+            {
+            upperPadding = ( Rect().Height() - imageSize.iHeight ) / 2;
+            }
+
+        gc.Clear(); //(rect);
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.BitBltMasked( TPoint( leftPadding, upperPadding ), iImage->Bitmap(), aRect, iImage->Mask(), EFalse );
+        }
+
+    if ( iGifImage )
+        {
+        iGifImage->Draw( gc );
+        }
+    }
+
+void CCnUiSignInControl::Draw( CWindowGc& /*aGc*/, const CCoeControl& /*aControl*/, const TRect& /*aRect*/ ) const
+    {
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    }
+
+void CCnUiSignInControl::ProcessCommandL( TInt aCommandId )
+    {
+    //TO DO
+    // Respond to softkey events
+    switch ( aCommandId )
+        {
+        case EAknSoftkeyCancel:
+            if ( iObserver )
+                {
+                iObserver->HandleWaitNoteCancel();
+                }
+            break;
+        }
+    }
+
+void CCnUiSignInControl::HideStatus()
+    {
+    iPopoutCba->MakeVisible( EFalse );
+    }
+
+void CCnUiSignInControl::StopAnimation()
+    {
+    iGifImage->Stop();
+    }
+void CCnUiSignInControl::AssignSignInText( const TDesC& aLabelText )
+    {
+    TInt aTempLength = aLabelText.Length();
+    if ( aTempLength > KMaxLength )
+        {
+        TPtrC aTempPtr;
+        aTempPtr.Set( aLabelText.Left( KMaxLength ) );
+        TBuf<56> aTruncateRecipient( aTempPtr );
+        aTruncateRecipient.Append( _L( "\n" ) );
+        aTruncateRecipient.Append( aLabelText.Right( aTempLength - KMaxLength ) );
+        iLabel->SetTextL( aTruncateRecipient );
+        }
+    else
+        {
+        iLabel->SetTextL( aLabelText );
+        }
+    }
+TKeyResponse CCnUiSignInControl::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    if ( ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyOK ) )
+        {
+        if ( iObserver )
+            {
+            iObserver->HandleWaitNoteCancel();
+            }
+        return EKeyWasConsumed;
+        }
+    return EKeyWasNotConsumed;
+    }
+
+void CCnUiSignInControl::HandleResourceChange( TInt aType )
+    {
+    CCoeControl::HandleResourceChange( aType );
+    TRect rect;
+    AknLayoutUtils::LayoutMetricsRect ( AknLayoutUtils::EMainPane, rect );
+    SetRect( rect );
+
+    TInt xPos = rect.iTl.iX + 20;
+    TInt yPos = ( rect.iBr.iY * 9 ) / 16;
+
+    if ( LandscapeOrientation() )
+        {
+        delete iImage;
+        iImage = NULL;
+
+        CFbsBitmap* aChangedBitmap;
+        CFbsBitmap* aChangedMask;
+        AknIconUtils::CreateIconL( aChangedBitmap, aChangedMask, KFileName, EMbmChatngQgn_graf_im_signin_screen, EMbmChatngQgn_graf_im_signin_screen_mask );
+        AknIconUtils::SetSize( aChangedBitmap, rect.Size(), EAspectRatioPreserved );
+        AknIconUtils::SetSize( aChangedMask, rect.Size(), EAspectRatioPreserved );
+
+        CleanupStack::PushL( aChangedBitmap );
+        CleanupStack::PushL( aChangedMask );
+        iImage = CGulIcon::NewL( aChangedBitmap, aChangedMask );
+        CleanupStack::Pop( 2 ); // bitmap and mask
+
+        iLabel->SetExtent( TPoint( xPos, yPos ), TSize( rect.iBr.iX - 40, 60 ) );
+        }
+    DrawNow();
+    }
+
+// ----------------------------------------------------------------------------
+// CCnUiSignInControl::LandscapeOrientation
+// ----------------------------------------------------------------------------
+//
+TBool CCnUiSignInControl::LandscapeOrientation() const
+    {
+    TBool landscape = EFalse;
+    landscape = Layout_Meta_Data::IsLandscapeOrientation();
+    return landscape;
+    }
+
+// End of File