// BOSSVIEW.CPP
//
// Copyright (c) 1998 Symbian Ltd.  All rights reserved.
//

#include "bosseng.h"
#include "bossview.h"

#include <coemain.h>

EXPORT_C CBossView::CBossView(const CCoeControl* aParent, const TRect& aRect, TBossPuzzle* aModel)
	: iModel(aModel), iParent(aParent), iOfferedRect(aRect)
	{
	}

EXPORT_C CBossView::CBossView()
	{ // private, so never gets invoked; required for DLL goodness reasons
	}

EXPORT_C void CBossView::ConstructL()
	{
	//constant declaration
	_LIT(KFontArial,"Arial");
	// create window
	CreateWindowL(iParent);
	// construct font for messages
    TFontSpec spec(KFontArial,10*20);
    iTileFont=iCoeEnv->CreateScreenFontL(spec);
	// set rectangle to prescription
	SetRectL(iOfferedRect);
	// go for it
	ActivateL();
	}

CBossView::~CBossView()
	{
	iCoeEnv->ReleaseScreenFont(iTileFont);
	}

const TInt KBossViewTileSize=21; // outside dimension of tile
const TInt KBossViewTileSpacing=2; // blank pixels between adjacent tiles
const TInt KBossViewBoardBorderWidth=3; // in addition to four tiles and five blanks
const TInt KBossViewTileBorderWidth=1; // takes away from tile space to give less for number

void CBossView::Draw(const TRect& /* aRect */) const
	{
	// constant declaration
	_LIT(KNumFormat,"%d");
	// clear board altogether
	CWindowGc& gc=SystemGc();
	gc.DrawRect(Rect());
	// calculate rectangle to draw into
	TInt boardSize=4*KBossViewTileSize+5*KBossViewBoardBorderWidth+1;
	TRect boardRect(Rect().iTl+TPoint(15,15), TSize(boardSize,boardSize));
	// draw board border
	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
	gc.SetPenColor(KRgbBlack);
	gc.DrawRect(boardRect);
	// draw each tile
	for (TInt row=0; row<4; row++)
		{
		for (TInt col=0; col<4; col++)
			{
			if (iModel->Tile(row,col)!=0)
				{
				// draw rectangle
				TInt dx=KBossViewTileSpacing+1+col*(KBossViewTileSpacing+1+KBossViewTileSize);
				TInt dy=KBossViewTileSpacing+1+row*(KBossViewTileSpacing+1+KBossViewTileSize);
				TRect tileRect(boardRect.iTl+TPoint(dx,dy), TSize(KBossViewTileSize+1, KBossViewTileSize+1));
				gc.DrawRect(tileRect);
				// draw number
				tileRect.Shrink(1,1);
				TInt ascent=
						(tileRect.Height() - iTileFont->HeightInPixels())/2 +
							iTileFont->AscentInPixels();
				// draw text in rectangle
   				gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
				gc.UseFont(iTileFont);
				TBuf<2> number;
				number.Format(KNumFormat,TInt(iModel->Tile(row,col)));
				gc.DrawText(number, tileRect, ascent, CGraphicsContext::ECenter, 0);
				}
			}
		}
   	}
