--- 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;
}