⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 magictrainappview.cpp

📁 SYMBIAN S60 2ND列车时刻表软件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/*
============================================================================
 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 + -