--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textrendering/word/SRC/WPLBOX.CPP Tue Feb 02 02:02:46 2010 +0200
@@ -0,0 +1,531 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include <txtrich.h>
+
+#include <frmtlay.h>
+
+#include <prnsetup.h>
+
+#include <barsread.h>
+#include <badesca.h>
+
+#include <eikenv.h>
+#include <techview/eikrted.h>
+#include <techview/eiktbar.h>
+#include <techview/eiktxlbm.h>
+#include <techview/eikclbd.h>
+#include <techview/eiklbi.h>
+#include <techview/eikcmbut.h>
+#include <eikon.mbg>
+#include <gulicon.h>
+
+#include "WPAPPUI.H"
+#include <word.rsg>
+#include "WORD.HRH"
+#include <word.mbg>
+#include "WPLBOX.H"
+
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include "txtfmlyr_internal.h"
+#endif
+
+const TInt KBmpListVertItemGap=8;
+const TInt KMaxTotalBorderBitmaps=8;
+
+CDesCArray* CWordAppUi::BuildFontNameListLC() const
+ {
+ CDesCArray* fontList=new(ELeave) CDesCArrayFlat(4);
+ CleanupStack::PushL(fontList);
+ FontUtils::GetAvailableFontsL(*iCoeEnv->ScreenDevice(),*fontList,EGulNoSymbolFonts);
+ return fontList;
+ }
+
+CDesCArray* CWordAppUi::BuildStyleNameListLC() const
+ {
+ const CStyleList& styleData=*iModel->StyleList();
+ TInt count=styleData.Count();
+ CDesCArray* styleList=new(ELeave) CDesCArrayFlat(count+1); // +1 for Normal (global layers)
+ CleanupStack::PushL(styleList);
+ TParagraphStyleName name;
+ iCoeEnv->ReadResource(name,R_WORD_NORMAL);
+ styleList->AppendL(name);
+ for (TInt ii=0;ii<count;ii++)
+ {
+ name.Zero();
+ name.Append(styleData.At(ii).iStyle->iName);
+ styleList->AppendL(name);
+ }
+ styleList->Sort();
+ return styleList;
+ }
+
+CDesCArray* CWordAppUi::BuildAlignListLC(CArrayPtrFlat<CGulIcon>& aIcons) const
+ {
+ CDesCArray* text = new(ELeave) CDesCArrayFlat(4);
+ CleanupStack::PushL(text);
+ for (TInt ii = (TInt)CParaFormat::ELeftAlign; ii <= (TInt)CParaFormat::EJustifiedAlign; ii++)
+ {
+ TBuf<8> buf;
+ buf.Num(ii);
+ buf.Append(TChar(KColumnListSeparator));
+ text->AppendL(buf);
+ CGulIcon* icon = STATIC_CAST(CGulIcon*, iEikonEnv->CreateIconL(TPtrC(), AlignmentBitmapId(ii)));
+ aIcons.AppendL(icon);
+ }
+ return text;
+ }
+
+
+TInt CWordAppUi::AlignmentBitmapId(TInt aId)const
+ {
+ switch(aId)
+ {
+ case(CParaFormat::ELeftAlign):
+ return EMbmEikonLefta;
+ case(CParaFormat::ECenterAlign):
+ return EMbmEikonCenta;
+ case(CParaFormat::ERightAlign):
+ return EMbmEikonRighta;
+ case(CParaFormat::EJustifiedAlign):
+ return EMbmEikonJusta;
+ default:
+ return EMbmEikonLefta;
+ }
+ }
+
+
+TInt CWordAppUi::FindFontName(CDesCArray* aFontList) const
+ {
+ TCharFormat charFormat;
+ TCharFormatMask charUndeterminedMask;
+ const TCursorSelection selection=iRichEd->Selection();
+ Text()->GetCharFormat(charFormat,charUndeterminedMask,selection.LowerPos(),selection.Length());
+ //
+ TInt index=0;
+ if (aFontList->Find(charFormat.iFontSpec.iTypeface.iName,index))
+ index=0; // !! reset if can't find - daft API to Find()
+ return index;
+ }
+
+TInt CWordAppUi::FindStyleName(CDesCArray* aStyleList) const
+ {
+ TInt index=0;
+ TParagraphStyleName name;
+ iCoeEnv->ReadResource(name , R_WORD_NORMAL);
+ const TCursorSelection selection=iRichEd->Selection();
+ TBool styleChange;
+ const CParaFormatLayer* style=Text()->ParagraphStyle(styleChange,selection.LowerPos(),selection.Length());
+ TUid id=style->Type();
+ if (id==KNormalParagraphStyleUid)
+ aStyleList->Find(name,index);
+ else
+ aStyleList->Find(((CParagraphStyle*)style)->iName,index);
+ return index;
+ }
+
+TInt CWordAppUi::NearestHeightIndex() const
+ {
+ TCharFormat charFormat;
+ TCharFormatMask charUndeterminedMask;
+ const TCursorSelection selection=iRichEd->Selection();
+ Text()->GetCharFormat(charFormat,charUndeterminedMask,selection.LowerPos(),selection.Length());
+ const TInt heightInTwips=charFormat.iFontSpec.iHeight;
+ return FontUtils::IndexOfNearestHeight(*iTwipsList,heightInTwips);
+ }
+
+TInt CWordAppUi::FindAlignmentL() const
+ {
+ TInt index=0;
+ CParaFormat* paraFormat=CParaFormat::NewLC();
+ TParaFormatMask paraUndeterminedMask;
+ const TCursorSelection selection=iRichEd->Selection();
+ Text()->GetParaFormatL(paraFormat,paraUndeterminedMask,selection.LowerPos(),selection.Length());
+ if (!paraUndeterminedMask.AttribIsSet(EAttAlignment))
+ {
+ switch (paraFormat->iHorizontalAlignment)
+ {
+ case CParaFormat::ELeftAlign:
+ index=0;
+ break;
+ case CParaFormat::ECenterAlign:
+ index=1;
+ break;
+ case CParaFormat::ERightAlign:
+ index=2;
+ break;
+ case CParaFormat::EJustifiedAlign:
+ index=3;
+ break;
+ default:
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy();
+ return index;
+ }
+
+CDesCArray* CWordAppUi::UpdateHeightListLC()
+ {
+ TCharFormat charFormat;
+ TCharFormatMask charUndeterminedMask;
+ const TCursorSelection selection=iRichEd->Selection();
+ Text()->GetCharFormat(charFormat,charUndeterminedMask,selection.LowerPos(),selection.Length());
+ CDesCArray* pointsList=new(ELeave) CDesCArrayFlat(4);
+ CleanupStack::PushL(pointsList);
+ iTwipsList=new(ELeave) CArrayFixFlat<TInt>(4);
+ TInt err=FontUtils::GetAvailableHeightsInTwipsAndPointsL(*iCoeEnv->ScreenDevice(),charFormat.iFontSpec.iTypeface.iName,*iTwipsList,*pointsList);
+ if (err==KErrNotSupported)
+ {// This is a foreign font, so preserve current height only.
+ TBuf<4> num;
+ num.Num(FontUtils::PointsFromTwips(charFormat.iFontSpec.iHeight));
+ pointsList->AppendL(num);
+ iTwipsList->AppendL(charFormat.iFontSpec.iHeight);
+ }
+ return pointsList;
+ }
+
+void CWordAppUi::LaunchStylesPopupL()
+ {
+ if (iWordFlags & EStyleBoxPopped)
+ return;
+ CDesCArray* styleList = BuildStyleNameListLC();
+ CEikCommandButtonBase* nameButton = STATIC_CAST(CEikCommandButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonStyle));
+ const TInt index = FindStyleName(styleList);
+ DoCreatePopoutL(styleList, index, nameButton, EToolBand, EFalse);
+ iWordFlags |= EStyleBoxPopped;
+ }
+
+void CWordAppUi::LaunchFontsPopupL()
+ {
+ if (iWordFlags & EFNameBoxPopped)
+ return;
+ CDesCArray* fontList = BuildFontNameListLC();
+ CEikCommandButtonBase* nameButton = STATIC_CAST(CEikCommandButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonFont));
+ const TInt index = FindFontName(fontList);
+ DoCreatePopoutL(fontList, index, nameButton, EToolBand, ETrue);
+ iWordFlags |= EFNameBoxPopped;
+ }
+
+void CWordAppUi::LaunchAlignPopupL()
+ {
+ if (iWordFlags & EAlignBoxPopped)
+ return;
+ CArrayPtrFlat<CGulIcon>* icons = new(ELeave) CArrayPtrFlat<CGulIcon>(4);
+ CleanupStack::PushL(icons);
+ CDesCArray* text = BuildAlignListLC(*icons);
+ CEikCommandButtonBase* nameButton = STATIC_CAST(CEikCommandButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonAlign));
+ const TInt index = FindAlignmentL();
+ DoCreateBitmapPopoutL(text, icons, index, nameButton, EToolBand);
+ iWordFlags |= EAlignBoxPopped;
+ }
+
+void CWordAppUi::LaunchFontHeightsPopupL()
+ {
+ if (iWordFlags & EFHeightBoxPopped)
+ return;
+ CDesCArray* pointsList = UpdateHeightListLC();
+ CEikCommandButtonBase* sizeButton = STATIC_CAST(CEikCommandButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonFontSize));
+ const TInt index = NearestHeightIndex();
+ DoCreatePopoutL(pointsList, index, sizeButton, EToolBand, ETrue);
+ iWordFlags |= EFHeightBoxPopped;
+ }
+
+void CWordAppUi::LaunchBordersPopupL()
+ {
+ if (iWordFlags & EBordersPopped)
+ return;
+ CDesCArray* array = new(ELeave) CDesCArrayFlat(KMaxTotalBorderBitmaps);
+ CleanupStack::PushL(array);
+ CArrayPtrFlat<CGulIcon>* icons = new(ELeave) CArrayPtrFlat<CGulIcon>(KMaxTotalBorderBitmaps);
+ CleanupStack::PushL(icons);
+ for (TInt ii = (TInt)EMbmWordFullsbrd; ii <= (TInt)EMbmWordNullbrd; ii++)
+ {
+ TBuf<8> buf;
+ buf.Num(ii - EMbmWordFullsbrd);
+ buf.Append(TChar(KColumnListSeparator));
+ array->AppendL(buf);
+ CGulIcon* icon = NULL;
+ icon = ((CGulIcon*)iEikonEnv->CreateIconL(BitmapStore(), ii));
+ CleanupStack::PushL(icon);
+ icons->AppendL(icon);
+ }
+ CEikCommandButtonBase* bordersButton = STATIC_CAST(CEikCommandButtonBase*, iEikonEnv->AppUiFactory()->ToolBand()->ControlById(EWordButtonBorders));
+ TPoint pos = bordersButton->PositionRelativeToScreen();
+ TSize size((*icons)[0]->Bitmap()->SizeInPixels());
+ const TInt width = size.iWidth + 6;
+ size.iHeight += KBmpListVertItemGap;
+ size.iHeight *= 4;
+ size.iWidth = width << 1;
+ pos.iY += bordersButton->Size().iHeight; // draw popout below the borders button
+ // determine current borders
+ TParaFormatMask mask;
+ CParaFormat* paraFormat = CParaFormat::NewLC();
+ const TCursorSelection selection = iRichEd->TextView()->Selection();
+ Text()->GetParaFormatL(paraFormat, mask, selection.LowerPos(), selection.Length());
+ TInt index = 0;
+ if (mask.AttribIsSet(EAttTopBorder) || mask.AttribIsSet(EAttBottomBorder) || mask.AttribIsSet(EAttLeftBorder) ||
+ mask.AttribIsSet(EAttRightBorder))
+ ; // leave index as zero
+ else if (!paraFormat->BordersPresent())
+ index = ENullBorder-ESingleFull;
+ else
+ {
+ TParaBorder left = paraFormat->ParaBorder(CParaFormat::EParaBorderLeft);
+ TParaBorder right = paraFormat->ParaBorder(CParaFormat::EParaBorderRight);
+ TParaBorder top = paraFormat->ParaBorder(CParaFormat::EParaBorderTop);
+ TParaBorder bottom = paraFormat->ParaBorder(CParaFormat::EParaBorderBottom);
+ if (top.iThickness == bottom.iThickness && left.iThickness == right.iThickness && top.iThickness == KThickBorderThicknessInTwips &&
+ top.iLineStyle == bottom.iLineStyle && left.iLineStyle == right.iLineStyle &&
+ top.iLineStyle == TParaBorder::ESolid)
+ index = EDoubleFull - ESingleFull;
+ else if (left.iThickness || right.iThickness)
+ ;
+ else if (top.iThickness == bottom.iThickness && left.iThickness == right.iThickness && top.iThickness == KThinBorderThicknessInTwips &&
+ top.iLineStyle == bottom.iLineStyle && left.iLineStyle == right.iLineStyle &&
+ top.iLineStyle == TParaBorder::ESolid)
+ index = ESingleTopAndBottom - ESingleFull;
+ else if (top.iLineStyle == TParaBorder::ESolid && (top.iThickness == KThinBorderThicknessInTwips || top.iThickness == KThickBorderThicknessInTwips) &&
+ bottom.iThickness == 0)
+ {
+ if (top.iThickness == KThinBorderThicknessInTwips)
+ index = ESingleTop - ESingleFull;
+ else
+ index = EDoubleTop - ESingleFull;
+ }
+ else if (bottom.iLineStyle == TParaBorder::ESolid && (bottom.iThickness == KThinBorderThicknessInTwips || bottom.iThickness == KThickBorderThicknessInTwips) &&
+ top.iThickness == 0)
+ {
+ if (bottom.iThickness == KThinBorderThicknessInTwips)
+ index = ESingleBottom - ESingleFull;
+ else
+ index = EDoubleBottom - ESingleFull;
+ }
+ }
+ CleanupStack::PopAndDestroy(); // paraFormat
+ //
+ DoCreateMcBitmapPopoutL(array, icons, index, bordersButton, width, TRect(pos, size));
+ iWordFlags |= EBordersPopped;
+ }
+
+void CWordAppUi::DestroyPopoutLBox()
+ {
+ if (iPopoutListBox)
+ {
+ iEikonEnv->RemoveFromStack(iPopoutListBox);
+ delete iPopoutListBox;
+ iPopoutListBox=NULL;
+ delete iTwipsList;
+ iTwipsList=NULL;
+ }
+ else if (iBitmapPopout)
+ {
+ iEikonEnv->RemoveFromStack(iBitmapPopout);
+ delete iBitmapPopout;
+ iBitmapPopout=NULL;
+ }
+ else if (iMcBitmapPopout)
+ {
+ iEikonEnv->RemoveFromStack(iMcBitmapPopout);
+ delete iMcBitmapPopout;
+ iMcBitmapPopout=NULL;
+ }
+ }
+
+void CWordAppUi::DoCreatePopoutL(CDesCArray* aText,TInt aIndex,CEikCommandButtonBase* aLaunchingButton,TToolBarType aType,TBool aLimitWidth)
+ {
+ CWordTextListBox* popout = new(ELeave) CWordTextListBox;
+ CleanupStack::PushL(popout);
+ popout->ConstructL(NULL, CEikListBox::EPopout | CEikListBox::ELeftDownInViewRect);
+ popout->CreateScrollBarFrameL();
+ popout->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+ popout->SetObserver(this);
+ iEikonEnv->AddWindowShadow(popout);
+ popout->Model()->SetItemTextArray(aText);
+ CleanupStack::Pop(); // aText
+ const TSize screenSize = iEikonEnv->ScreenDevice()->SizeInPixels();
+ TSize butSize = aLaunchingButton->Size();
+ TInt width = Max(butSize.iWidth, popout->MaxWidth());
+ if (aType == EToolBar)
+ {
+ if (width + butSize.iWidth > screenSize.iWidth)
+ width = screenSize.iWidth - butSize.iWidth; // assume word is always full screen
+ }
+ else
+ {
+ if (width > screenSize.iWidth)
+ width = screenSize.iWidth;
+ if (aLimitWidth)
+ {
+ width = Max(butSize.iWidth, popout->MaxWidth());
+ if (width > 2 * butSize.iWidth)
+ width = 2 * butSize.iWidth;
+ }
+ }
+ TPoint pos = aLaunchingButton->PositionRelativeToScreen();
+ if (aType == EToolBand)
+ pos.iY += butSize.iHeight;
+ TRect listBoxRect(pos, TSize(width, 0));
+ popout->CalculatePopoutRect(0, pos.iY, listBoxRect);
+ if (aType == EToolBar)
+ pos.iX -= listBoxRect.Width();
+ else if (listBoxRect.iTl.iY < pos.iY)
+ {
+ const TInt itemHeight = popout->ItemHeight();
+ while (listBoxRect.iTl.iY < pos.iY)
+ listBoxRect.iTl.iY += itemHeight;
+ listBoxRect.iTl.iY = pos.iY;
+ }
+ if (aType == EToolBand && listBoxRect.iBr.iX > screenSize.iWidth)
+ listBoxRect.Move(listBoxRect.iBr.iX - screenSize.iWidth, 0);
+ popout->SetExtent(TPoint(pos.iX, listBoxRect.iTl.iY), listBoxRect.Size());
+ popout->SetCurrentItemIndex(aIndex);
+ iEikonEnv->AddDialogLikeControlToStackL(popout);
+ popout->SetLaunchingButton(aLaunchingButton);
+ popout->ActivateL();
+ CleanupStack::Pop(); // popout
+ iPopoutListBox = popout;
+ aLaunchingButton->SetIgnoreNextPointerUp();
+ iPopoutListBox->ClaimPointerGrab();
+ }
+
+void CWordAppUi::DoCreateBitmapPopoutL(CDesCArray* aText, CArrayPtrFlat<CGulIcon>* aIcons, TInt aIndex,
+ CEikCommandButtonBase* aControl, TToolBarType aType)
+ {
+ CEikColumnListBox* popout = new(ELeave) CEikColumnListBox;
+ CleanupStack::PushL(popout);
+ popout->ConstructL(NULL, CEikListBox::EPopout | CEikListBox::ELeftDownInViewRect | CEikListBox::ENoFirstLetterMatching);
+ popout->CreateScrollBarFrameL();
+ popout->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+ popout->SetObserver(this);
+ popout->SetItemHeightL((*aIcons)[0]->Bitmap()->SizeInPixels().iHeight + KBmpListVertItemGap);
+ iEikonEnv->AddWindowShadow(popout);
+ popout->Model()->SetItemTextArray(aText);
+ CleanupStack::Pop(); // aText
+ popout->ItemDrawer()->ColumnData()->SetIconArray(aIcons);
+ CleanupStack::Pop(); // aIcons
+ popout->ItemDrawer()->ColumnData()->SetColumnAlignmentL(0, CGraphicsContext::ECenter);
+ popout->ItemDrawer()->ColumnData()->SetGraphicsColumnL(0, ETrue);
+ TPoint pos = aControl->PositionRelativeToScreen();
+ if (aType == EToolBand)
+ pos.iY += aControl->Size().iHeight;
+ TRect listBoxRect(pos, TSize(aControl->Size().iWidth, 0));
+ popout->CalculatePopoutRect(0, pos.iY, listBoxRect);
+ if (aType == EToolBar)
+ pos.iX -= listBoxRect.Width();
+ // assume list is not too wide or high to fit on screen
+ const TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
+ const TSize listSize = listBoxRect.Size();
+ if (listBoxRect.iTl.iX + listSize.iWidth > screenSize.iWidth)
+ listBoxRect.iTl.iX = screenSize.iWidth - listSize.iWidth;
+ popout->SetRect(listBoxRect);
+ //
+ popout->ItemDrawer()->ColumnData()->SetColumnWidthPixelL(0, popout->View()->ViewRect().Width());
+ popout->SetCurrentItemIndex(aIndex);
+ iEikonEnv->AddDialogLikeControlToStackL(popout);
+ popout->ActivateL();
+ CleanupStack::Pop(); // popout
+ iBitmapPopout = popout;
+ iBitmapPopout->SetLaunchingButton(aControl);
+ aControl->SetIgnoreNextPointerUp();
+ iBitmapPopout->ClaimPointerGrab();
+ }
+
+void CWordAppUi::DoCreateMcBitmapPopoutL(CDesCArray* aText, CArrayPtrFlat<CGulIcon>* aIcons, TInt aIndex,
+ CEikCommandButtonBase* aLaunchingButton, TInt aColumnWidth, const TRect& aRect)
+ {
+ CWordSnakingColumnListBox* popout = new(ELeave) CWordSnakingColumnListBox;
+ CleanupStack::PushL(popout);
+ popout->ConstructL(NULL, CEikListBox::EPopout | CEikListBox::ELeftDownInViewRect | CEikListBox::ENoFirstLetterMatching);
+ popout->CreateScrollBarFrameL();
+ popout->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
+ popout->SetObserver(this);
+ popout->SetItemHeightL((*aIcons)[0]->Bitmap()->SizeInPixels().iHeight + KBmpListVertItemGap);
+ iEikonEnv->AddWindowShadow(popout);
+ popout->Model()->SetItemTextArray(aText);
+ CleanupStack::Pop(); // aText
+ popout->ItemDrawer()->ColumnData()->SetColumnWidthPixelL(0, aColumnWidth);
+ popout->ItemDrawer()->ColumnData()->SetIconArray(aIcons);
+ CleanupStack::Pop(EMbmWordNullbrd - EMbmWordFullsbrd + 2); // aBitmaps
+ popout->ItemDrawer()->ColumnData()->SetColumnAlignmentL(0, CGraphicsContext::ECenter);
+ popout->ItemDrawer()->ColumnData()->SetGraphicsColumnL(0, ETrue);
+ popout->SetColumnWidth(aColumnWidth);
+ // assume list is not too wide or high to fit on screen
+ TRect rect(aRect);
+ const TSize size = rect.Size() + popout->BorderSize();
+ rect.SetSize(size);
+ const TSize screenSize = iCoeEnv->ScreenDevice()->SizeInPixels();
+ if (rect.iTl.iX + size.iWidth > screenSize.iWidth)
+ rect.iTl.iX = screenSize.iWidth - size.iWidth;
+ popout->SetRect(rect);
+ //
+ popout->SetCurrentItemIndex(aIndex);
+ iEikonEnv->AddDialogLikeControlToStackL(popout);
+ popout->ActivateL();
+ CleanupStack::Pop(); // popout
+ iMcBitmapPopout = popout;
+ iMcBitmapPopout->SetLaunchingButton(aLaunchingButton);
+ aLaunchingButton->SetIgnoreNextPointerUp();
+ iMcBitmapPopout->ClaimPointerGrab();
+ }
+
+//
+// class CWordTextListBox
+//
+
+TInt CWordTextListBox::MaxWidth()
+ {
+ iView->CalcDataWidth();
+ TInt width=iView->DataWidth();
+ width+=(HorizontalMargin()<<1)+iBorder.SizeDelta().iWidth;
+ return width;
+ }
+
+//
+// class CWordSnakingColumnListBox
+//
+
+void CWordSnakingColumnListBox::ConstructL(const CCoeControl* aParent,TInt aFlags)
+ {
+ CTextListBoxModel* model = new(ELeave) CTextListBoxModel;
+ iModel = model;
+ model->ConstructL();
+ CColumnListBoxData* data = CColumnListBoxData::NewL();
+ CleanupStack::PushL(data);
+ iItemDrawer = new(ELeave) CColumnListBoxItemDrawer(model, iEikonEnv->NormalFont(), data);
+ CleanupStack::Pop(); //data
+ iItemDrawer->SetDrawMark(EFalse);
+ CEikListBox::ConstructL(aParent, aFlags|ELeftDownInViewRect);
+ }
+
+CTextListBoxModel* CWordSnakingColumnListBox::Model() const
+ {
+ return(CTextListBoxModel*)iModel;
+ }
+
+CColumnListBoxItemDrawer* CWordSnakingColumnListBox::ItemDrawer() const
+ {
+ return(CColumnListBoxItemDrawer*)iItemDrawer;
+ }
+
+TSize CWordSnakingColumnListBox::BorderSize() const
+ {
+ TSize size(HorizontalMargin()<<1,VerticalMargin()<<1);
+ size+=iBorder.SizeDelta();
+ return size;
+ }