phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/src/ccappstatuscontrol.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccapp/ccapputil/src/ccappstatuscontrol.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,739 @@
+/*
+* Copyright (c) 2009-2009 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: UI status control
+*
+*/
+
+
+#include "ccappstatuscontrol.h"
+#include "MVPbkContactLink.h"
+#include "TPbk2IconId.h"
+#include <eikimage.h>
+#include <eiklabel.h>
+#include <AknIconUtils.h>
+#include <AknUtils.h>
+#include <avkon.mbg>
+#include <gulicon.h>
+#include <StringLoader.h>
+#include <AknsFrameBackgroundControlContext.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <AknsUtils.h>
+#include <AknsDrawUtils.h>
+#include <touchfeedback.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <Pbk2PresentationUtils.h>
+
+namespace {
+/// Amount of child UI components
+const TInt KControlCount = 3; // image & label x 2
+/// Max amount of lines used to show status text. Rest will be clipped
+const TInt KStatusTextLines = 2;
+const TText KGraphicReplaceCharacter    = ' ';
+
+inline CGulIcon* CreateEmptyIconL()
+    {               
+    CFbsBitmap* image = NULL;
+    CFbsBitmap* mask = NULL;
+    AknIconUtils::CreateIconL( image, mask, 
+            AknIconUtils::AvkonIconFileName(),
+            EMbmAvkonQgn_prop_empty, 
+            EMbmAvkonQgn_prop_empty_mask );                             
+    return CGulIcon::NewL( image, mask );
+    } 
+
+inline void ReSizeIcon( CGulIcon* aIcon, const TSize& aSize )
+    {
+    if( aIcon )
+        {
+        CFbsBitmap* bitmap = aIcon->Bitmap();
+        CFbsBitmap* mask = aIcon->Mask();
+        if( bitmap )
+            {
+            AknIconUtils::SetSize( bitmap, aSize );
+            }
+        if( mask )
+            {
+            AknIconUtils::SetSize( mask, aSize );
+            }
+        }
+    }
+
+}   // namespace
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::NewL
+// ---------------------------------------------------------------------------
+//                            
+EXPORT_C CCCAppStatusControl* CCCAppStatusControl::NewL( 
+    CSpbContentProvider& aContentProvider, 
+    MCCAStatusControlObserver& aObserver,
+    CCCAppStatusControl::TContactType aContactType )
+    {
+    CCCAppStatusControl* self= new(ELeave) CCCAppStatusControl( 
+            aContentProvider, aObserver, aContactType );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::CCCAppStatusControl
+// ---------------------------------------------------------------------------
+//
+CCCAppStatusControl::CCCAppStatusControl( 
+    CSpbContentProvider& aContentProvider, 
+    MCCAStatusControlObserver& aObserver,
+    CCCAppStatusControl::TContactType aContactType ) : 
+    iContentProvider( aContentProvider ),
+    iObserver( aObserver ),
+    iState( EStateUndefined ),
+    iContactType( aContactType )
+    {		
+    } 
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::ConstructL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::ConstructL() 	
+    {            	
+	// Create status icon image
+    iStatusImage = new( ELeave ) CEikImage;		
+    iStatusImage->SetAlignment( EHCenterVCenter );
+    iStatusImage->SetPictureOwnedExternally( ETrue );    	
+    iStatusImage->SetBrushStyle( CGraphicsContext::ENullBrush ); // transparent
+    iStatusImage->MakeVisible( EFalse );
+	
+	// Create status text label
+	iStatusLabel1 = new( ELeave ) CEikLabel;
+	iStatusLabel1->SetAlignment( EHLeftVCenter );
+	iStatusLabel1->SetTextL( KNullDesC() ); // CEikLabel will panic without text
+    iStatusLabel1->MakeVisible( EFalse );
+
+    iStatusLabel2 = new( ELeave ) CEikLabel;
+    iStatusLabel2->SetAlignment( EHLeftVCenter );
+    iStatusLabel2->SetTextL( KNullDesC() ); // CEikLabel will panic without text
+    iStatusLabel2->MakeVisible( EFalse );
+    
+	iStatusText = KNullDesC().AllocL();
+		
+	iContentProvider.AddObserverL( *this );
+	
+    iBgContext = CAknsFrameBackgroundControlContext::NewL(
+        KAknsIIDNone, TRect(), TRect(), EFalse );	
+    
+    // normal state by default
+    iBgContext->SetFrame( KAknsIIDQsnFrButtonNormal );
+    iBgContext->SetCenter( KAknsIIDQsnFrButtonCenterNormal );
+    
+    // stylus feedback support
+    iTouchFeedBack = MTouchFeedback::Instance();
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::~CCCAppStatusControl
+// ---------------------------------------------------------------------------
+//
+CCCAppStatusControl::~CCCAppStatusControl()
+    {	
+    if( iTouchFeedBack )
+        {
+        iTouchFeedBack->RemoveFeedbackForControl( this );
+        }
+	
+    iContentProvider.RemoveObserver( *this );
+	
+	if( iCCAStatusProvider )
+		{
+		iCCAStatusProvider->RemoveObserver( *this );
+		}
+	
+	delete iCCAStatusProvider;		
+    delete iStatusImage;
+    delete iStatusIcon;
+    delete iStatusLabel1;    
+    delete iStatusLabel2;    
+    delete iStatusText;    
+	delete iDefaultIcon;
+    delete iBgContext; 
+    delete iDefaultStatusText;
+    delete iLink;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetPressed
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::SetPressed( TBool aPressed )
+    {
+    if( iPressed != aPressed )
+        {
+        iPressed = aPressed;
+        if( iPressed )
+            {
+            // pressed
+            iBgContext->SetFrame( KAknsIIDQsnFrButtonPressed );
+            iBgContext->SetCenter( KAknsIIDQsnFrButtonCenterPressed );
+            DrawNow(); // respond quickly to user event
+            }
+        else
+            {
+            // normal
+            iBgContext->SetFrame( KAknsIIDQsnFrButtonNormal );
+            iBgContext->SetCenter( KAknsIIDQsnFrButtonCenterNormal );
+            DrawDeferred();
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCCAppStatusControl::SetContactLinkL( MVPbkContactLink& aLink )
+	{
+	delete iLink;
+	iLink = NULL;
+	iLink = aLink.CloneLC();
+	CleanupStack::Pop(); // iLink
+	
+	delete iStatusText;
+	iStatusText = NULL;
+	TPbk2IconId iconId;
+    CSpbContentProvider::TSpbContentType type = CSpbContentProvider::ETypeNone; 
+	iContentProvider.GetContentL( *iLink, iStatusText, iconId, type );			
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetDefaultStatusIconL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCCAppStatusControl::SetDefaultStatusIconL( 
+        CGulIcon* aDefaultStatusIcon )
+	{
+	delete iDefaultIcon;
+	iDefaultIcon = aDefaultStatusIcon;
+
+	if( iStatusIconSize != TSize() && iState == EStateDefaultContent )
+        {
+        ShowDefaultContentL();
+        }
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetDefaultStatusTextL
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCCAppStatusControl::SetDefaultStatusTextL( 
+        HBufC* aDefaultStatusText ) 		
+	{
+	delete iDefaultStatusText;
+	iDefaultStatusText = aDefaultStatusText;
+	
+	if( iState == EStateDefaultContent )
+	    {
+        ShowDefaultContentL();
+	    }
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetStatusProvider
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CCCAppStatusControl::SetStatusProvider( MCCAStatusProvider* aCCAStatusProvider )
+	{
+	if( iCCAStatusProvider )
+		{
+		iCCAStatusProvider->RemoveObserver( *this );
+		delete iCCAStatusProvider;
+		iCCAStatusProvider = NULL;
+		}
+	
+	iCCAStatusProvider = aCCAStatusProvider;					
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::CountComponentControls
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppStatusControl::CountComponentControls() const
+    {
+    return KControlCount;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::ComponentControl
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CCCAppStatusControl::ComponentControl( TInt aIndex )  const
+    {
+    switch( aIndex )
+        {
+        case 0:
+            {
+            return  iStatusImage;
+            }
+        case 1:
+            {
+            return iStatusLabel1;
+            }        
+        case 2:
+            {
+            return iStatusLabel2;
+            }        
+        }
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetVariableLayouts
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::SetVariableLayouts( TInt aOption )
+    {
+    const TRect rect(Rect());
+
+    // Set background and border graphics layout
+    //
+    // Avkon LAF needs to be used because phob2_cc_button_pane does not have
+    // definition for inner rect (to make border visible) and LAF change to 
+    // phob2_cc_button_pane was not accepted. If the border layout at some
+    // point gets broken, then custom LAF for the border is needed.
+    TAknLayoutRect innerLayoutRect;
+    innerLayoutRect.LayoutRect( rect,
+        AknLayoutScalable_Avkon::bg_button_pane_g1() );
+    iBgContext->SetFrameRects( rect, innerLayoutRect.Rect() );      
+                       
+    // status icon
+    const TAknWindowComponentLayout statusIconLayout( 
+            AknLayoutScalable_Apps::phob2_cc_button_pane_g1( aOption ) );
+    
+    TAknLayoutRect statusIconLayoutRect;
+    statusIconLayoutRect.LayoutRect( Rect(), statusIconLayout.LayoutLine() );
+    const TRect statusIconRect( statusIconLayoutRect.Rect() );
+    iStatusIconSize = statusIconRect.Size();
+    iStatusImage->SetRect( statusIconRect );
+      
+    // status label 1
+    AknLayoutUtils::LayoutLabel( 
+            iStatusLabel1, 
+            rect, 
+            AknLayoutScalable_Apps::phob2_cc_button_pane_t1( aOption ) ); 
+
+	TRgb color;
+    AknsUtils::GetCachedColor( 
+            AknsUtils::SkinInstance(), 
+            color, 
+            KAknsIIDQsnTextColors, 
+            EAknsCIQsnTextColorsCG6 );
+    
+    TRAP_IGNORE(
+        {
+        iStatusLabel1->OverrideColorL( EColorLabelText, color );        
+        iStatusLabel2->OverrideColorL( EColorLabelText, color );
+        } );
+			
+    // resize images for new resolution
+    ReSizeIcon( iStatusIcon, iStatusIconSize );
+    ReSizeIcon( iDefaultIcon, iStatusIconSize );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::SizeChanged()
+    {
+    const TRect rect( Rect() );
+    
+    // update stylus feedback
+    if( iTouchFeedBack )
+        {
+        iTouchFeedBack->ChangeFeedbackArea( this, 0, rect );
+        }
+
+    // status label 2
+    AknLayoutUtils::LayoutLabel( 
+            iStatusLabel2, 
+            rect, 
+            AknLayoutScalable_Apps::phob2_cc_button_pane_t2( 0 ) );
+    
+    TInt count(0);
+    // If this leaves, it means we're out of memory. Nothing we can do.
+    TRAP_IGNORE( count = RewrapStatusTextL() ); 
+    
+    TInt option( 1 );
+    if( count > 1 )
+        {
+        option = 0;
+        }
+    
+    SetVariableLayouts( option );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::HandlePointerEventL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::HandlePointerEventL(
+    const TPointerEvent& aPointerEvent)
+    {
+    CCoeControl::HandlePointerEventL( aPointerEvent );
+    
+    if ( aPointerEvent.iType == TPointerEvent::EButton1Down )
+    	{
+        SetPressed( ETrue );
+    	}
+    else if ( aPointerEvent.iType == TPointerEvent::EButton1Up )
+        {
+        SetPressed( EFalse );
+        if( Rect().Contains( aPointerEvent.iPosition ) )
+            {
+            // stylus released inside the button area
+            iObserver.StatusClickedL();
+            }
+        }
+    else if( aPointerEvent.iType == TPointerEvent::EDrag )
+        {
+        if( Rect().Contains( aPointerEvent.iPosition ) )
+            {
+            // stylus moved inside the button area
+            SetPressed( ETrue );
+            }
+        else
+            {
+            // stylus moved outside the button area
+            SetPressed( EFalse );
+            }
+        }    
+  	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::SetContainerWindowL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::SetContainerWindowL( 
+    const CCoeControl& aContainer )
+    {
+    CCoeControl::SetContainerWindowL( aContainer );
+
+    // Assign window for child controls too
+    const TInt childCount = CountComponentControls();
+    for( TInt i = 0; i < childCount; ++i )
+        {
+        ComponentControl( i )->SetContainerWindowL( *this );
+        }
+    
+    // stylus feedback can be set only after we have parent control (window owning)
+    if( iTouchFeedBack )
+        {
+        CFeedbackSpec* spec = CFeedbackSpec::New();
+        if( spec )
+            {
+            spec->AddFeedback( ETouchEventStylusDown, ETouchFeedbackBasicButton );
+            iTouchFeedBack->SetFeedbackArea( this, 0, Rect(), spec );
+            delete spec;
+            }
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::ContentUpdated
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::ContentUpdated( MVPbkContactLink& aLink,
+	MSpbContentProviderObserver::TSpbContentEvent aEvent )
+	{
+	TRAP_IGNORE( DoStatusUpdateL( aLink, aEvent ) );
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::StatusEvent
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::StatusEvent(
+           MCCAStatusProviderObserver::TCCAStatusProviderObserverEvent aEvent,
+           const MVPbkContactLink* aLink )
+	{		       	
+	if( iCCAStatusProvider && aEvent == MCCAStatusProviderObserver::EStatusChanged && 
+			iLink && aLink && iLink->IsSame( *aLink ) )
+		{
+        UpdateCCAStatusL( iLink );
+		}			
+	}
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::DoStatusUpdateL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::DoStatusUpdateL( MVPbkContactLink& aLink,
+    MSpbContentProviderObserver::TSpbContentEvent aEvent )
+    {
+    if( aEvent == EContentNotAvailable )
+        {
+		if( iCCAStatusProvider )
+    		{
+            UpdateCCAStatusL( &aLink );            			        					
+    		TRAP_IGNORE( iCCAStatusProvider->AddObserverL( *this ) );
+    		}    
+		else
+			{
+			ShowDefaultContentL();
+			}
+        }
+    else if( iLink && iLink->IsSame( aLink ) )
+        {
+        if( iCCAStatusProvider )
+            {
+            iCCAStatusProvider->RemoveObserver( *this );
+            }
+    
+        iState = EStateStatusContent;
+        delete iStatusText;
+        iStatusText = NULL;
+        
+        TPbk2IconId iconId;
+        CSpbContentProvider::TSpbContentType type = 
+                CSpbContentProvider::ETypeNone; 
+        iContentProvider.GetContentL( aLink, iStatusText, iconId, type );
+        
+        const TInt count( RewrapStatusTextL() );
+        TInt option( 1 );
+        if( count > 1 )
+            {
+            option = 0;
+            }
+        SetVariableLayouts( option );
+              
+        CGulIcon* icon = NULL;
+        TRAP_IGNORE( 
+                {
+                icon = iContentProvider.CreateServiceIconLC( iconId );
+                CleanupStack::Pop( icon );
+                } );
+        if( !icon )
+            {
+            icon = CreateEmptyIconL();
+            }
+        
+        delete iStatusIcon;
+        // iStatusIcon owns bitmaps 
+        iStatusIcon = icon;
+        ReSizeIcon( iStatusIcon, iStatusIconSize );
+        
+        iStatusImage->SetPicture( iStatusIcon->Bitmap(), iStatusIcon->Mask() );
+        iStatusImage->MakeVisible( ETrue );
+        DrawDeferred();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::UpdateCCAStatusL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::UpdateCCAStatusL( MVPbkContactLink* aLink )
+    {
+    if( aLink && iCCAStatusProvider )
+        {
+        delete iStatusText;
+        iStatusText = NULL;
+        delete iStatusIcon;
+        iStatusIcon = NULL;
+        
+        if( iContactType == ENormalContact )
+            {
+            iCCAStatusProvider->GetStatusInformationL(
+                *aLink,
+                iStatusText,
+                iStatusIcon );
+            }
+        else if( iContactType == EMyCardContact )
+            {
+            iCCAStatusProvider->GetMyCardStatusInformationL(
+                *aLink,
+                iStatusText,
+                iStatusIcon );
+            }
+                            
+        if( !iStatusIcon )
+            {
+            iStatusIcon = CreateEmptyIconL();
+            }
+                
+        ReSizeIcon( iStatusIcon, iStatusIconSize );                 
+        iStatusImage->SetPicture( iStatusIcon->Bitmap(), iStatusIcon->Mask() );
+        iStatusImage->MakeVisible( ETrue );        
+        
+        const TInt count( RewrapStatusTextL() );
+        TInt option( 1 );
+        if( count > 1 )
+           {
+           option = 0;
+           }
+        SetVariableLayouts( option );
+                   
+        DrawDeferred();
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::RewrapStatusTextToArrayL
+// ---------------------------------------------------------------------------
+//
+inline void CCCAppStatusControl::RewrapStatusTextToArrayL( 
+        TDes& aStatusText, 
+        CArrayFix<TPtrC>& aTxtArray )
+    {
+    // generate array of line lengths 
+    CArrayFixFlat<TInt>* array = 
+        new(ELeave) CArrayFixFlat<TInt>( KStatusTextLines );
+    CleanupStack::PushL( array );
+    
+    // check width and font from label 2, because label 2 layout is 
+    // set before this function is called
+    const TInt width( iStatusLabel2->Size().iWidth );
+    array->AppendL( width );
+    array->AppendL( width );
+    
+    const CFont* font = iStatusLabel2->Font();
+   
+    // wrap text
+    AknTextUtils::WrapToArrayAndClipL( 
+            aStatusText,             
+            *array, 
+            *font,                     
+            aTxtArray );
+    
+    CleanupStack::PopAndDestroy( array );
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::RewrapStatusTextL
+// ---------------------------------------------------------------------------
+//
+TInt CCCAppStatusControl::RewrapStatusTextL()
+    {
+    TInt txtCount(0);
+    if( iStatusText )
+        {
+        HBufC* statusTxtBuffer = iStatusText->AllocLC();
+        TPtr statusTxt( statusTxtBuffer->Des() );
+    
+        // replace non-allowed characters with ' '
+        Pbk2PresentationUtils::ReplaceNonGraphicCharacters(
+                statusTxt, KGraphicReplaceCharacter );
+        AknTextUtils::ReplaceCharacters(
+                statusTxt, 
+                KAknCommonWhiteSpaceCharacters, 
+                KGraphicReplaceCharacter );
+    
+        // generate array of line lengths 
+        CArrayFixFlat<TPtrC>* txtArray = 
+                new (ELeave) CArrayFixFlat<TPtrC>(KStatusTextLines);
+        CleanupStack::PushL( txtArray );
+        RewrapStatusTextToArrayL( statusTxt, *txtArray );
+        
+        // assign new text
+        TPtrC label1(KNullDesC);
+        TPtrC label2(KNullDesC);
+        
+        txtCount = txtArray->Count();
+        switch (txtCount)
+            {
+            case 1:
+                {
+                label1.Set( txtArray->At(0) );
+                iStatusLabel1->MakeVisible( ETrue );
+                iStatusLabel2->MakeVisible( EFalse );
+                break;
+                }
+            case 2:
+                {
+                label1.Set( txtArray->At(0) );
+                label2.Set( txtArray->At(1) );
+                iStatusLabel1->MakeVisible( ETrue );
+                iStatusLabel2->MakeVisible( ETrue );
+                break;
+                }
+            default:
+                {
+                }
+            }
+        
+        iStatusLabel1->SetTextL( label1 );
+        iStatusLabel2->SetTextL( label2 );
+        CleanupStack::PopAndDestroy( 2, statusTxtBuffer ); // txtArray
+        iStatusImage->MakeVisible( ETrue );
+        DrawDeferred();
+        }
+    return txtCount;
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::Draw
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::Draw( const TRect& /*aRect*/ ) const
+    {
+    const TRect rect( Rect() );
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+    CWindowGc& gc = SystemGc();
+    
+    // draw skinned background
+    if( !AknsDrawUtils::Background( skin, iBgContext, NULL, 
+            gc, rect, KAknsDrawParamNoClearUnderImage ) )
+        {
+        // if skin fails then draw solid colors
+        gc.SetBrushColor( iPressed ? KRgbDarkGray : KRgbGray );
+        gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+        gc.DrawRect( rect );
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// CCCAppStatusControl::ShowDefaultContentL
+// ---------------------------------------------------------------------------
+//
+void CCCAppStatusControl::ShowDefaultContentL()
+	{
+    iState = EStateDefaultContent;
+    
+	if( iDefaultIcon && ( iDefaultIcon->Bitmap() != iStatusImage->Bitmap() ) )
+		{
+        ReSizeIcon( iDefaultIcon, iStatusIconSize );
+        iStatusImage->SetPicture( iDefaultIcon->Bitmap(), iDefaultIcon->Mask() );
+        iStatusImage->DrawDeferred();
+		}
+	
+	if( iDefaultStatusText )
+		{
+        if( !iStatusText || iDefaultStatusText->CompareC( *iStatusText ) != 0 )
+            {
+            // update text
+            HBufC* txt = iDefaultStatusText->AllocL();
+            delete iStatusText;
+            iStatusText = txt;
+            const TInt count( RewrapStatusTextL() );
+            TInt option( 1 );
+            if( count > 1 )
+                {
+                option = 0;
+                }
+            SetVariableLayouts( option );
+            }
+		}
+	}
+
+// End of file