--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/grid/tef/COEGRID2.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,307 @@
+// Copyright (c) 2005-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:
+// Implements the query dialog box used for asking users input on row
+// and column resize.\n
+// Also implements the Grid Window which handles the user
+// inputs on the Grid Table.\n
+// Copy of COEGRID.CPP except for OfferKeyEvent and HandlePointerEvent\n
+// Copy of COEGRID.CPP except for OfferKeyEvent and HandlePointerEvent
+//
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <coemain.h>
+#include "COEGRID.H"
+
+#define KGridPointerRepeatDelayInMicroSeconds 10000
+
+#define KGridRectForPointerRepeats (TRect(-1000,-1000,1000,1000))
+
+/**
+ Static function to construct the Grid Window.\n
+ Grid Window is a control on which the Grid table is displayed .\n
+ Invokes the second phase constructor.\n
+
+ @return : Pointer to the newly constructed Grid window.\n
+
+*/
+CGrid2Win* CGrid2Win::NewL(CCoeControl* aWin,CGridLay *aGridLay,CGridImg *aGridImg)
+ {
+ CGrid2Win *self=new(ELeave) CGrid2Win(aGridLay,aGridImg);
+ CleanupStack::PushL(self);
+ self->ConstructL(aWin);
+ CleanupStack::Pop();
+ return self;
+ }
+/**
+ Two argument Constructor.\n
+ Constructs a Grid Window taking GridLay and Grid Img as arguments.\n
+*/
+CGrid2Win::CGrid2Win(CGridLay *aGridLay,CGridImg *aGridImg)
+ : iGridLay(aGridLay),
+ iGridImg(aGridImg)
+ {}
+/**
+ Second phase constructor for the Grid Window.\n
+ Creates a control's window which is the child of the application's window group.\n
+ Allows pointer grabs in a window in order to receive pointer events.\n
+ Sets the window as the default window.\n
+*/
+void CGrid2Win::ConstructL(CCoeControl* aWin)
+ {
+ CreateWindowL(aWin);
+ Window().PointerFilter(EPointerFilterDrag,0);
+ Window().SetPointerGrab(ETrue);
+ iGridImg->SetWindow(&Window());
+ if (iGridLay->IsIndefiniteRowBoundaries())
+ iGridLay->SetUniformRowHeight(ETrue);
+ }
+/**
+ Destructor for Grid Window.\n
+*/
+CGrid2Win::~CGrid2Win()
+ {
+ }
+/**
+
+ @return Pointer to the GridLay object owned by the Grid Window.\n
+
+ The function is invoked in case modifications
+ need to be made to the layout of the grid.\n
+*/
+CGridLay* CGrid2Win::GridLay() const
+ {
+ return iGridLay;
+ }
+/**
+ @return Pointer to the GridImg object owned by the Grid Window.\n
+
+ The function is invoked whenever there is a need to redraw the contents of the grid.\n
+*/
+CGridImg* CGrid2Win::GridImg() const
+ {
+ return iGridImg;
+ }
+/**
+ Draws the Grid Window.\n
+ The function is invoked by the window server.\n
+ This function is used for window server-initiated redrawing of controls,
+ and for some application-initiated drawing.\n
+ It should be implemented by each control.\n
+
+*/
+void CGrid2Win::Draw(const TRect& aRect) const
+ {
+ CWindowGc& gc=SystemGc();
+ gc.DrawRect(Rect());
+ TRAPD(err,iGridImg->DrawL(&gc,aRect));
+ __ASSERT_ALWAYS(!err,User::Panic(_L("DrawL(&gc,aRect) 2"),err));
+ }
+/**
+ The function provides handlers for various key events such as \n
+ Ctrl+ KeyUpArrow.\n
+ Ctrl+ KeyDownArrow.\n
+ Ctrl+ KeyRightArrow.\n
+ Ctrl+ KeyLeftArrow.\n
+ Ctrl+ KeyHome.\n
+ Ctrl+ KeyEnd.\n
+ Ctrl+ KeyPageup.\n
+ Ctrl+ KeyPageDown.\n
+ KeyUpArrow.\n
+ KeyDownArrow.\n
+ KeyRightArrow.\n
+ KeyLeftArrow.\n
+ KeyHome.\n
+ KeyEnd.\n
+ KeyPageup.\n
+ KeyPageDown.\n
+ The function differs from the corresponding function in CGridWin as the
+ Resize mode is not taken into consideration while handling the key events.\n
+
+ @return : TKeyResponse indicating whether the key event has been handled or not.\n
+
+*/
+TKeyResponse CGrid2Win::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode /*aType*/)
+// Tells GridImg to do the appropriate action on a keypress.
+ {
+ TUint selectState=0;
+ if (aKeyEvent.iModifiers&EModifierCtrl)
+ {
+ switch (aKeyEvent.iCode)
+ {
+ case EKeyUpArrow:
+ iGridImg->MoveCursorL(EMovePageUp,selectState);
+ break;
+ case EKeyDownArrow:
+ iGridImg->MoveCursorL(EMovePageDown,selectState);
+ break;
+ case EKeyLeftArrow:
+ iGridImg->MoveCursorL(EMovePageLeft,selectState);
+ break;
+ case EKeyRightArrow:
+ iGridImg->MoveCursorL(EMovePageRight,selectState);
+ break;
+ case EKeyHome:
+ iGridImg->MoveCursorL(EMoveHome,selectState);
+ break;
+ case EKeyEnd:
+ iGridImg->MoveCursorL(EMoveEnd,selectState);
+ break;
+ case EKeyPageUp:
+ iGridImg->MoveCursorL(EMoveColumnStart,selectState);
+ break;
+ case EKeyPageDown:
+ iGridImg->MoveCursorL(EMoveColumnEnd,selectState);
+ break;
+ default:
+ return EKeyWasNotConsumed;
+ }
+ }
+ else
+ {
+ switch (aKeyEvent.iCode)
+ {
+ case EKeyUpArrow:
+ iGridImg->MoveCursorL(EMoveRowUp,selectState);
+ break;
+ case EKeyDownArrow:
+ iGridImg->MoveCursorL(EMoveRowDown,selectState);
+ break;
+ case EKeyLeftArrow:
+ iGridImg->MoveCursorL(EMoveColumnLeft,selectState);
+ break;
+ case EKeyRightArrow:
+ iGridImg->MoveCursorL(EMoveColumnRight,selectState);
+ break;
+ case EKeyPageUp:
+ iGridImg->MoveCursorL(EMovePageUp,selectState);
+ break;
+ case EKeyPageDown:
+ iGridImg->MoveCursorL(EMovePageDown,selectState);
+ break;
+ case EKeyHome:
+ iGridImg->MoveCursorL(EMoveRowStart,selectState);
+ break;
+ case EKeyEnd:
+ iGridImg->MoveCursorL(EMoveRowEnd,selectState);
+ break;
+ default:
+ return EKeyWasNotConsumed;
+ }
+ }
+ return EKeyWasConsumed;
+ }
+/**
+ The function provides handlers for Pointer events.\n
+ Handles the following pointer events \n
+ 1. Pointer Drag.\n
+ 2. Double click event.\n
+ 3. Pointer Button Down.\n
+*/
+void CGrid2Win::HandlePointerEventL(const TPointerEvent& aPointerEvent)
+ {
+ //
+ // Tells GridImg to do the appropriate action on a pointer event
+ //
+ if (aPointerEvent.iType==TPointerEvent::EDrag || aPointerEvent.iType==TPointerEvent::EButtonRepeat
+ && !iGridImg->MainRect().Contains(aPointerEvent.iPosition))
+ {
+ Window().RequestPointerRepeatEvent(KGridPointerRepeatDelayInMicroSeconds,KGridRectForPointerRepeats);
+ }
+ TPointerEvent event=aPointerEvent;
+ if (event.iType==TPointerEvent::EButtonRepeat)
+ event.iType=TPointerEvent::EDrag;
+ else if (event.iModifiers&EModifierDoubleClick)
+ event.iType=TPointerEvent::EButton1Down;
+
+ if (event.iType == TPointerEvent::EButton1Up)
+ iGridImg->FinishLabelDragL();
+ else if (event.iType == TPointerEvent::EButton1Down)
+ {
+ if (!iGridImg->StartLabelDrag(event.iPosition))
+ iGridImg->SetCursorWithPointerL(event.iPosition,0);
+ }
+ else if (event.iType == TPointerEvent::EDrag)
+ {
+ if (!iGridImg->UpdateLabelDrag(event.iPosition))
+ iGridImg->SetCursorWithPointerL(event.iPosition,CGridImg::EIsWithDrag);
+ }
+ }
+/**
+ Shrinks the Grid.
+ The shrinking is achieved by adding value of (1,1) to the top left corner.\n
+ and subtracting the same coordinates from the bottom right corner of the grid.\n
+*/
+void CGrid2Win::SizeChanged()
+ {
+ TRect rect(Size());
+ rect.Shrink(1,1);
+ iGridImg->SetGridRect(rect);
+ iGridLay->ResetVisibleToCell();
+ }
+/**
+ Draw the cell corresponding to the reference.\n
+ Calls the DrawCellL function of the CGridImg class.\n
+*/
+void CGrid2Win::DrawCellL(const TCellRef& aCell) const
+ {
+ iGridImg->DrawCellL(aCell);
+ }
+/**
+ Draws the rectangle corresponding to the range.\n
+ Invokes the DrawRangeL function of the CGridImg class.\n
+*/
+void CGrid2Win::DrawRangeL(const TRangeRef& aRange) const
+ {
+ iGridImg->DrawRangeL(aRange);
+ }
+/**
+ Draws the currently selected region.\n
+ Invokes the corresponding function of the CGridImg class.\n
+*/
+void CGrid2Win::DrawSelectedL() const
+ {
+ iGridImg->DrawSelectedL();
+ }
+/**
+ @return the cell reference where the cursor is located.\n
+
+ Delegates the task to the corresponding function of CGridImg function.\n
+*/
+TCellRef CGrid2Win::CursorPos() const
+ {
+ return iGridImg->CursorPos();
+ }
+/**
+ Sets the cursor position to the cell reference sent as an argument.\n
+*/
+void CGrid2Win::SetCursorPosL(const TCellRef& aCursorPos) const
+ {
+ iGridImg->SetCursorPosL(aCursorPos);
+ }
+/**
+ Scrolls the grid by the minimum necessary to
+ allow the specified cell to become visible.\n
+ The offset to the cell required to be visible is calculated and
+ a scroll operation is performed.\n
+*/
+void CGrid2Win::ExposeCellL(const TCellRef& aCell) const
+ {
+ TPoint offset=iGridLay->ExposeCell(aCell);
+ iGridImg->ScrollL(offset);
+ }