📄 ggballappview.cpp
字号:
/* Copyright (c) 2008, Nokia. All rights reserved */
#include "GGBallAppView.h"
#include "GGBall.rsg"
//#include "GGBallEnv.h"
#include "GGBallAppUi.h"
CGGBallAppView* CGGBallAppView::NewL(const TRect& aRect,CGGBallAppUi* aAppui)
{
CGGBallAppView* self = NewLC(aRect,aAppui);
CleanupStack::Pop();
return self;
}
CGGBallAppView* CGGBallAppView::NewLC(const TRect& aRect,CGGBallAppUi* aAppui)
{
CGGBallAppView* self = new (ELeave) CGGBallAppView;
CleanupStack::PushL(self);
self->ConstructL(aRect,aAppui);
return self;
}
void CGGBallAppView::ConstructL(const TRect& aRect,CGGBallAppUi* aAppui)
{
CreateWindowL();
SetRect(aRect);
iAppUi=aAppui;
TSize sCreenSize=iAppUi->ScreenSize();
TRect titleRect(0,0,sCreenSize.iWidth,22);
iTitle=CTitle::NewL(titleRect);
iTitle->SetText(R_STR_CAPTION);
iTitle->SetFont(iAppUi->Font());
TRect cbaRect(0,sCreenSize.iHeight-22,sCreenSize.iWidth,sCreenSize.iHeight);
iCbaButton=CCbaButton::NewL(cbaRect);
iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
iCbaButton->SetFont(iAppUi->Font());
TRect menuRect(0,sCreenSize.iHeight-22,sCreenSize.iWidth/3,sCreenSize.iHeight-22);
iMenu=CMenu::NewL(menuRect);
iMenu->SetMenuItemHeight(iAppUi->MenuItemHeight());
iMenu->SetFont(iAppUi->Font());
iMenu->AddCmdL(R_STR_ADD,EFun_AddBall);
iMenu->AddCmdL(R_STR_DELETE,EFun_RemoveBall);
iMenu->AddCmdL(R_STR_EXIT,EFun_Exit);
iBallEngine=CBallEngine::NewL();
iBallEngine->SetRect(TRect(0,iAppUi->PaneHeigth(),
iAppUi->ScreenSize().iWidth,
iAppUi->ScreenSize().iHeight-iAppUi->PaneHeigth()));
iBallEngine->CreateBall();
iTimer=CPeriodic::NewL(CActive::EPriorityStandard);
iTimer->Start(10000,10000,TCallBack(CallBack,this));
ActivateL();
}
CGGBallAppView::CGGBallAppView()
{
}
CGGBallAppView::~CGGBallAppView()
{
delete iTitle;
delete iCbaButton;
delete iMenu;
delete iBallEngine;
iTimer->Cancel();
delete iTimer;
delete iConfirmDlg;
}
void CGGBallAppView::Draw(const TRect& /*aRect*/) const
{
// Clear the screen
CWindowGc& gc = SystemGc();
gc.Clear(Rect());
//画标题区
iTitle->Draw(gc);
//画按钮区
iCbaButton->Draw(gc);
iBallEngine->Draw(gc);
iMenu->Draw(gc);
if (iConfirmDlg)
{
iConfirmDlg->Draw(gc);
}
}
TKeyResponse CGGBallAppView::OfferKeyEventL( const TKeyEvent &aKeyEvent, TEventCode aType )
{
TKeyResponse response=EKeyWasNotConsumed;
TFunction fun=EFun_None;
if (aType==EEventKeyDown)
{
if ( 164 == aKeyEvent.iScanCode)
{
if (iMenu->Visible())
{
fun=iMenu->CurrentFunction();
}
else
{
fun=iCbaButton->LeftCmdFunction();
}
response=EKeyWasConsumed;
}
else if ( 165 == aKeyEvent.iScanCode )
{
fun=iCbaButton->RightCmdFunction();
response=EKeyWasConsumed;
}
else if (aKeyEvent.iScanCode==EStdKeyUpArrow)
{
if (iMenu->Visible())
{
fun=EFun_MenuUp;
response=EKeyWasConsumed;
}
}
else if (aKeyEvent.iScanCode==EStdKeyDownArrow)
{
if (iMenu->Visible())
{
fun=EFun_MenuDown;
response=EKeyWasConsumed;
}
}
else if (aKeyEvent.iScanCode==EStdKeyDevice3)
{
if (iMenu->Visible())
{
fun=iMenu->CurrentFunction();
response=EKeyWasConsumed;
}
}
}
if (response==EKeyWasConsumed)
{
ProcessKeyEvent(fun);
}
return response;
}
void CGGBallAppView::ShowMenu(TBool aShow)
{
if (aShow)
{
iMenu->Show();
iCbaButton->SetLeftCmd(R_STR_SELECT,EFun_Select);
iCbaButton->SetRightCmd(R_STR_CANCEL,EFun_Cancel);
}
else
{
iMenu->Hide();
iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
}
}
void CGGBallAppView::ProcessKeyEvent( TFunction aFun )
{
switch(aFun)
{
case EFun_AddBall:
iBallEngine->CreateBall();
ShowMenu(EFalse);
break;
case EFun_RemoveBall:
iBallEngine->RemoveBall();
ShowMenu(EFalse);
break;
case EFun_Exit:
case EFun_Back:
ShowMenu(EFalse);
DrawConfirmDlg();
break;
case EFun_Cancel:
ShowMenu(EFalse);
break;
case EFun_Option:
ShowMenu();
break;
case EFun_MenuUp:
iMenu->Pre();
break;
case EFun_MenuDown:
iMenu->Next();
break;
case EFun_Exit_Yes:
iAppUi->Quit();
break;
case EFun_Exit_No:
DrawConfirmDlg(EFalse);
break;
}
if (aFun!=EFun_None)
{
DrawNow();
}
}
TInt CGGBallAppView::CallBack( TAny* aAny )
{
CGGBallAppView* p=static_cast<CGGBallAppView*>(aAny);
p->DrawNow();
return KErrNone;
}
void CGGBallAppView::DrawConfirmDlg(TBool aShow)
{
if (aShow)
{
TSize s=iAppUi->ScreenSize();
iConfirmDlg=CBaseControl::NewL(TRect(0,s.iHeight-iAppUi->PaneHeigth()-50,
s.iWidth,s.iHeight-iAppUi->PaneHeigth()));
iConfirmDlg->SetFont(iAppUi->Font());
iConfirmDlg->SetText(R_STR_EXIT_CONFIRM);
iCbaButton->SetLeftCmd(R_STR_YES,EFun_Exit_Yes);
iCbaButton->SetRightCmd(R_STR_NO,EFun_Exit_No);
}
else
{
delete iConfirmDlg;
iConfirmDlg=NULL;
iCbaButton->SetLeftCmd(R_STR_OPTIONS,EFun_Option);
iCbaButton->SetRightCmd(R_STR_BACK,EFun_Exit);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -