commonuisupport/grid/tef/COEGRID2.CPP
changeset 0 2f259fa3e83a
--- /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);
+	}