diff -r 000000000000 -r f979ecb2b13e calendarui/views/src/calenweeklistboxview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/calendarui/views/src/calenweeklistboxview.cpp Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,325 @@ +/* +* Copyright (c) 2002 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: CCalenWeekLBView customized key action of + * CFormattedCellListBoxView, and customized scrolling + * for event indicator. + * +*/ + + +//debug +#include "calendarui_debug.h" + +// INCLUDE FILES +#include "calenweeklistboxview.h" +#include "calenweeklistboxdata.h" + + +#include + + +// LOCAL CONSTANTS AND MACROS +#define ITEM_EXISTS(x) (((x) > -1) && ((x) < iModel->NumberOfItems())) + + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CCalenWeekLBView::CCalenWeekLBView() + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// Destructor +CCalenWeekLBView::~CCalenWeekLBView() + { + TRACE_ENTRY_POINT; + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::SetColumn +// Sets current Column +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::SetColumn( TInt aColumn, TBool aRedraw) + { + TRACE_ENTRY_POINT; + + iColumn = aColumn; + CFormattedCellListBoxItemDrawer* drawer = + static_cast( iItemDrawer ); + CCalenWeekLBData* data = + static_cast( drawer->FormattedCellData() ); + + data->SetHilightedSubCell(iColumn); + // Resize highlight size (which is used by highlight animation) + TSize size(data->SubCellSize(iColumn + 1)); + data->SetItemCellSize( size ); + + if (aRedraw && ItemIsVisible(iCurrentItemIndex)) + { + HideMatcherCursor(); + + TRect redrawRect(ItemPos(iCurrentItemIndex), + ItemSize(iCurrentItemIndex)); + iWin->Invalidate(redrawRect); + iWin->BeginRedraw(redrawRect); + DrawItem(iCurrentItemIndex); + iWin->EndRedraw(); + DrawMatcherCursor(); + } + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::Column +// Gets current Column +// (other items were commented in a header). +// --------------------------------------------------------- +// +TInt CCalenWeekLBView::Column() const + { + TRACE_ENTRY_POINT; + + TRACE_EXIT_POINT; + return iColumn; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::DrawHighlightAnimBackground +// Callback for drawing highlight background to highlight animation input +// layer. +// --------------------------------------------------------- +// +TBool CCalenWeekLBView::DrawHighlightAnimBackground( CFbsBitGc& aGc ) const + { + TRACE_ENTRY_POINT; + + CFormattedCellListBoxItemDrawer* drawer = + static_cast( iItemDrawer ); + CCalenWeekLBData* data = + static_cast( drawer->FormattedCellData() ); + + aGc.SetPenStyle(CGraphicsContext::ESolidPen); + aGc.SetBrushStyle(CGraphicsContext::ENullBrush); + + TInt index = CurrentItemIndex(); + if( index < 0 ) + index = 0; + + TRect rect; + data->CurrentSubCellPos( rect, ItemPos( index ) ); + + MAknsSkinInstance* skin = AknsUtils::SkinInstance(); + MAknsControlContext* cc = NULL; + + if((cc = AknsDrawUtils::ControlContextOfParent( data->Control() )) == NULL) + { + cc = data->SkinBackgroundContext(); + } + + TRACE_EXIT_POINT; + return AknsDrawUtils::DrawBackground( skin, cc, NULL, aGc, TPoint(0,0), rect, KAknsDrawParamNoClearUnderImage); + } + +// --------------------------------------------------------- +// CCalenWeekLBView::HorizontalMoveToItemL +// Calls form MoveCursorL().Left/Right arrow key handing function +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::HorizontalMoveToItemL( TInt aTargetSubCellIndex, TSelectionMode aSelectionMode) + { + TRACE_ENTRY_POINT; + + TInt oldCurrentItemIndex(iColumn); + iColumn = aTargetSubCellIndex; + + if (ColumnExist(iColumn) && !(iColumn == oldCurrentItemIndex)) + { + SetColumn(iColumn, EFalse); + + CFormattedCellListBoxItemDrawer* drawer = + static_cast( iItemDrawer ); + CCalenWeekLBData* data = + static_cast( drawer->FormattedCellData() ); + + TPoint oldPos(data->SubCellPosition(oldCurrentItemIndex + 1)); + TPoint pos(data->SubCellPosition(iColumn + 1)); + TSize size(data->SubCellSize(iColumn + 1)); + TInt left(Min(oldPos.iX, pos.iX)); + TInt right(Max(oldPos.iX, pos.iX)); + TInt y(ItemPos(iCurrentItemIndex).iY); + TRect redrawRect(left, y, right, y + size.iHeight); + + iGc->SetClippingRect(redrawRect); + + iItemDrawer->DrawItem(iCurrentItemIndex, + ItemPos(iCurrentItemIndex), ItemIsSelected(iCurrentItemIndex), + ETrue, (iFlags&EEmphasized) > 0, (iFlags&EDimmed) > 0 ); + + iGc->CancelClippingRect(); + } + UpdateSelectionL(aSelectionMode); + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::ColumnExist +// Check column existence +// (other items were commented in a header). +// --------------------------------------------------------- +// +TBool CCalenWeekLBView::ColumnExist(TInt aColumn) // Column index + { + TRACE_ENTRY_POINT; + + CFormattedCellListBoxItemDrawer* drawer = + static_cast( iItemDrawer ); + CCalenWeekLBData* data = + static_cast( drawer->FormattedCellData() ); + + if (aColumn >= 0 && aColumn < (data->CellCount() - 1)) + { + TRACE_EXIT_POINT; + return ETrue; + } + + TRACE_EXIT_POINT; + return EFalse; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::MoveCursorL +// Handling cursor move +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::MoveCursorL(TCursorMovement aCursorMovement, TSelectionMode aSelectionMode) + { + TRACE_ENTRY_POINT; + + switch (aCursorMovement) + { + case ECursorNextColumn: // Right cursor was pressed + HorizontalMoveToItemL(iColumn + 1, aSelectionMode); + break; + case ECursorPreviousColumn: // Left cursor was pressed + HorizontalMoveToItemL(iColumn - 1, aSelectionMode); + break; + default: + CFormattedCellListBoxView::MoveCursorL( + aCursorMovement, aSelectionMode); + break; + } + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::Draw +// Drawing all visible item +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::Draw(const TRect* /*clipRect*/) const + { + TRACE_ENTRY_POINT; + + if(RedrawDisabled() || !IsVisible()) + { + return; + } + + if(iModel->NumberOfItems() == 0) + { + iItemDrawer->ClearRect(iViewRect); + } + else + { + TInt firstPotentialItemIndex(iTopItemIndex); + TRect rect(iViewRect); + TInt lastPotentialItemIndex( iTopItemIndex + NumberOfItemsThatFitInRect(rect) -1 ); + TInt i(firstPotentialItemIndex); + + for(; i <= lastPotentialItemIndex; ++i) + { + if( ITEM_EXISTS(i) ) + { + DrawItem( i ); + } + } + } + + TRACE_EXIT_POINT; + } + +// --------------------------------------------------------- +// CCalenWeekLBView::DrawItem +// Draw item +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::DrawItem(TInt aItemIndex) const // Item index + { + TRACE_ENTRY_POINT; + + if (RedrawDisabled() || !IsVisible()) + { + return; + } + + if ((ITEM_EXISTS(aItemIndex)) && ItemIsVisible(aItemIndex)) + { + iGc->SetClippingRect(iViewRect); + + iItemDrawer->DrawItem(aItemIndex, + ItemPos(aItemIndex), ItemIsSelected(aItemIndex), + (aItemIndex == iCurrentItemIndex), + (iFlags&EEmphasized) > 0, (iFlags&EDimmed) > 0 ); + + iGc->CancelClippingRect(); + } + + TRACE_EXIT_POINT; + } + + +// --------------------------------------------------------- +// CCalenWeekLBView::PointerMoveToItemL +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CCalenWeekLBView::PointerMoveToItemL(TInt aNewColumn) + { + TRACE_ENTRY_POINT; + + if(AknLayoutUtils::PenEnabled()) + { + if(aNewColumn >= 0 && aNewColumn != iColumn) + HorizontalMoveToItemL(aNewColumn, CListBoxView::ENoSelection); + } + + TRACE_EXIT_POINT; + } + + +// End of File