commonuisupport/grid/tef/TGRID0STEP.CPP
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/grid/tef/TGRID0STEP.CPP	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,600 @@
+// 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:
+// Tests APIs related to CGridImg,CGridLay and MGridTable classes
+// for tables with FIXED row boundaries\n
+// 
+//
+
+/**
+ @file
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <e32keys.h>
+#include <f32file.h>
+#include <s32file.h>
+
+#include "TGrid0Step.h"
+
+
+//! Color combination for Black background.\n
+#define KRgbForeground			TRgb(0,0,0)			// Black
+//! Color combination for White background.\n
+#define KRgbBackground			TRgb(255,255,255)	// White
+//! Color comination for Gray grid lines.\n
+#define KRgbLines				TRgb(170,170,170)	// Light Gray
+//! Color combination for Label separators.\n
+#define KRgbLabelSeparators		TRgb(0,0,0)
+
+
+/**
+  Constructor for the Grid App Ui class \n
+*/
+CTestGridAppUi::CTestGridAppUi(CTmsTestStep* aStep) :
+	CTestCoeAppUi(aStep)
+{}
+/**
+  Destructor for the Grid App Ui class\n
+  Destroys all the member objects like \n
+  Grid Window, Grid Image,Grid Lay, Grid Table etc \n
+*/
+CTestGridAppUi::~CTestGridAppUi()
+	{
+	RemoveFromStack(iGridWin);
+	delete iGridWin;
+    delete iGridImg;
+    delete iGridLay;
+	delete iSheetCellImg;
+	delete iSheetLabelImg;
+	delete iGridTable;
+	delete iZoomFactor;
+	delete iDialog;
+	}
+
+
+/**
+  
+  Handles the following Key Events\n
+  1. Ctrl+ e - Exits the application\n
+  2. Ctrl+ t - Sets the Title Lines\n
+  3. Ctrl+ r - Sets the cursor position to the cell at the top of the window\n
+  4. Ctrl+ z - Sets the zoom factor \n 
+  5. Ctrl+ p - 
+  6. Ctrl+ i - Inserts columns \n
+  7. Ctrl+ d - Deletes columns \n
+  8. Ctrl+ c - Changes the grid colour settings\n
+  9. Shift+t - Makes the cell containing cursor visible \n
+  10.Shift+z - Sets the zoom factor\n
+  11.Shift+r - Makes the query dialog visible\n
+  12.Shift+Esc - Defocuses the query dialog if it is already visible\n
+  13.Shift+c - Resizes the columns \n
+  14.Shift+r - Resize the rows \n
+ 
+  @return Response to the key event indicating whether the event is successfully handled or not.\n
+  
+*/
+TKeyResponse CTestGridAppUi::HandleKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
+	{
+	if (aType==EEventKey)
+        {
+        if ((aKeyEvent.iModifiers&EAllStdModifiers)==EModifierCtrl)
+		    {
+		    switch (aKeyEvent.iCode)
+			    {
+			    case CTRL('e'):
+				    SaveL();
+				    iCoeEnv->Flush();
+				    CBaActiveScheduler::Exit();
+				    break;
+			    case CTRL('t'):
+					{
+					CGridLay* gridLay=iGridWin->GridLay();
+					gridLay->SetTitleLinesL(EFalse);
+					iGridWin->ExposeCellL(iGridWin->CursorPos());
+				    gridLay->SetTitleLinesL(ETrue);
+					}
+				    break;
+			    case CTRL('r'):
+				    iGridWin->GridLay()->SetGridToDefault();
+				    iGridWin->DrawNow();
+				    iGridWin->SetCursorPosL(iGridWin->GridLay()->VisibleRange().iFrom);
+				    break;
+                case CTRL('z'):
+		            {
+		            TInt zoomFactor=iZoomFactor->ZoomFactor();
+		            zoomFactor=(zoomFactor<(TZoomFactor::EZoomOneToOne*4))
+			            ? zoomFactor*2 : TZoomFactor::EZoomOneToOne/4;
+		            SetZoomFactorL(zoomFactor);
+				    break;
+		            }
+				case CTRL('p'):
+					iGridWin->GridLay()->SetPageSizeInTwipsL
+						(TSize(EPageWidthInTwips,EPageHeightInTwips));
+					iGridWin->GridLay()->PaginateL();
+					iGridWin->DrawNow();
+				    break;
+				case CTRL('i'):
+				case CTRL('d'):
+					{
+					const CGridCellRegion* selected=iGridImg->Selected();
+					TInt count=selected->Count();
+					TInt noOfCols;
+					TInt startCol;
+					if (count)
+						{
+						TRangeRef range=(*selected)[count-1];	//last range
+						noOfCols=range.iTo.iCol-range.iFrom.iCol+1;
+						startCol=range.iFrom.iCol;
+						}
+					else
+						{
+						noOfCols=1;
+						startCol=iGridWin->CursorPos().iCol;
+						}
+					if (aKeyEvent.iCode==CTRL('d'))
+						noOfCols=-noOfCols;	// Delete 
+					iGridLay->InsertDeleteColumns(startCol,noOfCols);
+					iGridWin->DrawNow();
+					}
+					break;
+				case CTRL('c'):
+					{
+					iUndoColors = ~iUndoColors;
+					ChangeColors(iUndoColors);
+					iGridWin->DrawNow();
+					}
+					break;
+                default:
+				    break;
+			    }
+		    }
+        else if ((aKeyEvent.iModifiers&EAllStdModifiers)==EModifierShift)
+            {
+            switch (User::LowerCase(aKeyEvent.iCode))
+                {
+				case 't':
+					iGridWin->GridLay()->SetTitleLinesL(EFalse);
+					iGridWin->ExposeCellL(iGridWin->CursorPos());
+				    break;
+                case 'z':
+		            {
+		            TInt zoomFactor=iZoomFactor->ZoomFactor();
+		            zoomFactor=(zoomFactor>(TZoomFactor::EZoomOneToOne/4))
+			            ? zoomFactor/2 : TZoomFactor::EZoomOneToOne*4;
+		            SetZoomFactorL(zoomFactor);
+		            break;
+		            }
+				case 'r':
+					{
+					iDialog->MakeVisible(ETrue);
+					iDialog->SetFocus(ETrue, EDrawNow);	
+					break;
+					}
+                default:
+                    break;
+                } // switch
+            }
+        else if (iDialog->IsVisible())
+			{
+			switch(User::LowerCase(aKeyEvent.iCode))
+				{
+				case EKeyEscape:
+					iDialog->MakeVisible(EFalse);
+					break;
+				case 'c': //C or c
+					{
+					iGridImg->StartLabelResize(ETrue,iGridWin->CursorPos().iCol);
+					iGridWin->SetResizeMode(CGridWin::EResizeColumn);
+					break;
+					}
+				case 'r':  //R or r
+					{
+					iGridImg->StartLabelResize(EFalse,iGridWin->CursorPos().iRow);
+					iGridWin->SetResizeMode(CGridWin::EResizeRow);
+					break;
+					}
+				default:
+					break;
+					}
+			}
+        }
+	return EKeyWasConsumed;
+	}
+/**
+  Second Phase constructor for the TestGridAppUi class.\n
+  Gets the current zoom factor.\n
+  Sets the grid cell settings like font and zoom factor.\n 
+  Constructs a GridTable which is an interface providing row and column info.\n
+  Initializes a GridLay object passing the gridtable and null gridimage. \n
+  The GridLay object is used to Handle the layout of a grid,
+  and controls how columns, rows and selections appear.\n
+  Initializes a GridImage object with gridcell settings.\n
+  A Grid Image object is used to draw cell contents.\n
+  A Grid Window is formed containing using GridTable,GridLay and GridImage objects.\n
+  The GridWindow offers handlers to pointer and key events.\n
+  Sets the current cursor position and activates the Grid Window.\n
+*/
+void CTestGridAppUi::ConstructL()
+    {
+	//iCoeEnv->WsSession().SetAutoFlush(ETrue);
+	
+	iUndoColors = EFalse;
+    CTestCoeAppUi::ConstructL();
+	CGraphicsDevice* device=iCoeEnv->ScreenDevice();
+	iZoomFactor = new(ELeave) TZoomFactor(device);
+    User::Heap().Check();
+
+	iSheetCellImg = new(ELeave) CSheetCellImg();
+	TFontSpec fontSpec(_L("Swiss"),240);
+	iSheetLabelImg = new(ELeave) CSheetLabelImg(fontSpec,iZoomFactor);
+	iSheetLabelImg->ConstructL();
+    User::Heap().Check();
+
+	iGridLay = new(ELeave) CGridLay(iZoomFactor);
+	iGridTable = new(ELeave) MGridTable;
+	iGridLay->ConstructL(iGridTable,NULL,ENoRows,ENoCols);	// Test construction of gridLay with NULL gridImg
+	iGridLay->SetAutoPagination(ETrue);
+//	iGridLay->SetPageBreakLinesHidden(ETrue);
+	iGridLay->SetGridEdgeColor(KRgbGridLabels);
+//	iGridLay->SetRowPermanentlySelectedL(ETrue);
+	
+	TCellRef cursorPos;
+	TBool isNewCursorPos=LoadL(cursorPos);	// Get Persistent data
+
+	iGridImg = CGridImg::NewL(device,iSheetCellImg,iGridLay);	// Late construction of gridimg
+	iGridImg->SetGridLabelImg(iSheetLabelImg);
+	iGridLay->SetGridImgL(iGridImg);
+// Copies some colours for the label
+	//	Getting the grid colors
+	iSheetLabelImg->SetGridColors(iGridLay->GridColors());
+
+	iGridWin = CGridWin::NewL(NULL,iGridLay,iGridImg);	//
+	AddToStackL(iGridWin);
+	iGridWin->SetExtent(TPoint(EGridXPos,EGridYPos),TSize(EGridWidth,EGridHeight));
+	iGridWin->ActivateL();
+	iGridWin->DrawNow();
+	TBool isColumn = ETrue;
+	iDialog=new(ELeave) CTGridQueryDialog(isColumn);
+	iDialog->ConstructL();
+	iDialog->MakeVisible(EFalse);
+
+	//
+	//iGridWin->Draw(TRect(TPoint(EGridXPos,EGridYPos),TSize(EGridWidth,EGridHeight)));
+	if (isNewCursorPos)
+		iGridWin->SetCursorPosL(cursorPos);
+	iGridWin->ActivateL();
+    User::Heap().Check();
+		
+	AutoTestManager().StartAutoTest();
+
+	}
+/**
+  Auxiliary function for T-Grid0Step-RunTestStepL.\n
+  Creates a File Store and returns the pointer.\n
+ 
+  @return Pointer to Filestore used for storing Grid data.\n
+ 
+*/
+CFileStore* CTestGridAppUi::CreateStoreLC(RFile &aFile)
+	{
+    CFileStore *store=CDirectFileStore::NewLC(aFile);
+	TUid uid;
+	uid.iUid=TUint32('G'|('R'<<8)|('D'<<16));
+	store->SetTypeL(TUidType(KDirectFileStoreLayoutUid,uid));
+    return(store);
+	}
+/**
+  Auxiliary function for T-Grid0Step-RunTestStepL.\n
+  Loads the GridLay settings and cursor position from dat file TGRID0.DAT.\n
+ 
+  @return Boolean,True if the data stored in the Stream is displayed on the Grid.\n
+ 
+*/
+TBool CTestGridAppUi::LoadL(TCellRef& aCursorPos)
+	{
+	RFile file;
+    TInt err=(file.Open(iCoeEnv->FsSession(),_L("C:\\data\\TGRID0.DAT"),
+		EFileRead|EFileShareReadersOnly));
+	if (err==KErrNotFound || err==KErrPathNotFound)
+		return EFalse;	// Use default settings
+	User::LeaveIfError(err);
+
+    CFileStore *store=CDirectFileStore::FromLC(file);
+	TStreamId root=store->Root();
+    RStoreReadStream source;
+    source.OpenLC(*store,root);
+	source >> *iGridLay;
+	source >> aCursorPos;
+
+    CleanupStack::PopAndDestroy(2);	// stream+store
+	return ETrue;
+	}
+/**
+  Auxiliary function for T-Grid0Step-RunTestStepL.\n
+  Stores the current grid settings to a Dat File.\n
+  Saves the current cursor postion.\n
+*/
+void CTestGridAppUi::SaveL()
+	{
+	RFs fsSession=iCoeEnv->FsSession();
+	RFile file;
+	TInt err=fsSession.MkDir(_L("C:\\data\\"));
+	if (err!=KErrAlreadyExists)
+		User::LeaveIfError(err);
+    User::LeaveIfError(file.Replace(fsSession,_L("C:\\data\\TGRID0.DAT"),EFileRead|EFileWrite));
+
+	CFileStore *store=CreateStoreLC(file);
+	RStoreWriteStream source;
+	TStreamId root = source.CreateLC(*store);
+	source << *iGridLay;
+	source << iGridWin->CursorPos();
+	store->SetRootL(root);
+    CleanupStack::PopAndDestroy(2);
+	}
+/**
+  Auxiliary function for T-Grid0Step-RunTestStepL.\n
+  Sets the zoom factor depending on the argument.\n
+  To Redraw the grid table again, does the following \n
+  Recalculates the internal maps that map row and column numbers to heights and widths respectively.\n
+  Resets the reference points.\n
+  The reference points are the mainpoint and the titlepoint.\n
+  Resets the row and column numbers visible at the bottom, and to the right, of the visible area of the grid.\n
+*/
+void CTestGridAppUi::SetZoomFactorL(TInt aZoomFactor)
+	{
+	iZoomFactor->SetZoomFactor(aZoomFactor);
+	iSheetLabelImg->NotifyGraphicsDeviceMapChangeL();
+	iGridWin->GridLay()->RecalcPixelSparseMaps();
+	iGridWin->GridImg()->ResetReferencePoints();
+	iGridWin->GridLay()->ResetVisibleToCell();
+	iGridWin->DrawNow();
+	}
+/**
+  Auxiliary function for T-Grid0Step-RunTestStepL.\n
+  Sets the Grid colours depending on the argument.\n
+  If Reset is enabled, the default colours will be enabled.\n
+  Foreground to RGB value(0,0,0) , Background to RGB value(255,255,255) and Lines to (170,170,170).\n
+  If Reset is not enabled, Sets the following combination
+  Forground to Blue, Background to Yellow, Colour of lines to Yellow and Label separators
+  to Green.\n 
+*/		
+void CTestGridAppUi::ChangeColors(TBool aReset)
+	{
+	if (aReset)
+		{
+		TGridColors gridColors;
+		iGridLay->SetGridColors(gridColors);
+		}
+	else
+		{
+		TGridColors newGridColors(KRgbBlue, KRgbYellow, KRgbRed, KRgbGreen);
+		iGridLay->SetGridColors(newGridColors);
+		}
+	iUndoColors = aReset;
+
+	}
+/**
+   @SYMTestCaseID UIF-Grid0Step-RunTestStepL
+  
+   @SYMPREQ 
+  
+   @SYMTestCaseDesc
+    Tests different functionalities of Grid Window
+  
+   @SYMTestPriority High
+  
+   @SYMTestStatus Implemented
+  
+   @SYMTestActions \n
+   The following tests are performed \n
+   1. Setting a grid as default.\n
+   2. Simulating right arrow key event.\n
+   3. Simulating down arrow key event.\n
+   4. Setting zoom in factor. \n
+   5. Setting zoom out factor.\n
+   6. Set/Undo Background Color. \n
+   7. Making a dialog visible. \n
+   8. Resize current row and column. \n
+   9. Insertion and Deletion of Columns.\n
+  
+   @SYMTestExpectedResults All the test cases should execute successfully and the generated key events
+   are handled without any error.\n
+  
+ */
+void CTestGridAppUi::RunTestStepL(TInt aNumStep)
+	{
+	TKeyEvent theKeyEvent;
+	TEventCode theType=EEventKey;
+	
+	Mem::FillZ(&theKeyEvent, sizeof(TKeyEvent));
+	//only for debug
+
+	User::After(TTimeIntervalMicroSeconds32(1000000));
+
+
+	switch(aNumStep)
+		{
+		case 1: //Set grid to default state
+		SetTestStepID(_L("UIF-Grid0Step-RunTestStepL"));
+		theKeyEvent.iCode = CTRL('r');
+		theKeyEvent.iModifiers=EModifierCtrl;
+		INFO_PRINTF1(_L("Set grid to default"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 2: case 3: case 4: //Move cursor to left
+		theKeyEvent.iCode = EKeyRightArrow;
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Move cursor to left"));
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 5: case 6: 
+		theKeyEvent.iCode = EKeyDownArrow;
+		theKeyEvent.iModifiers=0;//EModifierCtrl;
+		INFO_PRINTF1(_L("Move cursor to down"));
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 7: case 8: 
+		theKeyEvent.iCode = CTRL('z'); //Set zoom in factor
+		theKeyEvent.iModifiers=EModifierCtrl;
+		INFO_PRINTF1(_L("Set zoom in factor"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 9: case 10: 
+		theKeyEvent.iCode = 'z'; //Set zoom out factor
+		theKeyEvent.iModifiers=EModifierShift;
+		INFO_PRINTF1(_L("Set zoom out factor"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 11: case 12: case 13:
+		theKeyEvent.iCode = CTRL('c'); //Set/undo color background
+		theKeyEvent.iModifiers=EModifierCtrl;
+		INFO_PRINTF1(_L("Set/undo color background"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		
+		case 14:
+		theKeyEvent.iCode = 'r'; //Make dialog visible 
+		theKeyEvent.iModifiers=EModifierShift;
+		INFO_PRINTF1(_L("Make dialog visible "));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 15:
+		theKeyEvent.iCode = 'r';//Resize the current row
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Resize the current row"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 16:case 17:case 18: //Resize the current row
+		INFO_PRINTF1(_L("Resize the current row"));
+		theKeyEvent.iCode = EKeyDownArrow;
+		theKeyEvent.iModifiers=0;
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 19: //Finish resize
+		theKeyEvent.iCode = EKeyEnter; 
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Finish resize"));
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 20:// Resize the current column
+		theKeyEvent.iCode = 'c';
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Resize the current column"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 21:case 22:case 23: // Resize the current column
+		INFO_PRINTF1(_L("Resize the current column"));
+		theKeyEvent.iCode = EKeyRightArrow;
+		theKeyEvent.iModifiers=0;
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 24: //Finish resize
+		theKeyEvent.iCode = EKeyEnter;
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Finish resize"));
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		break;
+		case 25: //Close dialog
+		theKeyEvent.iCode = EKeyEscape;
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Close dialog"));
+		iDialog->OfferKeyEventL(theKeyEvent,theType);
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 26: //Insert column
+		theKeyEvent.iCode = CTRL('i');
+		theKeyEvent.iModifiers=EModifierCtrl;
+		INFO_PRINTF1(_L("Insert column"));
+		HandleKeyEventL(theKeyEvent,theType);
+		break;
+		case 27: //Move to right and delete column
+		theKeyEvent.iCode = EKeyRightArrow;
+		theKeyEvent.iModifiers=0;
+		INFO_PRINTF1(_L("Move to right and delete column"));
+		iGridWin->OfferKeyEventL(theKeyEvent,theType);
+		theKeyEvent.iCode = CTRL('d');
+		theKeyEvent.iModifiers=EModifierCtrl;
+
+		HandleKeyEventL(theKeyEvent,theType);
+		RecordTestResultL();
+		CloseTMSGraphicsStep();
+		break;
+		case 28: //exit
+		AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+		break;		
+
+		}
+	}
+	
+
+/**
+  Constructs the CTGrid0 Test application.\n
+  Initializes the AppUi object.\n
+  Sets the AppUi object as the default AppUi for the application.\n
+ 
+*/
+void CTGrid0Step::ConstructAppL(CCoeEnv* aCoe)
+	{ // runs inside a TRAP harness
+	aCoe->ConstructL();
+	CTestGridAppUi* appUi= new (ELeave) CTestGridAppUi(this);
+	aCoe->SetAppUi(appUi);
+	appUi->ConstructL();
+	}
+
+
+CTGrid0Step::~CTGrid0Step()
+/**
+  Destructor
+ */
+	{
+	}
+
+CTGrid0Step::CTGrid0Step()
+/**
+  Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTGrid0Step);
+	}
+/**
+  Entry Function for the TGrid0 Test Step.\n
+  Initializes a control environment for the application.\n
+  Starts the application.\n
+*/
+TVerdict CTGrid0Step::doTestStepL()
+	{
+
+	INFO_PRINTF1(_L("Test Started"));
+	PreallocateHALBuffer();
+
+	__UHEAP_MARK;
+
+	CCoeEnv* coe=new(ELeave) CCoeEnv;
+	TRAPD(err,ConstructAppL(coe));
+
+	if (!err)
+		coe->ExecuteD();
+	else
+		{
+		SetTestStepResult(EFail);
+		delete coe;
+		}
+
+	__UHEAP_MARKEND;
+
+	INFO_PRINTF1(_L("test finished"));
+	return TestStepResult();
+	}
+