📄 magictrainappview.cpp
字号:
/*
============================================================================
Name : TrainAppView.cpp
Author : Johnson Liu
Copyright : JL&NB
Description : Application view implementation
============================================================================
*/
// INCLUDE FILES
#include <coemain.h>
#include <Train.rsg>
#include <pathinfo.h>
#include <utf.h>
#include <gdi.h>
#include <stringloader.h>
#include <s32file.h>
#include "MagicTrain.pan"
#include "MagicTrainAppView.h"
#include "MagicTrainAppUi.h"
#include "Engine.h"
#include "Station.h"
enum {
EMbmBg1_176 = 0,
EMbmBg1_240,
EMbmBg1_352,
EMbmBg2_176,
EMbmBg2_240,
EMbmBg2_352,
};
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
// CMagicTrainAppView::NewL()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CMagicTrainAppView* CMagicTrainAppView::NewL( const TRect& aRect ,CMagicTrainAppUi* aAppUi)
{
CMagicTrainAppView* self = CMagicTrainAppView::NewLC( aRect,aAppUi );
CleanupStack::Pop( self );
return self;
}
// -----------------------------------------------------------------------------
// CMagicTrainAppView::NewLC()
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CMagicTrainAppView* CMagicTrainAppView::NewLC( const TRect& aRect ,CMagicTrainAppUi* aAppUi)
{
CMagicTrainAppView* self = new ( ELeave ) CMagicTrainAppView(aAppUi);
self->iAppUi = aAppUi;
CleanupStack::PushL( self );
self->ConstructL( aRect );
return self;
}
// -----------------------------------------------------------------------------
// CMagicTrainAppView::ConstructL()
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CMagicTrainAppView::ConstructL( const TRect& aRect )
{
// Create a window for this application view
CreateWindowL();
// Set the windows size
SetRect( aRect );
_LIT(KDrawBitmapPath,"system\\apps\\Train\\Train.mbm");
#ifdef _DEBUG
iPath.Append(_L("Z:\\"));
#else
iPath.Append(_L("C:\\"));
#endif
iPath.Append(KDrawBitmapPath);
RFile file;
RFs fs;
User::LeaveIfError(fs.Connect());
TInt err = file.Open(fs,iPath,EFileRead|EFileShareReadersOnly);
if ( err != KErrNone) {
iPath.SetLength(0);
iPath.Append(PathInfo::MemoryCardRootPath());
iPath.Append(KDrawBitmapPath);
file.Close();
if ( file.Open(fs,iPath,EFileRead|EFileShareReadersOnly) != KErrNone) {
Panic(EMbmNotFound);
}
}
file.Close();
fs.Close();
// _LIT(KDrawBitmapPath,"Z:\\resource\\apps\\DoDoBaby.mbm");
//DefaultAudioListUrl = PathInfo::PhoneMemoryRootPath(); //Default root path
//iDefaultAudioListUrl.Append( PathInfo::InstallsPath()); // path of images folder
iWidth = 0;
if (aRect == TRect(0,0,352,376)) {
iWidth = 352;
iBg1 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg1->Load(iPath,EMbmBg1_352));
iBg2 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg2->Load(iPath,EMbmBg2_352));
}else if(aRect == TRect(0,0,176,188)) {
iWidth = 176;
iBg1 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg1->Load(iPath,EMbmBg1_176));
iBg2 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg2->Load(iPath,EMbmBg2_176));
}else if(aRect.Width() == 240 ) {
iWidth = 240;
iBg1 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg1->Load(iPath,EMbmBg1_240));
iBg2 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg2->Load(iPath,EMbmBg2_240));
}else if(aRect.Width() == 320 ) {
iWidth = 320;
iBg1 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg1->Load(iPath,EMbmBg1_176));
iBg2 = new (ELeave) CFbsBitmap();
User::LeaveIfError(iBg2->Load(iPath,EMbmBg2_176));
}
iStatus = EInitStatus;
// Activate the window, which makes it ready to be drawn
ActivateL();
}
// -----------------------------------------------------------------------------
// CMagicTrainAppView::CMagicTrainAppView()
// C++ default constructor can NOT contain any code, that might leave.
// -----------------------------------------------------------------------------
//
CMagicTrainAppView::CMagicTrainAppView(CMagicTrainAppUi* aAppUi)
{
iAppUi = aAppUi;
iTSSResultDirection = ETrue;
iStation = NULL;
iStation1 = NULL;
iStation2 = NULL;
iTrain = NULL;
// No implementation required
}
// -----------------------------------------------------------------------------
// CMagicTrainAppView::~CMagicTrainAppView()
// Destructor.
// -----------------------------------------------------------------------------
//
CMagicTrainAppView::~CMagicTrainAppView()
{
// No implementation required
//if (iStationWay != NULL) delete iStationWay;
if (iBg1) delete iBg1;
if (iBg2) delete iBg2;
if (iStation1) delete iStation1;
if (iStation2) delete iStation2;
if (iStation) delete iStation;
if (iTrain) delete iTrain;
}
void CMagicTrainAppView::SetOSResult(const TDesC& aStation,RPointerArray<COSResult>* aOSResult)
{
if (iStation) delete iStation;
iStation = aStation.Alloc();
iOSResult = aOSResult;
iOneStationResultIndex = 0;
iOneStationResultStart = 0;
iStatus = EOneStationResultStatus;
this->DrawDeferred();
}
void CMagicTrainAppView::SetOTResult(const TDesC& aTrain,RPointerArray<COTResult>* aOTResult)
{
if (iTrain) delete iTrain;
iTrain = aTrain.Alloc();
iOTResult = aOTResult;
iTrainResultIndex = 0;
iTrainResultStart = 0;
iStatus = ETrainResultStatus;
this->DrawDeferred();
}
void CMagicTrainAppView::SetTSSResult(const TDesC& aStation1,const TDesC& aStation2,RPointerArray<CTSSResult>* aTSSResult)
{
if (iStation1) delete iStation1;
if (iStation2) delete iStation2;
iStation1 = aStation1.Alloc();
iStation2 = aStation2.Alloc();
// if (iStationWay != NULL) delete iStationWay;
iTSSResult = aTSSResult;
iStationResultIndex = 0;
iStationResultStart = 0;
iStatus = EStationResultStatus;
this->DrawDeferred();
}
void CMagicTrainAppView::TrainResultDown()
{
if (iTrainResultIndex == iOTResult->Count()-1)
return;
if (iTrainResultIndex - iTrainResultStart ==6) {
iTrainResultStart = iTrainResultStart + 1;
iTrainResultIndex = iTrainResultIndex + 1;
}else {
iTrainResultIndex = iTrainResultIndex + 1;
}
this->DrawDeferred();
}
void CMagicTrainAppView::TrainResultUp()
{
if (iTrainResultIndex == 0)
return;
if ( iTrainResultIndex == iTrainResultStart )
{
iTrainResultStart = iTrainResultStart - 1;
iTrainResultIndex = iTrainResultIndex - 1;
}else {
iTrainResultIndex = iTrainResultIndex - 1;
}
this->DrawDeferred();
}
void CMagicTrainAppView::StationResultDown()
{
TInt k = 0;
for (TInt i=0;i<iTSSResult->Count();i++) {
if (iTSSResult->operator [](i)->iDirection == iTSSResultDirection) {
k=k+1;
}
}
if (iStationResultIndex == k-1)
return;
if (iStationResultIndex - iStationResultStart == 6) {
iStationResultStart = iStationResultStart + 1;
iStationResultIndex = iStationResultIndex + 1;
}else {
iStationResultIndex = iStationResultIndex + 1;
}
this->DrawDeferred();
}
void CMagicTrainAppView::StationResultUp()
{
if ( iStationResultIndex == 0)
return;
if ( iStationResultIndex == iStationResultStart)
{
iStationResultStart = iStationResultStart - 1;
iStationResultIndex = iStationResultIndex - 1;
}else {
iStationResultIndex = iStationResultIndex - 1;
}
this->DrawDeferred();
}
void CMagicTrainAppView::OneStationResultDown()
{
TInt k = 0;
for (TInt i=0;i<iOSResult->Count();i++) {
k=k+1;
}
if (iOneStationResultIndex == k-1)
return;
if (iOneStationResultIndex - iOneStationResultStart == 6) {
iOneStationResultStart = iOneStationResultStart + 1;
iOneStationResultIndex = iOneStationResultIndex + 1;
}else {
iOneStationResultIndex = iOneStationResultIndex + 1;
}
this->DrawDeferred();
}
void CMagicTrainAppView::OneStationResultUp()
{
if ( iOneStationResultIndex == 0)
return;
if ( iOneStationResultIndex == iOneStationResultStart)
{
iOneStationResultStart = iOneStationResultStart - 1;
iOneStationResultIndex = iOneStationResultIndex - 1;
}else {
iOneStationResultIndex = iOneStationResultIndex - 1;
}
this->DrawDeferred();
}
// -----------------------------------------------------------------------------
// CMagicTrainAppView::Draw()
// Draws the display.
// -----------------------------------------------------------------------------
//
void CMagicTrainAppView::Draw( const TRect& /*aRect*/ ) const
{
// Get the standard graphics context
CWindowGc& gc = SystemGc();
// Gets the control's extent
TRect drawRect( Rect());
// Clears the screen
gc.Clear( drawRect );
if (iStatus == EInitStatus) {
gc.BitBlt(TPoint(0,0),iBg1);
}else if (iStatus == EOneStationResultStatus) {
// RFs fs;
// fs.Connect();
// RFileWriteStream ws;
// ws.Open(fs,_L("C:\\Nokia\\Installs\\2.log"),EFileWrite);
// ws.WriteL(_L("Begin"));
// ws.CommitL();
gc.BitBlt(TPoint(0,0),iBg2);
CFont* font;
// font = iCoeEnv->NormalFont();
MGraphicsDeviceMap* devicemap;
TZoomFactor zoomfactor;
zoomfactor.SetGraphicsDeviceMap(iCoeEnv->ScreenDevice());
zoomfactor.SetZoomFactor(TZoomFactor::EZoomOneToOne);
devicemap = &zoomfactor;
TFontSpec fontSpec;
TFontSpec fontSpec1;
// ws.WriteL(_L("1"));
// ws.CommitL();
switch (iWidth) {
case 176:
fontSpec = TFontSpec::TFontSpec(_L("CombinedChinesePlain12"),FontUtils::TwipsFromPoints(7));
devicemap->GetNearestFontInTwips(font,fontSpec);
break;
case 320:
fontSpec = TFontSpec::TFontSpec(_L("CombinedChinesePlain12"),FontUtils::TwipsFromPoints(5));
devicemap->GetNearestFontInTwips(font,fontSpec);
break;
case 240:
fontSpec = TFontSpec::TFontSpec(_L("CombinedChinesePlain12"),FontUtils::TwipsFromPoints(7));
devicemap->GetNearestFontInTwips(font,fontSpec);
break;
case 352:
fontSpec = TFontSpec::TFontSpec(_L("CombinedChinesePlain12"),FontUtils::TwipsFromPoints(7));
devicemap->GetNearestFontInTwips(font,fontSpec);
break;
}
//gc.UseFont(iCoeEnv->NormalFont());
gc.UseFont(font);
TBuf<50> des16;
//CnvUtfConverter::ConvertToUnicodeFromUtf8(des16,iTrainWay->iTrainName->Des());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -