--- a/textinput/peninputcommonctrls/src/peninputdropdownlist/peninputlist.cpp Wed Jun 23 04:57:58 2010 +0800
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,984 +0,0 @@
-/*
-* Copyright (c) 2002-2005 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: Abstract base class for drop-down list objects
-*
-*/
-
-#include <fbs.h>
-
-#include "peninputlist.h"
-#include "peninputcandidate.h"
-#include "peninputpluginutils.h"
-#include <AknsDrawUtils.h>
-#include "peninputdropdownlist.h"
-#include "peninputlayout.h"
-
-const TInt KInvalidCandIndex = -1;
-
-// ======== MEMBER FUNCTIONS ========
-
-// Implementation of Class CList
-
-// -----------------------------------------------------------------------------
-// CList::CList
-// construtor function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CList::CList(CListManager* aManager, MFepCtrlDropdownListContext *aOwner)
-: iOwner(aOwner), iManager(aManager), iNextButtonDisable(ETrue),
- iPreviousButtonDisable(ETrue)
- {
- }
-
-// -----------------------------------------------------------------------------
-// CList::~CList
-// desstrutor function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CList::~CList()
- {
- }
-
-// -----------------------------------------------------------------------------
-// CList::ConstructL
-// 2nd construtor function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::ConstructL()
- {
- // Pre calculate all areas
- CalculateAreas();
- }
-
-// -----------------------------------------------------------------------------
-// CList::HandlePointerDownL
-// handle pointer down
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::HandlePointerDownL(const TPoint& aPoint)
- {
- // position where the tap occurred
-
- // set clicked rect as empty rect
- iClickedRect = KEmptyRect;
-
- // Check if content rect tapped
- if ( iContentRect.Contains(aPoint) )
- {
- CCandidate* candidate = FindCandidate(aPoint, iClickedCandidateIndex);
-
- if ( candidate )
- {
- #ifdef RD_TACTILE_FEEDBACK
- static_cast<CFepCtrlDropdownList*>(iOwner)->UiLayout()->
- DoTactileFeedback(ETouchFeedbackBasic);
- #endif //RD_TACTILE_FEEDBACK
- TRect rect = candidate->GetRect();
- iClickedRect.SetRect(rect.iTl,rect.iBr);
-
- // Set the flag to indicate that candidate button has been pressed down
- // so that we know to draw correctly
- iIndicateButtonClicked = ETrue ;
- DrawSelection(iClickedRect,ETrue);
- DrawHighightCell(iClickedRect,EFalse);
- }
- else
- {
- iClickedRect = KDummyRect;
- // This is a dummy value so that we know
- // in HandlePointerUpL that iClickedRect is
- // is not empty but the pointer down event did
- // not occure inside any valid rect such as
- // candidate rect or any of the navigation rects
- }
- }
- }
-
-// -----------------------------------------------------------------------------
-// CList::HandlePointerDragL
-// handle pointer drag function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::HandlePointerDragL(const TPoint& /*aPoint*/)
- {
- }
-
-// -----------------------------------------------------------------------------
-// CList::HandlePointerUpL
-// handle pointer up function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::HandlePointerUpL( const TPoint& /*aPoint*/)
- {
- }
-
-// -----------------------------------------------------------------------------
-// CList::HandlePointerLeave
-// handle pointer leave function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::HandlePointerLeave(const TPoint& /*aPoint*/)
- {
- DrawSelection( iClickedRect, EFalse );
- DrawHighightCell(iClickedRect, ETrue);
- }
-
-// -----------------------------------------------------------------------------
-// CList::Draw
-// draw the list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::Draw()
- {
- // Draw mask
- iOwner->DrawMask(iRect);
-
- // Active bitmap context
- iOwner->ActivateBitmapContext();
-
- iOwner->Gc()->SetBrushStyle(CGraphicsContext::ESolidBrush);
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- iOwner->Gc()->SetPenSize(iOwner->GetPenSize());
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- iOwner->Gc()->SetPenColor( iOwner->GetBorderColor() );
- iOwner->Gc()->DrawRect(iRect);
-
- }
-
-// -----------------------------------------------------------------------------
-// CList::Rect
-// get the rect of list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-const TRect& CList::Rect()
- {
- return iRect;
- }
-
-// -----------------------------------------------------------------------------
-// CList::UpdateList
-// update the list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::UpdateListL(TBool /*aDrawFlag*/, TBool /*aRecalculate*/)
- {
- // Do nothing, every derived class will have its action
- }
-
-
-// -----------------------------------------------------------------------------
-// CList::ResetStatus
-// update the list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::ResetStatus()
- {
- iPenDownInCandidate = EFalse;
- iClickedRect = KEmptyRect;
- }
-
-// -----------------------------------------------------------------------------
-// CList::FindCandidate
-// find candidate according to the assigned position
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-CCandidate* CList::FindCandidate(const TPoint& aPosition, TInt& aIndex)
- {
- CCandidate* candidate = NULL;
-
- aIndex = KErrNotFound;
-
- if ( iOwner->CandidateCount() > 0 )
- {
- // Loop through the candidates and find the one that contains
- // the TPoint aPosition
- for (TInt i = iOwner->GetFirstCandidateIndex(); i < iOwner->GetLastCandidateIndex(); i++)
- {
- candidate = iOwner->GetCandidate(i);
-
- if ( !candidate )
- {
- continue;
- }
-
- TRect rect = candidate->GetRect();
-
- if ( rect.Contains(aPosition) )
- {
- // We found the candidate
- aIndex = i;
- return candidate;
- }
- }
- }
-
- return NULL;
- }
-
-// -----------------------------------------------------------------------------
-// CList::CalculatePositionsL
-// calculate the position of all visible cells in the list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TInt CList::CalculatePositionsL()
- {
- return 0;
- }
-
-// -----------------------------------------------------------------------------
-// CList::SetHighlightCell
-// Set cell to highlight or not
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::SetHighlightCell(const TInt aCellIndex, TBool aHighlight, TBool aForceDraw)
- {
- if ( !aForceDraw && iPenDownInCandidate )
- {
- return;
- }
-
- if ( ( aCellIndex<0 ) || ( aCellIndex > iOwner->CandidateCount() ) )
- {
- return;
- }
-
- CCandidate* candidate = iOwner->GetCandidate(aCellIndex);
-
- if ( ! candidate )
- {
- return;
- }
-
- TRect rect = candidate->GetRect();
-
- iOwner->DrawMask(rect);
- iOwner->ActivateBitmapContext();
-
- if (!iDropdownListDrawInfo.iSupportSkin)
- {
- iOwner->Gc()->SetBrushStyle(CGraphicsContext::ENullBrush);
- iOwner->Gc()->SetPenSize(iOwner->GetPenSize());
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- iOwner->Gc()->SetPenColor(iOwner->GetBorderColor());
-
- // Draw the bottom and right line
- iOwner->Gc()->DrawLine( TPoint(rect.iTl.iX, rect.iBr.iY),rect.iBr);
- iOwner->Gc()->DrawLine( TPoint(rect.iBr.iX, rect.iTl.iY),rect.iBr);
-
- // also draw left and top line
- if (iOwner->GetCellHorizontalMargin() != 0)
- {
- iOwner->Gc()->DrawLine(rect.iTl, TPoint(rect.iTl.iX, rect.iBr.iY));
- }
-
- if (iOwner->GetCellVerticalMargin() != 0)
- {
- iOwner->Gc()->DrawLine(rect.iTl, TPoint(rect.iBr.iX, rect.iTl.iY));
- }
-
- rect.Shrink(TSize(1,1));
-
- if ((iIsMultiRows) && (iOwner->GetCellVerticalMargin() == 0))
- {
- if ( ( rect.iTl.iY - 1 - Rect().iTl.iY ) != ( iOwner->GetRowNum() - 1 ) *
- iOwner->GetCellHeight() )
- {
- //If it isn't the last row
- rect.iBr.iY = rect.iBr.iY + 1;
- }
- }
- }
-
- const CFbsBitmap* bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapHighlight);
- if ( bmp )
- {
- if (aHighlight)
- {
- CFbsBitmap* bmpTemp = const_cast<CFbsBitmap*>(bmp);
- AknIconUtils::SetSize(bmpTemp, rect.Size(), EAspectRatioNotPreserved);
-
- if (iDropdownListDrawInfo.iSupportSkin)
- {
- CBitmapDb::TBitmapType bmpID = CBitmapDb::EBitmapHighlight;
- CBitmapDb::TBitmapType maskBmpID = CBitmapDb::EBitmapHighlightMask;
- bmp = iOwner->GetBitmapDb()->GetBitMap(bmpID);
- bmpTemp = const_cast<CFbsBitmap*>(bmp);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(maskBmpID),
- ETrue);
- }
- else
- {
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(
- CBitmapDb::EBitmapHighlightMask),
- ETrue);
- }
- }
- else
- {
- // Draw bitmap
- if (iDropdownListDrawInfo.iSupportSkin)
- {
- TRect innerRect = rect;
- innerRect.Shrink( 4, 0 );
-
- AknPenInputDrawUtils::Draw3PiecesFrame(AknsUtils::SkinInstance(),
- *iOwner->Gc(),
- rect,
- innerRect,
- iDropdownListDrawInfo.iCandidateLeftImgID,
- iDropdownListDrawInfo.iCandidateMiddleImgID,
- iDropdownListDrawInfo.iCandidateRightImgID);
- }
- else
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPrimary);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(
- CBitmapDb::EBitmapPrimaryMask),
- ETrue);
- }
- }
- }
- else
- {
- if (aHighlight)
- {
- iOwner->Gc()->SetBrushColor(iOwner->GetHighLightBgColor());
- }
- else
- {
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- }
-
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ENullPen);
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ESolidBrush );
-
- rect.Shrink(TSize(1,1));
-
- iOwner->Gc()->DrawRect(rect);
-
- rect.Shrink(TSize(-1,-1));
- }
-
- // draw canditate's text
- iOwner->Gc()->UseFont(iOwner->GetFont());
-
- candidate->DrawText(*iOwner->Gc(),iOwner->GetAlignment(),
- iOwner->GetTextMargin(),
- iOwner->GetTextColor(),
- iOwner->GetSpecialTextColor(),
- iOwner->GetFixedText());
-
- iOwner->Gc()->DiscardFont();
- iOwner->Invalidate(candidate->GetRect());
- }
-
-// -----------------------------------------------------------------------------
-// CList::DrawSelection
-// Draw selection cell just selected
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::DrawSelection(const TRect& aRect, TBool aIndicate)
- {
- // Check whether the rect that should be redrawn is in content rect
- TRect tmpRect = iContentRect;
- tmpRect.Intersection(aRect);
-
- if ( tmpRect == aRect )
- {
- // rect is inside content rect thus we
- // should be drawing candidate press
- DrawCandidatePress(aRect, aIndicate);
- }
- else
- {
- // rect is inside navigation rect thus we
- // should be drawing navigation press
- DrawNavigationPress(aRect, aIndicate);
- }
- }
-
-// -----------------------------------------------------------------------------
-// CList::DrawCandidatePress
-// draw candidate when pressed or un-pressed
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::DrawCandidatePress(const TRect& aRect, TBool aIndicate)
- {
- // We are dealing with the candidates
- TInt index = 0;
- // Get the candidate
- CCandidate* candidate = FindCandidate(aRect.Center(), index);
-
- if (!candidate)
- {
- return;
- }
-
- iOwner->DrawMask(aRect);
-
- iOwner->ActivateBitmapContext();
-
- iPenDownInCandidate = EFalse;
-
- TBool isDrawBmp = ETrue;
- CBitmapDb::TBitmapType bmpID = CBitmapDb::EBitmapPrimary;
- CBitmapDb::TBitmapType maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- const CFbsBitmap* bmp = NULL;
- // set bg color
- if ( aIndicate )
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPenDown);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapPenDown;
- maskBmpID = CBitmapDb::EBitmapPenDownMask;
- isDrawBmp = ETrue;
- iPenDownInCandidate = ETrue;
- }
- else
- {
- iOwner->Gc()->SetBrushColor(iOwner->GetButtonDownBgColor());
- }
- }
- else
- {
- const RArray<TInt>& secondaryList = iOwner->GetSecondaryList();
-
- if ( iOwner->IsEnableSecondary() && (secondaryList.Find(index) != KErrNotFound) )
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapSecondary);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapSecondary;
- maskBmpID = CBitmapDb::EBitmapSecondaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPrimary);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapPrimary;
- maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- // If enable multi color and the color has been set, then use the color
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- }
- }
- }
- else
- {
- // Else use background color
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPrimary);
- if ( bmp )
- {
- bmpID = CBitmapDb::EBitmapPrimary;
- maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- }
- }
- }
-
- // Get the candidate rect
- TRect rect = candidate->GetRect();
-
- if (!iDropdownListDrawInfo.iSupportSkin)
- {
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ENullBrush );
- iOwner->Gc()->SetPenSize(iOwner->GetPenSize());
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- iOwner->Gc()->SetPenColor(iOwner->GetBorderColor());
-
- // Draw the bottom line
- iOwner->Gc()->DrawLine( TPoint(rect.iTl.iX, rect.iBr.iY),rect.iBr );
- iOwner->Gc()->DrawLine( TPoint(rect.iBr.iX, rect.iTl.iY),rect.iBr );
-
- if (iOwner->GetCellHorizontalMargin() != 0)
- {
- iOwner->Gc()->DrawLine(rect.iTl, TPoint(rect.iTl.iX, rect.iBr.iY));
- }
-
- if (iOwner->GetCellVerticalMargin() != 0)
- {
- iOwner->Gc()->DrawLine(rect.iTl, TPoint(rect.iBr.iX, rect.iTl.iY));
- }
-
- rect.Shrink(TSize(1,1));
-
- if ((iIsMultiRows) && (iOwner->GetCellVerticalMargin() == 0))
- {
- if ( ( rect.iTl.iY - 1 - Rect().iTl.iY ) != ( iOwner->GetRowNum() - 1 ) *
- iOwner->GetCellHeight() )
- {
- //If it isn't the last row
- rect.iBr.iY = rect.iBr.iY + 1;
- }
- }
- }
-
- if ( isDrawBmp )
- {
- if (iDropdownListDrawInfo.iSupportSkin)
- {
- if ( aIndicate )
- {
-/*
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ENullPen);
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iOwner->Gc()->SetBrushColor(iDropdownListDrawInfo.iCandidatesHighlightColor);
-
- // Draw the whole rect without border
- iOwner->Gc()->DrawRect( rect ); */
-
- /*bmpID = CBitmapDb::EBitmapHighlight;
- maskBmpID = CBitmapDb::EBitmapHighlightMask;
- bmp = iOwner->GetBitmapDb()->GetBitMap(bmpID);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(maskBmpID),
- ETrue); */
- TRect innerRect = rect;
- innerRect.Shrink( 4, 0 );
-
- // ----- draw bitmaps -----
- iOwner->ActivateBitmapContext();
- iOwner->Gc()->Clear(rect);
-
-
-
- AknPenInputDrawUtils::Draw3PiecesFrame(AknsUtils::SkinInstance(),
- *iOwner->Gc(),
- rect,
- innerRect,
- iDropdownListDrawInfo.iCandidatePressedLeftImgID,
- iDropdownListDrawInfo.iCandidatePressedMiddleImgID,
- iDropdownListDrawInfo.iCandidatePressedRightImgID);
- }
- else
- {
- TRect innerRect = rect;
- innerRect.Shrink( 4, 0 );
-
- // ----- draw bitmaps -----
- iOwner->ActivateBitmapContext();
- iOwner->Gc()->Clear(rect);
-
-
-
- AknPenInputDrawUtils::Draw3PiecesFrame(AknsUtils::SkinInstance(),
- *iOwner->Gc(),
- rect,
- innerRect,
- iDropdownListDrawInfo.iCandidateLeftImgID,
- iDropdownListDrawInfo.iCandidateMiddleImgID,
- iDropdownListDrawInfo.iCandidateRightImgID);
- }
- }
- else
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(bmpID);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(maskBmpID),
- ETrue);
- }
- }
- else
- {
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ENullPen);
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ESolidBrush );
- // Draw the whole rect without border
- iOwner->Gc()->DrawRect( rect );
- }
-
- // draw canditate's text
- iOwner->Gc()->UseFont(iOwner->GetFont());
- TRgb textColor;
- if (aIndicate)
- {
- textColor = iOwner->GetHighLightTextColor();
- }
- else
- {
- textColor = iOwner->GetTextColor();
- }
-
- candidate->DrawText(*iOwner->Gc(),iOwner->GetAlignment(),
- iOwner->GetTextMargin(),
- textColor,
- iOwner->GetSpecialTextColor(),
- iOwner->GetFixedText());
-
- iOwner->Gc()->DiscardFont();
-
- // Invalidate the rect
- iOwner->Invalidate(aRect);
- }
-
-// -----------------------------------------------------------------------------
-// CList::DrawNavigationPress
-// draw navigation button when pressed or un-pressed
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CList::DrawNavigationPress(const TRect& /*aRect*/, TBool /*aIndicate*/)
- {
- return EFalse;
- }
-
-// -----------------------------------------------------------------------------
-// CList::CalculateAreas
-// Calculate all kinds of rectangles
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::CalculateAreas()
- {
- //
- }
-
-// -----------------------------------------------------------------------------
-// CList::SizeChanged
-// size changed function
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::SizeChanged()
- {
- CalculateAreas();
- }
-
-// -----------------------------------------------------------------------------
-// CList::DrawCandidates
-// draw all visible candidates to the list
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::DrawCandidates()
- {
- const RArray<TInt>& secondaryList = iOwner->GetSecondaryList();
-
- TBool isDrawBmp = EFalse;
- CBitmapDb::TBitmapType bmpID = CBitmapDb::EBitmapPrimary;
- CBitmapDb::TBitmapType maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- const CFbsBitmap* bmp = NULL;
- for(TInt i = iOwner->GetFirstCandidateIndex(); i < iOwner->GetLastCandidateIndex(); i++)
- {
- CCandidate* candidate = iOwner->GetCandidate(i);
- if ( !candidate )
- {
- continue;
- }
-
- TRect rect = candidate->GetRect();
-
- if (iDropdownListDrawInfo.iSupportSkin)
- {
-
- if (iOwner->GetHighlightList().Find(i) != KErrNotFound)
- {
- /*iOwner->Gc()->SetPenStyle(CGraphicsContext::ENullPen);
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iOwner->Gc()->SetBrushColor(iDropdownListDrawInfo.iCandidatesHighlightColor);
- // Draw the whole rect without border
- iOwner->Gc()->DrawRect( rect );*/
- bmpID = CBitmapDb::EBitmapHighlight;
- maskBmpID = CBitmapDb::EBitmapHighlightMask;
- bmp = iOwner->GetBitmapDb()->GetBitMap(bmpID);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(maskBmpID),
- ETrue);
- }
- else
- {
- TRect innerRect = rect;
- innerRect.Shrink( 4, 0 );
-
- // ----- draw bitmaps -----
- iOwner->ActivateBitmapContext();
-
-
- AknPenInputDrawUtils::Draw3PiecesFrame(AknsUtils::SkinInstance(),
- *iOwner->Gc(),
- rect,
- innerRect,
- iDropdownListDrawInfo.iCandidateLeftImgID,
- iDropdownListDrawInfo.iCandidateMiddleImgID,
- iDropdownListDrawInfo.iCandidateRightImgID);
- }
- }
- else
- {
- if ( iOwner->IsEnableSecondary() && ( secondaryList.Find(i) != KErrNotFound) )
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapSecondary);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapSecondary;
- maskBmpID = CBitmapDb::EBitmapSecondaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPrimary);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapPrimary;
- maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- // If enable multi color and the color has been set, then use the color
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- }
- }
- }
- else if (iOwner->GetHighlightList().Find(i) != KErrNotFound)
- {
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapHighlight);
- if ( bmp )
- {
- // Draw bitmap
- bmpID = CBitmapDb::EBitmapHighlight;
- maskBmpID = CBitmapDb::EBitmapHighlightMask;
- isDrawBmp = ETrue;
- }
- else
- {
- // If the cell is set to highlight, use high light color
- iOwner->Gc()->SetBrushColor(iOwner->GetHighLightBgColor());
- }
- }
- else
- {
- // Else use background color
- bmp = iOwner->GetBitmapDb()->GetBitMap(CBitmapDb::EBitmapPrimary);
- if ( bmp )
- {
- bmpID = CBitmapDb::EBitmapPrimary;
- maskBmpID = CBitmapDb::EBitmapPrimaryMask;
- isDrawBmp = ETrue;
- }
- else
- {
- iOwner->Gc()->SetBrushColor(iOwner->GetBgColor());
- }
- }
-
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ENullBrush );
- iOwner->Gc()->SetPenSize(iOwner->GetPenSize());
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ESolidPen);
- iOwner->Gc()->SetPenColor(iOwner->GetBorderColor());
- // Draw the bottom line
- iOwner->Gc()->DrawLine( rect.iTl, TPoint(rect.iBr.iX, rect.iTl.iY) );
- iOwner->Gc()->DrawLine( TPoint(rect.iTl.iX, rect.iBr.iY),rect.iBr );
- iOwner->Gc()->DrawLine( TPoint(rect.iBr.iX, rect.iTl.iY),rect.iBr );
-
- if (iOwner->GetCellHorizontalMargin() != 0)
- {
- iOwner->Gc()->DrawLine(rect.iTl, TPoint(rect.iTl.iX, rect.iBr.iY));
- }
-
- rect.Shrink(TSize(1,1));
-
- if ( isDrawBmp )
- {
- bmpID = CBitmapDb::EBitmapSecondary;
- maskBmpID = CBitmapDb::EBitmapSecondaryMask;
- bmp = iOwner->GetBitmapDb()->GetBitMap(bmpID);
- iOwner->Gc()->DrawBitmapMasked(rect,
- bmp,
- bmp->SizeInPixels(),
- iOwner->GetBitmapDb()->GetBitMap(maskBmpID),
- ETrue);
- }
- else
- {
- iOwner->Gc()->SetPenStyle(CGraphicsContext::ENullPen);
- iOwner->Gc()->SetBrushStyle( CGraphicsContext::ESolidBrush );
- iOwner->Gc()->DrawRect(rect);
- }
- }
-
- // Draw the text of the candidate
- iOwner->Gc()->UseFont(iOwner->GetFont());
- candidate->DrawText(*iOwner->Gc(),iOwner->GetAlignment(),
- iOwner->GetTextMargin(),
- iOwner->GetTextColor(),
- iOwner->GetSpecialTextColor(),
- iOwner->GetFixedText());
- }
- iOwner->Gc()->DiscardFont();
- }
-
-// -----------------------------------------------------------------------------
-// CList::CompareRect
-// Compare two rect is equal or not
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CList::CompareRect(const TRect& aSrcRect, const TRect& aDesRect)
- {
-
- if (aSrcRect == aDesRect)
- {
- DrawSelection(iClickedRect, ETrue);
- DrawHighightCell(iClickedRect, EFalse);
- return ETrue;
- }
- else
- {
- TBool hasDraw = EFalse;
- const RArray<TInt>& highLightList = iOwner->GetHighlightList();
- for (TInt i=0; i < highLightList.Count(); i++ )
- {
- CCandidate* candidate = iOwner->GetCandidate(i);
- if ( candidate )
- {
- if ( iClickedRect == candidate->GetRect() )
- {
- DrawHighightCell(iClickedRect, ETrue);
- hasDraw = ETrue;
- break;
- }
- }
- }
-
- if ( !hasDraw )
- {
- DrawSelection(iClickedRect, EFalse);
- DrawHighightCell(iClickedRect, ETrue);
- }
-
- return EFalse;
- }
- }
-
-// -----------------------------------------------------------------------------
-// CList::Move
-// when the drop down list is moved, the function will be called.
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-void CList::Move(const TPoint& aOffsetPoint)
- {
- // Move the iRect
- iRect.Move(aOffsetPoint);
-
- // Move the content rect
- iContentRect.Move(aOffsetPoint);
-
- // Move the navigation rect
- iNavigationRect.Move(aOffsetPoint);
-
- // Move the close button rect
- iNavigationCloseRect.Move(aOffsetPoint);
-
- // Move the up button rect
- iNavigationPreviousRect.Move(aOffsetPoint);
-
- // Move the down button rect
- iNavigationNextRect.Move(aOffsetPoint);
-
- }
-
-void CList::DrawHighightCell(const TRect& aSrcRect, const TBool aIndidate)
- {
- const RArray<TInt>& highLightList = iOwner->GetHighlightList();
-
- TInt candIdx;
- for (TInt i = 0; i < highLightList.Count(); i++)
- {
- candIdx = highLightList[i];
-
- // if highlight candidate are not in current page, then do not draw it
- if ((candIdx >= iOwner->GetFirstCandidateIndex()) &&
- (candIdx <= iOwner->GetLastCandidateIndex()))
- {
- CCandidate* candidate = iOwner->GetCandidate(candIdx);
-
- if (candidate)
- {
- if (aSrcRect == candidate->GetRect())
- {
- if (aIndidate)
- {
- SetHighlightCell(candIdx, ETrue);
- }
-
- continue;
- }
- }
- }
- }
- }
-
-TInt CList::StartCandIdxOfLine(TInt /*aCandIndex*/)
- {
- return KInvalidCandIndex;
- }
-
-void CList::SetNextPageHighlightCellAfterOnePageL(const TInt /*aCellIndex*/)
- {
- }
-
-void CList::SetDropdownListImgID(TDropdownListDrawInfo aDropdownListDrawInfo)
- {
- iDropdownListDrawInfo = aDropdownListDrawInfo;
- }
-
-
-// End Of File