--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/realtimenetprots/sipfw/SampleApp/gameUI_techview/Src/SIPExGameView.cpp Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,308 @@
+
+// Copyright (c) 2004-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:
+//
+
+
+
+// INCLUDES
+#include "SIPExGameView.h"
+#include "SIPExGameEngine.h"
+#include "SIPExGameConstants.h"
+
+#include <e32svr.h>
+
+// CONSTANTS
+const TInt KLeft( 25 );
+const TInt KRight( 213 );
+const TInt KTop( 75 );
+
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::NewL
+// Static constructor
+// -----------------------------------------------------------------------------
+//
+CSIPExGameView* CSIPExGameView::NewL(
+ const TRect& aRect,
+ const CCoeControl* aParent,
+ CSIPExEngine& aEngine )
+ {
+ CSIPExGameView* self = CSIPExGameView::NewLC( aRect, aParent, aEngine );
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::NewLC
+// Static constructor. On return the instance is left to the CleanupStack.
+// -----------------------------------------------------------------------------
+//
+CSIPExGameView* CSIPExGameView::NewLC(
+ const TRect& aRect,
+ const CCoeControl* aParent,
+ CSIPExEngine& aEngine )
+ {
+ CSIPExGameView* self = new ( ELeave ) CSIPExGameView( aEngine );
+ CleanupStack::PushL( self );
+ self->ConstructL( aRect, aParent);
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::~CSIPExGameView
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CSIPExGameView::~CSIPExGameView()
+ {
+ // no implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::ConstructL
+// Symbian 2nd phase constructor that might leave.
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::ConstructL( const TRect& aRect, const CCoeControl* aParent )
+ {
+ iLabelSize = 20;
+ iXOffset = 5;
+ iYOffset = 5;
+ iBoxW = 18;
+ iMidW = 4;
+
+ iRect = aRect;
+ SetContainerWindowL( *aParent );
+ SetRect( iRect );
+
+ ActivateL();
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::CSIPExGameView
+// C++ default constructor
+// -----------------------------------------------------------------------------
+//
+CSIPExGameView::CSIPExGameView( CSIPExEngine& aEngine )
+: iEngine( &aEngine )
+ {
+ // no implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::Draw
+// From CCoeControl.
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::Draw( const TRect& /*aRect*/ ) const
+ {
+ CWindowGc& gc = SystemGc();
+ DrawGame( gc, iRect );
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::DrawGame
+// Draws the game view. Decides whether we should draw the board or cursor
+// or not
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::DrawGame( CWindowGc& aGc, const TRect& aRect ) const
+ {
+ if( iEngine->DrawBoard() )
+ {
+ DrawBoard(aGc, aRect);
+
+ if( iEngine->DrawCursor() )
+ {
+ DrawCursor(aGc, aRect);
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::DrawBoard
+// Draws the game board.
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::DrawBoard( CWindowGc& aGc, const TRect& aRect ) const
+ {
+ CWindowGc& gc =aGc;
+
+ gc.SetPenSize( TSize(1,1) );
+ gc.SetPenStyle( CGraphicsContext::ESolidPen );
+ gc.SetPenColor( TRgb(0,0,0) );
+ gc.SetBrushColor( TRgb(0,0,255) );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+
+ TPoint p1 = aRect.iTl;
+ p1.iX = p1.iX + iXOffset;
+ p1.iY = p1.iY + iLabelSize + iYOffset;
+
+ TPoint p2 = aRect.iBr;
+ p2.iX = p1.iX + ( ( KBoxCountX * iBoxW ) + ( ( KBoxCountX + 1 ) * iMidW ) );
+ p2.iY = p1.iY + ( ( KBoxCountY * iBoxW ) + ( ( KBoxCountY + 1 ) * iMidW ) );
+ TRect box2 = TRect(p1, p2);
+ gc.DrawRect( box2 );
+
+
+ gc.SetPenColor( TRgb(0,0,0) );
+ gc.SetBrushColor( TRgb(255,255,255) );
+ gc.SetPenStyle( CGraphicsContext::ESolidPen );
+ gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+ for (int i=0 ; i < KBoxCountX; i++)
+ {
+ for (int j=0 ; j < KBoxCountY; j++)
+ {
+ p1 = aRect.iTl;
+ p2 = aRect.iBr;
+
+ p1.iX = p1.iX + iXOffset + iMidW + (i*iMidW) + (i*iBoxW);
+ p1.iY = p1.iY + iLabelSize + iYOffset + iMidW + (j*iMidW) + (j*iBoxW);
+
+ p2.iX = p1.iX + iBoxW;
+ p2.iY = p1.iY + iBoxW;
+
+ if ( iEngine->BoardValue( i, j ) == -1 )
+ {
+ gc.SetBrushColor( TRgb(255,255,255) );
+ }
+ else if ( iEngine->BoardValue( i, j ) == 1 )
+ {
+ gc.SetBrushColor( TRgb(255,0,0) );
+ }
+ else if ( iEngine->BoardValue( i, j ) == 2 )
+ {
+ gc.SetBrushColor( TRgb(0,255,0) );
+ }
+ else { /* Nothing to do */ }
+
+ TRect rect( p1, p2 );
+ gc.DrawEllipse( rect );
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::DrawCursor
+// Draws the cursor.
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::DrawCursor( CWindowGc& aGc, const TRect& aRect ) const
+ {
+ CWindowGc& gc =aGc;
+
+ gc.SetPenColor(TRgb(0,0,0));
+ gc.SetBrushColor(TRgb(255,0,0));
+ gc.SetPenStyle(CGraphicsContext::ESolidPen);
+ gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+
+
+ TInt i = iEngine->Cursor();
+
+ TPoint p1 = aRect.iTl;
+ TPoint p2 = aRect.iBr;
+
+ p1.iX = p1.iX + iXOffset + iMidW + (i*iMidW) + (i*iBoxW);
+ p1.iY = p1.iY + iLabelSize + iYOffset - iBoxW;
+
+ p2.iX = p1.iX + iBoxW;
+ p2.iY = p1.iY + iBoxW;
+
+ TRect rect( p1, p2 );
+ gc.DrawEllipse( rect );
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::OfferKeyEventL
+// From CCoeControl.
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CSIPExGameView::OfferKeyEventL(
+ const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ if( aType == EEventKeyUp )
+ {
+ switch( aKeyEvent.iScanCode )
+ {
+ case EStdKeyLeftArrow:
+ iEngine->CursorLeft();
+ DrawDeferred();
+ return EKeyWasConsumed;
+ case EStdKeyRightArrow:
+ iEngine->CursorRight();
+ DrawDeferred();
+ return EKeyWasConsumed;
+ case EStdKeyDownArrow:
+ case EStdKeyEnter:
+ case EStdKeyDevice7: // FLOWTHROUGH
+ iEngine->CursorPressed();
+ DrawDeferred();
+ return EKeyWasConsumed;
+ default:
+ return EKeyWasNotConsumed;
+ }
+ }
+
+ return EKeyWasNotConsumed;
+ }
+
+// -----------------------------------------------------------------------------
+// CSIPExGameView::HandlePointerEventL
+// From CCoeControl. Calculates the column of the game board where the pointer
+// event occured and moves the cursor according that information.
+// -----------------------------------------------------------------------------
+//
+void CSIPExGameView::HandlePointerEventL( const TPointerEvent& aPointerEvent )
+ {
+ // Double-click
+ if( aPointerEvent.iModifiers & EModifierDoubleClick )
+ {
+ iEngine->CursorPressed();
+ DrawDeferred();
+ return;
+ }
+
+ // Cursor position
+ switch( aPointerEvent.iType )
+ {
+ case TPointerEvent::EButton1Up:
+ {
+ TInt block( iMidW + iBoxW );
+ TPoint point = aPointerEvent.iPosition;
+ TInt x( point.iX );
+ if( x >= KLeft && x <= KRight && point.iY > KTop )
+ {
+ for( TInt i=0; i < KBoxCountX; i++ )
+ {
+ if( x < ( KLeft + block * ( i + 1 ) ) )
+ {
+ iEngine->MoveCursorL( i );
+ DrawDeferred();
+ return;
+ }
+ }
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+
+// End of file