idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp
changeset 2 08c6ee43b396
parent 1 5315654608de
child 17 b8fae6b8a148
--- a/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp	Thu Jan 07 12:39:41 2010 +0200
+++ b/idlehomescreen/xmluirendering/renderingplugins/xnnewstickerfactory/src/xnnewstickercontrol.cpp	Mon Jan 18 20:10:36 2010 +0200
@@ -18,209 +18,26 @@
 
 // INCLUDE FILES
 #include <AknUtils.h>
-#include <gulicon.h>
 #include <AknsDrawUtils.h>
 #include <AknBidiTextUtils.h>
 
 #include "xnnewstickercontrol.h"
 #include "xnnewstickeradapter.h"
-#include "xnproperty.h"
+
 
 // CONSTANTS
-/**
-* for the empty space in pixels between text and image.
-*/
-const TInt KGap = 10;
-
    
 // ============================ MEMBER FUNCTIONS ===============================
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::CTitleData
-// C++ default constructor can NOT contain any code, that
-// might leave.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData::CTitleData(TInt aLenghtInPixels) :
-    iTitleIsSvg(EFalse), iTextLenghtInPixels(aLenghtInPixels)
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// Destructor
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData::~CTitleData()
-    {
-    delete iText;
-    delete iData;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::ConstructL(const TDesC& aTitle)
-    {
-    delete iText;
-    iText = NULL;
-    iText = aTitle.AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::ConstructL(const TDesC8& aByteData)
-    {
-    iTitleIsSvg = ETrue;
-    iData = aByteData.AllocL();
-    iText = KNullDesC().AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewL(
-                const TDesC& aTitle, TInt aLenghtInPixels)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            CXnNewstickerControl::CTitleData::NewLC(aTitle, aLenghtInPixels);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewLC(
-                const TDesC& aTitle, TInt aLenghtInPixels)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            new(ELeave) CXnNewstickerControl::CTitleData(aLenghtInPixels);
-    CleanupStack::PushL(self);
-    self->ConstructL(aTitle);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewL
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewL(
-                const TDesC8& aByteData)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            CXnNewstickerControl::CTitleData::NewLC(aByteData);
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::NewLC
-// Two-phased constructor.
-// -----------------------------------------------------------------------------
-//
-CXnNewstickerControl::CTitleData* CXnNewstickerControl::CTitleData::NewLC(
-                const TDesC8& aByteData)
-    {
-    CXnNewstickerControl::CTitleData* self =
-            new(ELeave) CXnNewstickerControl::CTitleData();
-    CleanupStack::PushL(self);
-    self->ConstructL(aByteData);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::TitleText
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TDesC& CXnNewstickerControl::CTitleData::TitleText()
-    {
-    return *iText;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SetTitleText
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::SetTitleTextL(const TDesC& aTitle)
-    {
-    HBufC* newTitle = aTitle.AllocL();
-    delete iText;
-    iText = newTitle;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::TitleTextLengthInPixels
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CXnNewstickerControl::CTitleData::TitleTextLengthInPixels()
-    {
-    return iTextLenghtInPixels;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SetTitleTextLengthInPixels
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CTitleData::SetTitleTextLengthInPixels(TInt aLenghtInPixels)
-    {
-    iTextLenghtInPixels = aLenghtInPixels;    
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::IsSvgTitle
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::CTitleData::IsSvgTitle()
-    {
-    return iTitleIsSvg;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CTitleData::SvgTitleData
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TDesC8& CXnNewstickerControl::CTitleData::SvgTitleData()
-    {
-    return *iData;
-    }
-
-// -----------------------------------------------------------------------------
 // CXnNewstickerControl::CXnNewstickerControl
 // C++ default constructor can NOT contain any code, that
 // might leave.
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerControl::CXnNewstickerControl(CXnNewstickerAdapter* aAdapter) :     
-    iFirstDrawingTitleIndex(0),
-    iFirstDrawingOffset(0),
-    iImageWidthInPixels(0),
-    iCurrentTitleIndex(-1),
-    iSeparatorimage(NULL),
-    iSeparatorImageWidth(0),
-    iFont(NULL),
-    iTextBaseline(0),
-    iTextColor(KRgbBlack),
-    iUnderlining(EUnderlineOff),
-    iStrikethrough(EStrikethroughOff),
-    iIsWestern(ETrue),
-    iAdapter(aAdapter),
-    iTextAlignment(ELayoutAlignLeft)
+CXnNewstickerControl::CXnNewstickerControl( CXnNewstickerAdapter* aAdapter ) :     
+    iCurrentTitleIndex( -1 ),
+    iAdapter( aAdapter )
     {
     }
 
@@ -231,11 +48,7 @@
 //
 void CXnNewstickerControl::ConstructL()
     {
-    if(AknLayoutUtils::LayoutMirrored())
-        {
-    	iIsWestern = EFalse;
-        iTextAlignment = ELayoutAlignRight;
-        }
+
     }
 
 // -----------------------------------------------------------------------------
@@ -243,12 +56,12 @@
 // Two-phased constructor.
 // -----------------------------------------------------------------------------
 //
-CXnNewstickerControl* CXnNewstickerControl::NewL(CXnNewstickerAdapter* aAdapter)
+CXnNewstickerControl* CXnNewstickerControl::NewL( CXnNewstickerAdapter* aAdapter )
     {
-    CXnNewstickerControl* self = new(ELeave)CXnNewstickerControl(aAdapter);
-    CleanupStack::PushL(self);
+    CXnNewstickerControl* self = new(ELeave)CXnNewstickerControl( aAdapter );
+    CleanupStack::PushL( self );
     self->ConstructL();
-    CleanupStack::Pop();    
+    CleanupStack::Pop(); // self   
     return self;
     }
 
@@ -259,55 +72,7 @@
 //
 CXnNewstickerControl::~CXnNewstickerControl()
     {
-    iTitles.ResetAndDestroy();
-    delete iSeparatorimage;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetScrollAmount
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetScrollAmount(TInt aScrollAmount)
-    {
-    iSpeed = aScrollAmount;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetNewstickerRect
-// Set visible rect.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetNewstickerRect(TRect& aContentRect)
-    {
-    if(iContentRect != aContentRect)
-        {
-        iContentRect = aContentRect;
-        iTextBaseline = iContentRect.Height() / 2 + iFont->AscentInPixels() / 2;
-        SetBeginningState();
-        for(TInt i = 0; i < iTitles.Count(); i++)
-            {
-            if(!iTitles[i]->IsSvgTitle())
-                {
-                TInt textWidth = iFont->TextWidthInPixels(
-                    iTitles[i]->TitleText());
-                iTitles[i]->SetTitleTextLengthInPixels(textWidth);
-                }
-            }
-        CalculateTextFitInNewstickerRect();        
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::IsWestern
-// Returns ETrue if western layout is used, otherwise EFalse is returned.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::IsWestern()
-    {
-    return iIsWestern;
+    iTitleTexts.ResetAndDestroy();
     }
 
 // -----------------------------------------------------------------------------
@@ -315,1096 +80,214 @@
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::AppendTitleL(const TDesC& aTitle)
+void CXnNewstickerControl::AppendTitleL( const TDesC& aTitle )
     {
-    TInt textWidth = iFont->TextWidthInPixels(aTitle);
-    CTitleData* title = CTitleData::NewLC(aTitle, textWidth);
-    iTitles.AppendL(title);
-    CleanupStack::Pop(title);
-    
-    CalculateTextFitInNewstickerRect();    
+    HBufC* title = aTitle.AllocLC();
+    iTitleTexts.AppendL( title );
+    CleanupStack::Pop( title );
+    }
 
-    // if this is the first item
-    if(iTitles.Count() == 1) 
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::InsertTitleL
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerControl::InsertTitleL( const TDesC& aTitle, TInt aIndex )
+    {
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        iCurrentTitleIndex = 0;
-        iAdapter->StartL();    
+        HBufC* title = aTitle.AllocLC();
+        iTitleTexts.InsertL( title, aIndex );
+        CleanupStack::Pop( title );
+        }
+    else
+        {
+        AppendTitleL( aTitle );
         }
     }
 
-// ---------------------------------------------------------
-// CXnNewstickerControl::InsertTitleL
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::UpdateTitleL
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::InsertTitleL(const TDesC& aTitle, TInt aIndex)
+void CXnNewstickerControl::UpdateTitleL( const TDesC& aTitle, TInt aIndex )
     {
-    TInt textWidth = iFont->TextWidthInPixels(aTitle);
-    CTitleData* title = CTitleData::NewLC(aTitle, textWidth);
-    iTitles.InsertL(title, aIndex);
-    CleanupStack::Pop(title);
-
-    
-    CountIndexAfterInsertL(aIndex);
-    CalculateTextFitInNewstickerRect();    
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::UpdateTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::UpdateTitleL(const TDesC& aTitle, TInt aIndex)
-    {
-    if ( aIndex >= 0 && aIndex < iTitles.Count() )
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        CTitleData* titleData = iTitles[aIndex];    
-        TInt textWidth = iFont->TextWidthInPixels(aTitle);
-        titleData->SetTitleTextL(aTitle);
-        titleData->SetTitleTextLengthInPixels(textWidth);
-        CalculateTextFitInNewstickerRect();
+        HBufC* oldTitle = iTitleTexts[ aIndex ];
+        iTitleTexts.Remove( aIndex );
+        
+        delete oldTitle;
+        oldTitle = NULL;
+        
+        HBufC* title = aTitle.AllocLC();
+        iTitleTexts.InsertL( title, aIndex );
+        CleanupStack::Pop( title );   
         }
     else
         {
-        AppendTitleL(aTitle);
+        AppendTitleL( aTitle );
         }
     }
 
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 // CXnNewstickerControl::DeleteTitle
-// ---------------------------------------------------------
+// -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DeleteTitleL(TInt aIndex)
+void CXnNewstickerControl::DeleteTitleL( TInt aIndex )
     {
-    TInt count = iTitles.Count();
-    if (aIndex >= 0 && aIndex < count)
+    TInt count = iTitleTexts.Count();
+    
+    if( aIndex >= 0 && aIndex < count )
         {
         // If the last item will be deleted
         if(count == 1)
             {
-            iAdapter->StopL();
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-            SetBeginningState();
+            iAdapter->Stop();
             iCurrentTitleIndex = -1;
             }
-        if (aIndex == iFirstDrawingTitleIndex)
-            {
-            // If this happens to be the last item in the list
-            if(aIndex == count - 1)
-                {
-                iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-                }
-            SetBeginningState();
-            iCurrentTitleIndex = iFirstDrawingTitleIndex;
-            }
-            
-        //  Check if the title was deleted before the current title
-        else if (aIndex < iFirstDrawingTitleIndex)
-            {
-            iCurrentTitleIndex--;
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex-1, ETrue);
-            }
-        UpdateTitleL(KNullDesC, aIndex);
-        CalculateTextFitInNewstickerRect();        
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::CurrentTitleIndex
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::CurrentTitleIndex()
-    {
-    return iCurrentTitleIndex;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::Title
-// ---------------------------------------------------------
-//
-const TDesC& CXnNewstickerControl::Title(TInt aIndex)
-    {
-    if (aIndex < 0 || aIndex >= iTitles.Count())
-        {
-        return KNullDesC;
-        }
-
-    if (iTitles[aIndex]->IsSvgTitle())
-        {
-        return KNullDesC;
-        }
-
-    return iTitles[aIndex]->TitleText();
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::SetSeparatorImageL
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::SetSeparatorImageL(CGulIcon* aIcon)
-    {
-    CFbsBitmap* bitmap = aIcon->Bitmap();
-    if(AknIconUtils::IsMifIcon(bitmap))
-        {
-        delete iSeparatorimage;
-        iSeparatorimage = aIcon;
-        TInt maxHeight = iContentRect.Height();
-        TSize size = TSize(maxHeight, maxHeight);        
-        AknIconUtils::SetSize(bitmap, size, EAspectRatioPreservedAndUnusedSpaceRemoved);
-        iSeparatorImageWidth = bitmap->SizeInPixels().iWidth + KGap;
-        return KErrNone;
-        }
-    else
-        {
-        iSeparatorimage = NULL;
-        return KErrNotSupported;
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::ClearTitles
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::ClearTitles()
-    {
-    TRAP_IGNORE(iAdapter->StopL());
-    iFirstDrawingTitleIndex = 0;
-    SetBeginningState();
-    iCurrentTitleIndex = -1;
-    // Don't delete just clear the contents
-    for( TInt i = 0; i < iTitles.Count(); ++i )
-        {
-        TRAP_IGNORE( UpdateTitleL( KNullDesC, i ) );
-        }
-    iTextFitInNewstickerRect = EFalse;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::AppendSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::AppendSvgTitleL(const TDesC8& aByteData)
-    {
-    CTitleData* title = CTitleData::NewLC(aByteData);
-    iTitles.AppendL(title);
-    CleanupStack::Pop(title);
-    
-    // if this is the first item
-    if(iTitles.Count() == 1) 
-        {
-        iCurrentTitleIndex = 0;
-        iAdapter->StartL();
-        }
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::InsertSvgTitleL
-// ---------------------------------------------------------
-//
-void CXnNewstickerControl::InsertSvgTitleL(const TDesC8& aByteData, TInt aIndex)
-    {
-    CTitleData* title = CTitleData::NewLC(aByteData);
-    iTitles.InsertL(title, aIndex);
-    CleanupStack::Pop(title);
-    CountIndexAfterInsertL(aIndex);
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::CurrentSvgTitle
-// ---------------------------------------------------------
-//
-const TDesC8& CXnNewstickerControl::CurrentSvgTitle()
-    {
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return KNullDesC8;
-        }
-    
-    CTitleData* title = iTitles[iFirstDrawingTitleIndex];
-    //  Is it SVG title
-    if (title->IsSvgTitle())
-        {
-        //  Yes, advance the title index
-        iFirstDrawingTitleIndex++;
-        if (iFirstDrawingTitleIndex >= iTitles.Count())
-            {
-            iFirstDrawingTitleIndex = 0;
-            }
 
-        //  Return the data
-        return title->SvgTitleData();
-        }
-
-    //  Not svg title, return empty desc
-    return KNullDesC8;
-    }
-
-// ---------------------------------------------------------
-// CXnNewstickerControl::TitleCount
-// ---------------------------------------------------------
-//
-TInt CXnNewstickerControl::TitleCount() const
-    {
-    return iTitles.Count();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToNext
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToNextL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Skip notification of the first title
-    if ( iCurrentTitleIndex != GetNextTitleWithContent( 0 ) )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        }
-    // Don't report the last TitleToScroll in case the scroll ended
-    if ( iAdapter->CurrentState() != CXnNewstickerAdapter::EScrollEnded )
-        {    
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-        }
-    iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-    if (iAdapter->CurrentState() == CXnNewstickerAdapter::EAnimation)
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex + 1 );
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-    else
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex + 1);
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-
-    //  Check that we are still in range
-    if (iFirstDrawingTitleIndex >= iTitles.Count() || iFirstDrawingTitleIndex < 0)
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToFirstL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToFirstL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Something already scrolling, report scroll done
-    if ( iAdapter->CurrentState() == CXnNewstickerAdapter::EText )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-        }
-       
-    TInt start = 0; // iIsWestern ? 0 : (iTitles.Count() - 1);
-    
-    iCurrentTitleIndex = GetNextTitleWithContent( start );
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToLastL
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToLastL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    // Something already scrolling, report scroll done
-    if ( iAdapter->CurrentState() == CXnNewstickerAdapter::EText )
-        {
-        iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-        iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-        }
-    
-    TInt start = iTitles.Count() - 1; // iIsWestern ? (iTitles.Count() - 1) : 0;
-    
-    iCurrentTitleIndex = GetNextTitleWithContent( start, ETrue );
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToPrev
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToPrevL()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-    
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleScrolled);
-
-    if (iAdapter->CurrentState() == CXnNewstickerAdapter::EAnimation)
-        {
-        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex - 1, ETrue );        
-        iFirstDrawingTitleIndex = iCurrentTitleIndex;
-        }
-    else
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex - 1, ETrue );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-    //  Check that we are still in range
-    if (iFirstDrawingTitleIndex >= iTitles.Count() || iFirstDrawingTitleIndex < 0)
-        {
-        iFirstDrawingTitleIndex = GetNextTitleWithContent( iTitles.Count() - 1, ETrue );
-        iCurrentTitleIndex = iFirstDrawingTitleIndex;
-        }
-    
-    iAdapter->ReportNewstickerEventL(XnPropertyNames::action::trigger::name::KTitleToScroll);
-    SetBeginningState();
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::MoveToCurrent
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::MoveToCurrent()
-    {
-    //  If there are no titles, don't do anything.
-    if (!IsVisibleTitles())
-        {
-        return ;
-        }
-
-    iFirstDrawingTitleIndex = iCurrentTitleIndex;
-    SetBeginningState();    
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CountIndexAfterInsert
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::CountIndexAfterInsertL(TInt aIndex)
-    {
-    //  Check if the new title was inserted before the first drawing title
-    if (aIndex <= iFirstDrawingTitleIndex)
-        {
-        iCurrentTitleIndex++;
-        iFirstDrawingTitleIndex++;
-        }
-        
-    // if this is the first item
-    if(iTitles.Count() == 1 && GetNextTitleWithContent( 0 ) == 0) 
-        {
-        iCurrentTitleIndex = 0;
-        iFirstDrawingTitleIndex = 0;
-        iAdapter->StartL();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetFont
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetFont(CFont* aFont)
-    {
-    if(iFont != aFont)
-        {
-        for(TInt i = 0; i < iTitles.Count(); i++)
-            {
-            if(!iTitles[i]->IsSvgTitle())
-                {
-                TInt textWidth = aFont->TextWidthInPixels(
-                    iTitles[i]->TitleText());
-                iTitles[i]->SetTitleTextLengthInPixels(textWidth);
-                }
-            }
-        iFont = aFont;
-        iTextBaseline = iContentRect.Height() / 2 + iFont->AscentInPixels() / 2;
-        CBitmapContext* gc = iAdapter->BufferGc();
-        if(gc)
-            {
-            gc->UseFont(aFont);
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextColor
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextColor(TRgb aColor)
-    {
-    iTextColor = aColor;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetPenColor(iTextColor);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextUnderlineStyle
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextUnderlineStyle(TFontUnderline aStyle)
-    {
-    iUnderlining = aStyle;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetUnderlineStyle(iUnderlining);        
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextUnderlineStyle
-// -----------------------------------------------------------------------------
-void CXnNewstickerControl::SetTextStrikethroughStyle(TFontStrikethrough aStyle)
-    {
-    iStrikethrough = aStyle;
-    CBitmapContext* gc = iAdapter->BufferGc();
-    if(gc)
-        {
-        gc->SetStrikethroughStyle(iStrikethrough);        
+        UpdateTitleL( KNullDesC, aIndex );      
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::PrepareToDrawL
-// (other items were commented in a header).
+// CXnNewstickerControl::CurrentTitleIndex
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::PrepareToDrawLtrL()
+TInt CXnNewstickerControl::CurrentTitleIndex() const
     {
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if(!gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex );
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return;
-        }
-    if (iTitles[iFirstDrawingTitleIndex]->IsSvgTitle())
-        {
-        //  Show SVG title
-        iAdapter->ShowSvgL();
-        
-    	// Just in case, draw background to d-buffer
-        gc->BitBlt(TPoint(0,0), background);
-        return;
-        }
-
-    CGraphicsContext::TTextAlign alignment = TextAlignment();
-    if ( iTextFitInNewstickerRect || 
-         iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate && iTitles.Count() == 1 )
-        {
-        iAdapter->StopL();
-        SetBeginningState();
-        }
-    
-	TInt drawingPos(-iFirstDrawingOffset);
-
-	// At first, draw background
-    gc->BitBlt(TPoint(0,0), background);
-    TInt textLeft = iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels() - 
-        iFirstDrawingOffset;
-    TInt drawingTitleIndex = iFirstDrawingTitleIndex;
-    TInt drawingOffset(0);
-
-	// Main drawing loop. This loop runs as long as drawing area is not filled
-    // if Scroll behaviour is slide, then short text drawn only once.
-    FOREVER
-        {
-        TRect clipRect(TPoint(drawingPos,0), TPoint(iContentRect.Width(), iContentRect.Height()));
-        if ( iTextFitInNewstickerRect )
-            {
-            clipRect.SetWidth( clipRect.Width()-drawingPos);
-            }
-        // if the rest text fits into visible area
-     	if (textLeft <= iContentRect.Width() - drawingOffset)
-     	    {
-            gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), 
-                   clipRect,
-                   iTextBaseline,
-                   alignment);
-
-     	    TInt drawnLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels() + KGap;
-            drawingPos += drawnLength;
-     	    drawingOffset = drawingPos;
-            
-            // Update title index, if needed
-     	    drawingTitleIndex++;
-     	    if(drawingTitleIndex >= iTitles.Count())
-     	        {
-     	        drawingTitleIndex = 0;
-     	        if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide || iTextFitInNewstickerRect )
-     	            {
-     	            // what a dirty code!
-     	            break;
-     	            }
-     	        }
-            if(iSeparatorimage)
-                {
-                textLeft = 0;
-                }
-            else
-                {
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
-                else
-                    {
-                    textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels(); 
-                    }
-                }
-     	    }
-        else 
-            {
-            // Clip the text if needed in alternate mode
-            if  ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate )
-                {
-                HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-                TPtr titlePtr = title->Des();
-                TInt maxLength = iContentRect.Width();
-                AknBidiTextUtils::ConvertToVisualAndClipL(
-                        titlePtr, *iFont, maxLength, maxLength );                              
-                gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-                CleanupStack::PopAndDestroy( title );
-                }
-            else
-                {
-                gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), 
-                        clipRect,
-                        iTextBaseline,
-                        alignment);
-            
-                }            
-     	    break;
-            }
-            
-        if(iSeparatorimage)
-     	    {
-            TInt imageLeft = iSeparatorImageWidth - KGap;
-            
-            // if the rest of the image fits into visible area
- 	        if (imageLeft <= iContentRect.Width() - drawingOffset)
- 	            {
- 	            gc->BitBltMasked(TPoint(drawingPos, 0), iSeparatorimage->Bitmap(), 
- 	                TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), iSeparatorimage->Mask(), ETrue); 
-                drawingPos += iSeparatorImageWidth;
-     	        drawingOffset = drawingPos;
-                textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
- 	            }
-            else 
-                {
- 	            gc->BitBltMasked(TPoint(drawingPos, 0), iSeparatorimage->Bitmap(), 
- 	                TRect(TPoint(0,0), iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue); 
-                break;
-                }
-     	    }
-
-        if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate || 
-			iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )
-            {
-            break;
-            }
-        }
+    return iCurrentTitleIndex;
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::PrepareToDrawRtlL
-// (other items were commented in a header).
+// CXnNewstickerControl::Title
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::PrepareToDrawRtlL()
+const TDesC& CXnNewstickerControl::Title( TInt aIndex ) const
     {
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if(!gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    if ( iFirstDrawingTitleIndex < 0 || iFirstDrawingTitleIndex >= iTitles.Count() )
+    if( aIndex >= 0 && aIndex < iTitleTexts.Count() )
         {
-        return;
-        }
-    if (iTitles[iFirstDrawingTitleIndex]->IsSvgTitle())
-        {
-        //  Show SVG title
-        iAdapter->ShowSvgL();
-        
-    	// Just in case, draw background to d-buffer
-        gc->BitBlt(TPoint(0,0), background);
-        return;
+        return *iTitleTexts[ aIndex ];
         }
 
-    CGraphicsContext::TTextAlign alignment = TextAlignment();
-    if ( iTextFitInNewstickerRect || 
-         iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate && iTitles.Count() == 1 )
-        {
-        SetBeginningState();
-        iAdapter->StopL();
-        }
-    
-	// At first, draw background
-    gc->BitBlt(TPoint(0,0), background);
-    
-    TInt textLeft = iFirstDrawingOffset - 
-        iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels();
-    if(textLeft >= iContentRect.Width() )
-        {
-        textLeft = 0;
-        }
-    TInt drawingTitleIndex = iFirstDrawingTitleIndex;
-    TInt drawingOffset(iContentRect.iBr.iX);
-    
-    TRect clipRect(TPoint(0,0), TPoint(iFirstDrawingOffset, iContentRect.Height()));
-    TInt clipWidth = clipRect.Width();
-	// Main drawing loop. This loop runs as long as drawing area is not filled
-    FOREVER
-        {
-     	// if the rest text fits into visible area
-     	if (textLeft <= drawingOffset)
-     	    {
-     	    HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-     	    TPtr titlePtr = title->Des();
-
-     	    // convert to visual, do not clip
-     	    TInt maxLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-     	    AknBidiTextUtils::ConvertToVisualAndClipL( titlePtr, *iFont,
-     	                                               maxLength, maxLength );
-   
-            gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-            CleanupStack::PopAndDestroy( title );
-
-     	    TInt drawnLength = iTitles[drawingTitleIndex]->TitleTextLengthInPixels() + KGap;
-            clipWidth -= drawnLength;
-            clipRect.SetWidth(clipWidth);
-            drawingOffset = clipRect.iBr.iX;
+    return KNullDesC;
+    }
 
-            // Update title index
-     	    drawingTitleIndex++;
-     	    if(drawingTitleIndex >= iTitles.Count())
-     	        {
-     	        drawingTitleIndex = 0;
-                if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide || iTextFitInNewstickerRect)
-                    {
-                    // what a dirty code!
-                    break;
-                    }
-     	        }
-            if(iSeparatorimage)
-                {
-                textLeft = 0xfff;
-                }
-            else
-                {
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
-                else
-                    {
-                    textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels(); 
-                    }
-                }
-     	    }
-        else 
-            {
-            // Clip the text if needed in alternate mode
-            if  ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate )
-                {
-                HBufC* title = iTitles[drawingTitleIndex]->TitleText().AllocLC();
-                TPtr titlePtr = title->Des();
-                TInt maxLength = iContentRect.Width();
-                AknBidiTextUtils::ConvertToVisualAndClipL(
-                        titlePtr, *iFont, maxLength, maxLength );                              
-                gc->DrawText( titlePtr, clipRect, iTextBaseline, alignment );
-                CleanupStack::PopAndDestroy( title );
-                }
-            else
-                {
-                gc->DrawText(iTitles[drawingTitleIndex]->TitleText(), clipRect, 
-                        iTextBaseline, alignment);
-                }
-     	    break;
-            }
-
-        if(iSeparatorimage)
-     	    {
-            TInt imageLeft = iSeparatorImageWidth - KGap;
-            
-            // if the rest of the image fits into visible area
- 	        if (imageLeft <= drawingOffset)
- 	            {
- 	            gc->BitBltMasked(TPoint(clipRect.iBr.iX - imageLeft, 0), 
- 	                iSeparatorimage->Bitmap(), TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue);                
-                clipWidth -= iSeparatorImageWidth;
-                clipRect.SetWidth(clipWidth);
-                drawingOffset = clipRect.iBr.iX;                
-                textLeft = iTitles[drawingTitleIndex]->TitleTextLengthInPixels();
-                if (iTitles[drawingTitleIndex]->IsSvgTitle())
-                    {
-                    return;
-                    }
- 	            }
-            else 
-                {
- 	            gc->BitBltMasked(TPoint(clipRect.iBr.iX - imageLeft, 0), 
- 	                iSeparatorimage->Bitmap(), TRect(TPoint(0,0), 
- 	                iSeparatorimage->Bitmap()->SizeInPixels()), 
- 	                iSeparatorimage->Mask(), ETrue); 
-                break;
-                }
-     	    }
-     	    
-        if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate || 
-			iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )     	    
-            {
-            break;
-            }     	    
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::ClearTitles
+// -----------------------------------------------------------------------------
+//
+void CXnNewstickerControl::ClearTitles()
+    {
+    iAdapter->Stop();
+    iCurrentTitleIndex = -1;
+    // Don't delete just clear the contents
+    for( TInt i=0; i < iTitleTexts.Count(); i++ )
+        {
+        TRAP_IGNORE( UpdateTitleL( KNullDesC, i ) );
         }
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::DoScrollL
-// (other items were commented in a header).
+// CXnNewstickerControl::TitleCount
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DoScrollL()
+TInt CXnNewstickerControl::TitleCount() const
     {
-    //  If there are no titles, don't do anything.
-    if( !IsVisibleTitles() || iFirstDrawingTitleIndex < 0 || 
-            iFirstDrawingTitleIndex >= iTitles.Count() )
-        {
-        return;
-        }
-    
-    iAdapter->DrawNow();
-    
-    if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScroll ||
-        iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide ||
-		( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		  !CalculateCurrentTextFitInNewstickerRect() ) )
-        {    
-        iAdapter->SetTimerToScrolltime();             
-        iFirstDrawingOffset += iSpeed; // advance text
-        TInt titleLen = iTitles[iFirstDrawingTitleIndex]->TitleTextLengthInPixels() + 
-            iSeparatorImageWidth;
-
-        // if 100% (or more) has been drawn update...
-        if ((iIsWestern && iFirstDrawingOffset >= titleLen) ||
-            (!iIsWestern && iFirstDrawingOffset - titleLen >= iContentRect.Width()))
-            {
-            iAdapter->TitleScrolled(iFirstDrawingTitleIndex);
-            iFirstDrawingTitleIndex = GetNextTitleWithContent( iFirstDrawingTitleIndex + 1);
-            if(iFirstDrawingTitleIndex >= iTitles.Count())
-     	        {
-     	        iFirstDrawingTitleIndex = GetNextTitleWithContent( 0 );
-                if (iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide )
-                    {
-                    if ( iIsWestern )
-                        {
-                        iFirstDrawingOffset = -(iContentRect.iBr.iX-iContentRect.iTl.iX-KGap);
-                        }
-                    else
-                        {
-                        iFirstDrawingOffset = 0;
-                        }
-                    }
-                else
-                    {
-                    iFirstDrawingOffset -= titleLen + KGap;
-                    }
-     	        }
-            else
-                {
-                iFirstDrawingOffset -= titleLen + KGap;
-                }
-            iCurrentTitleIndex = iFirstDrawingTitleIndex;
-
-            if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		        CalculateCurrentTextFitInNewstickerRect() )
-                {
-                MoveToNextL();
-                }
-            }
-        // but if less than 100% and more than 75% has been drawn, update only current title index.
-        else if (((iIsWestern && iFirstDrawingOffset >= titleLen * 0.75) || 
-                  (!iIsWestern && iFirstDrawingOffset - titleLen >= iContentRect.iBr.iX * 0.75)) &&
-                   iFirstDrawingTitleIndex == iCurrentTitleIndex)
-            {
-            iCurrentTitleIndex++;
-     	    if(iCurrentTitleIndex >= iTitles.Count())
-     	        {
-     	        iCurrentTitleIndex = 0;
-     	        }
-     	    iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex );
-
-            if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		        CalculateCurrentTextFitInNewstickerRect() )
-                {
-                MoveToNextL();
-                }
-            }
-        }
-    else if( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate &&
-		     CalculateCurrentTextFitInNewstickerRect() )
-        {
-        iAdapter->SetTimerToDisplaytime();
-        MoveToNextL();
-        }
-    else
-        {
-        MoveToNextL();
-        }        
+    return iTitleTexts.Count();
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::Draw
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::Draw()
-    {
-    if( IsVisibleTitles() > 0 ) 
-        {
-        if( iIsWestern )
-            {
-            TRAP_IGNORE( PrepareToDrawLtrL() );
-            }
-        else
-            {
-            TRAP_IGNORE( PrepareToDrawRtlL() );
-            }
-        }    
-    else
-        {
-        CBitmapContext* gc = iAdapter->BufferGc();
-        const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-        if ( gc && background )
-            {            
-            gc->BitBlt(TPoint(0,0), background);
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::DrawStatic
+// CXnNewstickerControl::SelectTitle
 // (other items were commented in a header).
 // -----------------------------------------------------------------------------
 //
-void CXnNewstickerControl::DrawStatic()
+const TDesC& CXnNewstickerControl::SelectTitle()
     {
-    // draw to buffer gc
-    CBitmapContext* gc = iAdapter->BufferGc();
-    const CFbsBitmap* background = iAdapter->BackgroundBitmap();
-    if( !gc || !background || !IsVisibleTitles() )
-        {
-        return;
-        }
-    gc->BitBlt( TPoint(0,0), background );
-    
-    // Get the last title
-    TInt index = GetNextTitleWithContent( iTitles.Count() - 1, ETrue );
-    const TDesC& title = Title( index );
+    if( IsVisibleTitles() ) 
+        { 
+        if( iCurrentTitleIndex < 0 || iCurrentTitleIndex >= iTitleTexts.Count() )
+            {
+            // Get the last title
+            TInt index = 
+                    GetNextTitleWithContent( iTitleTexts.Count() - 1, ETrue );
+            iCurrentTitleIndex = index;
+            }
+        
+        return Title( iCurrentTitleIndex );
+        }  
     
-    // truncate text if needed
-    HBufC* visualText = HBufC::New(title.Length() + KAknBidiExtraSpacePerLine);
-    if (visualText)
-        {
-        TPtr visualTextPtr(visualText->Des());
-        TInt maxLength = iContentRect.Width();
-        AknBidiTextUtils::ConvertToVisualAndClip(
-                     title, visualTextPtr, *iFont, maxLength, maxLength );
-            
-        TRect blitRect( 0, 0, iContentRect.Width(), iContentRect.Height() );
-        gc->DrawText( *visualText, blitRect, iTextBaseline, TextAlignment() );
-        delete visualText;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetBeginningState
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetBeginningState()
-    {
-    iFirstDrawingOffset = 0;
-    if(!iIsWestern)
-        {
-        iFirstDrawingOffset = iContentRect.Width();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetScrollLooping
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetScrollLooping( TBool aLoop )
-    {
-    iScrollLooping = aLoop;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::ScrollLooping
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::ScrollLooping()
-    {
-    return iScrollLooping;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::TextFitInNewstickerRect
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::TextFitInNewstickerRect()
-    {
-    return iTextFitInNewstickerRect; 
+    return KNullDesC;
     }
 
 // -----------------------------------------------------------------------------
-// CXnNewstickerControl::CalculateTextFitInNewstickerRect
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CXnNewstickerControl::CalculateTextFitInNewstickerRect()
-    {
-    if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::ESlide &&
-         iTitles.Count() == 1 )
-        {
-        const TInt count = iTitles.Count();
-        TInt textWidth=0;
-        const TInt rectWidth = iContentRect.Width();
-        for (TInt i=0; i<count && textWidth<rectWidth;i++)
-            {
-            textWidth += iTitles[i]->TitleTextLengthInPixels();
-            }
-        iTextFitInNewstickerRect = (textWidth<rectWidth);
-        }
-    else
-        {
-        iTextFitInNewstickerRect = EFalse;
-        }
-    return iTextFitInNewstickerRect;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::CalculateCurrentTextFitInNewstickerRect
-// (other items were commented in a header).
+// CXnNewstickerControl::GetNextTitleWithContent
 // -----------------------------------------------------------------------------
 //
-TBool CXnNewstickerControl::CalculateCurrentTextFitInNewstickerRect()
-    {
-    if ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate )
-        {
-        const TInt count = iTitles.Count();
-        TInt textWidth=0;
-        const TInt rectWidth = iContentRect.Width();
-        if( iCurrentTitleIndex >= 0 && iCurrentTitleIndex < count )
-            {
-            textWidth = iTitles[iCurrentTitleIndex]->TitleTextLengthInPixels();
-            }
-        return ( textWidth < rectWidth );
-        }
-    return EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::SetTextAlignment
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CXnNewstickerControl::SetTextAlignment(TInt aAlignment)
-    {
-    iTextAlignment = aAlignment;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnNewstickerControl::TextAlignment
-// if title fits to the drawing rect and scrolling behaviour is ESlide then 
-// use alignment value 
-// if scroll behaviour is alternate then use alignment value
-// otherwise return ELeft in western and ERight on AH
-// -----------------------------------------------------------------------------
-//
-CGraphicsContext::TTextAlign CXnNewstickerControl::TextAlignment()
-    {
-    CGraphicsContext::TTextAlign alignment = iIsWestern ? CGraphicsContext::ELeft : CGraphicsContext::ERight;
-    
-    if ( iTextFitInNewstickerRect || iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EAlternate ||
-         ( iAdapter->ScrollBehaviour() == CXnNewstickerAdapter::EScrollAlternate && 
-           CalculateCurrentTextFitInNewstickerRect() ) )
-        {
-        switch( iTextAlignment )
-            {
-            default:
-            case ELayoutAlignLeft:
-                alignment = CGraphicsContext::ELeft;
-                break;
-            case ELayoutAlignRight:
-                alignment = CGraphicsContext::ERight;
-                break;
-            case ELayoutAlignCenter:
-                alignment = CGraphicsContext::ECenter;
-                break;
-            }
-        }
-    return alignment;
-    }
-
-TInt CXnNewstickerControl::GetNextTitleWithContent( TInt aStartSearch, TBool aBackwards )
+TInt CXnNewstickerControl::GetNextTitleWithContent( TInt aStartSearch, 
+        TBool aBackwards ) const
     {
     TInt dir = 1;
-    if ( aBackwards )
+    if( aBackwards )
         {
         dir = -1;
         }
-    for( TInt i = aStartSearch; i < iTitles.Count() && i >= 0; i += dir )
+    
+    for( TInt i = aStartSearch; i < iTitleTexts.Count() && i >= 0; i += dir )
         {
-        if ( iTitles[i]->TitleTextLengthInPixels() != 0 )
+        if( iTitleTexts[i]->Compare( KNullDesC ) != KErrNone )
             {
             return i;
             }
         }
+    
     return aStartSearch;
     }
 
-TBool CXnNewstickerControl::IsVisibleTitles()
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::SetCurrentTitle
+// -----------------------------------------------------------------------------
+//
+TBool CXnNewstickerControl::SetCurrentTitle( TBool aSetDefault )
     {
-    for( TInt i = 0; i < iTitles.Count() ; ++i )
+    TBool ret( EFalse );
+    TInt lastIndex( iTitleTexts.Count() - 1 );
+    
+    if( aSetDefault )
+        {
+        iCurrentTitleIndex = GetNextTitleWithContent( lastIndex, ETrue );
+        }
+    else if( iCurrentTitleIndex >= lastIndex )
+        {
+        iCurrentTitleIndex = GetNextTitleWithContent( 0 );
+        }
+    else
         {
-        if ( iTitles[i]->TitleTextLengthInPixels() != 0 )
+        iCurrentTitleIndex = GetNextTitleWithContent( iCurrentTitleIndex + 1 );
+        }
+    
+    if( iCurrentTitleIndex == lastIndex)
+        {
+        ret = ETrue;
+        }
+    
+    return ret;
+    }
+
+// -----------------------------------------------------------------------------
+// CXnNewstickerControl::IsVisibleTitles
+// -----------------------------------------------------------------------------
+//
+TBool CXnNewstickerControl::IsVisibleTitles() const
+    {
+    for( TInt i=0; i < iTitleTexts.Count(); i++ )
+        {
+        if( iTitleTexts[i]->Compare( KNullDesC ) != KErrNone )
             {
             return ETrue;
             }
         }
+    
     return EFalse;
     }