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

📄 griddemocontainer.cpp

📁 手机编程
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/**
* 
* @brief Definition of CGridDemoContainer
*
* Copyright (c) EMCC Software Ltd 2003
* @version 1.0
*/

// INCLUDE FILES

// Class include
#include "GridDemoContainer.h"

// System includes
#include <akniconarray.h>
#include <aknlists.h>
#include <barsread.h>
#include <eikclbd.h>
#include <eikmenub.h>
#include <GridDemo.rsg>
#include <stringloader.h>
#include <uikon.hrh>
#include <bautils.h>
#include "GridDemo.hrh"
#include "GridDemoAppUi.h"

CGridDemoContainer* CGridDemoContainer::NewL(const TRect& aRect)
{
	CGridDemoContainer* self = CGridDemoContainer::NewLC(aRect);
	CleanupStack::Pop(self);
	return self;
}

CGridDemoContainer* CGridDemoContainer::NewLC(const TRect& aRect)
{
	CGridDemoContainer* self = new (ELeave) CGridDemoContainer;
	CleanupStack::PushL(self);
	self->ConstructL(aRect);
	return self;
}

void CGridDemoContainer::ConstructL(const TRect& aRect)
{
	CreateWindowL();

	iCanUpdate = EFalse;
	iTextArray = new (ELeave) CDesCArrayFlat(10);

	CreateListL();	
	iListBox->SetListBoxObserver(this);
	SetupScrollBarsL();

	iSheetContainer = new (ELeave) CSheetContainer(*this);
	CleanupStack::PushL(iSheetContainer);
	iSheetContainer->ConstructL(aRect, this);
	iSheetContainer->MakeVisible(EFalse);
	CleanupStack::Pop(iSheetContainer);

	iStatusContainer = new (ELeave) CStatusContainer();
	CleanupStack::PushL(iStatusContainer);
	iStatusContainer->ConstructL(aRect, this);
	iStatusContainer->MakeVisible(EFalse);
	CleanupStack::Pop(iStatusContainer);

	iNumberEditor = new (ELeave) CEditContainer;
	CleanupStack::PushL(iNumberEditor);
	iNumberEditor->ConstructL(aRect, this);
	iNumberEditor->MakeVisible(EFalse);
	CleanupStack::Pop(iNumberEditor);
	

	SetRect(aRect);
	ActivateL();

	iCanUpdate = ETrue;
	iEditFlow = NULL;
}

void CGridDemoContainer::CreateListL()
{
	iListBox = new (ELeave) CAknSingleStyleListBox;
	iListBox->SetContainerWindowL(*this);
	
	iListBox->ConstructL( this, 0 );

	iFunctionShowType = EFunctionTypeMain;
	InitFunctionList();

	iListBox->Model()->SetItemTextArray( iTextArray );
	iListBox->Model()->SetOwnershipType( ELbmDoesNotOwnItemArray );
}

// 绘制主界面功能菜单
void CGridDemoContainer::InitFunctionList()
{
	iMyAppUi->SetNavigationLabelL(R_MAIN_TITLE);

	iTextArray->Reset();
	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_FUNCTION1);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION2);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION3);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION4);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION5);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION6);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION7);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_FUNCTION8);
	iTextArray->AppendL(buf);
}
//订单录入,查询,统计菜单,按订单采集功能调用些函数.
void CGridDemoContainer::InitOrderFormList()
{
	iMyAppUi->SetNavigationLabelL(R_FUNCTION1);
	iTextArray->Reset();
	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_ORDER1);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_ORDER2);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_ORDER3);
	iTextArray->AppendL(buf);
}
//月台帐,年台帐,按台帐查询调用此功能.
void CGridDemoContainer::InitAccountList()
{
	iMyAppUi->SetNavigationLabelL(R_FUNCTION2);
	iTextArray->Reset();
	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_TZ_MONTH);
	iTextArray->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_TZ_YEAR);
	iTextArray->AppendL(buf);
}
//月帐查看
void CGridDemoContainer::InitMonthAccountList()
{
	iMyAppUi->SetNavigationLabelL(R_TZ_MONTH);
	iTextArray->Reset();
	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_ORDER1);
	iTextArray->AppendL(buf);
}
//年帐查看
void CGridDemoContainer::InitYearAccountList()
{
	iMyAppUi->SetNavigationLabelL(R_TZ_YEAR);
	iTextArray->Reset();
	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_ORDER1);
	iTextArray->AppendL(buf);
}
//设置主界面滚动
void CGridDemoContainer::SetupScrollBarsL()
{
	iListBox->CreateScrollBarFrameL(ETrue);
	iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
		CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto);
}

void CGridDemoContainer::SetupListIconsL()
{
}
//创建一个查询窗口
CAknSearchField* CGridDemoContainer::CreateFindBoxL(CEikListBox* aListBox, CTextListBoxModel* aModel, CAknSearchField::TSearchFieldStyle aStyle )
{
	CAknSearchField* findbox = NULL;

	if ( aListBox && aModel )
	{
        CAknFilteredTextListBoxModel* model =
                STATIC_CAST( CAknFilteredTextListBoxModel*, aModel );
        findbox = CAknSearchField::NewL( *this,
                                         aStyle,
                                         NULL,
                                         20 );
        CleanupStack::PushL(findbox);
        model->CreateFilterL( aListBox, findbox );
        CleanupStack::Pop(findbox);
	}

	return findbox;
}

CGridDemoContainer::~CGridDemoContainer()
{
	delete iListBox;
	delete iSheetContainer;
	delete iStatusContainer;
	delete iNumberEditor;

	iSmokeYearIndex.ResetAndDestroy();
	iSmokeMonthIndex.ResetAndDestroy();
	iSmokeRealInfoIndex.ResetAndDestroy();
	iSmokeFlowNoIndex.ResetAndDestroy();
	iSmokeFlowCodeIndex.ResetAndDestroy();
	iSmokeFlowSum.ResetAndDestroy();
	iSmokeFlow.ResetAndDestroy();

	iTextArray->Reset();
	delete iTextArray;
	iIndexArray.Reset();

	if(iEditFlow)
		delete iEditFlow;
	iEditFlow = NULL;

	if(iFileIsOpen)
	{
		iFile.Close();
		iFileIsOpen = EFalse;
	}
}

void CGridDemoContainer::SizeChanged()
{
	TRect  rect = Rect();

	iListBox->SetRect(rect);

	if(iIsShowStatus || iIsShowNumberEditor)
	{
		TInt x = rect.Height() / (ITEM_DEFAULT_HEIGHT-1);
		x = (x-1) * (ITEM_DEFAULT_HEIGHT - 1) + 2 ;
		rect.iBr.iY = x;
		iSheetContainer->SetRect(rect);
		rect = Rect();
		rect.iTl.iY = x;
		iStatusContainer->SetRect(rect);
		iNumberEditor->SetRect(rect);
	}
	else
	{
		iSheetContainer->SetRect(rect);
		iStatusContainer->SetRect(TRect(0,0,0,0));
		iNumberEditor->SetRect(TRect(0,0,0,0));
	}

	DrawDeferred();
}

void CGridDemoContainer::ShowStatus(TBool aVisible)
{
	iIsShowStatus = aVisible;
	if(iIsShowStatus)
		iStatusContainer->MakeVisible(ETrue);
	else
		iStatusContainer->MakeVisible(EFalse);

	SizeChanged();
}

TInt CGridDemoContainer::CountComponentControls() const
{
	return 4; // return number of controls inside this container
}

CCoeControl* CGridDemoContainer::ComponentControl(TInt aIndex) const
{
	switch (aIndex)
		{
		case 0:
			return iListBox;
		case 1:
			return iSheetContainer;
		case 2:
			return iStatusContainer;
		case 3:
			return iNumberEditor;
		default:
			return NULL;
		}
}
//主容器按键触发事件
TKeyResponse CGridDemoContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType)
{
	if(iNumberEditor->IsVisible())
	{
		if(aType == EEventKey && aKeyEvent.iCode == EKeyOK)
		{
			HandleEditOk();
			
			return EKeyWasConsumed;
		}
		else
		{
			return iNumberEditor->OfferKeyEventL(aKeyEvent, aType);
		}
	}
	else if(iSheetContainer->IsVisible())
	{
		if(iAllowEdit && aType == EEventKey)
		{
			if(aKeyEvent.iCode == EKeyUpArrow || aKeyEvent.iCode == EKeyDownArrow)
			{
				iSheetContainer->OfferKeyEventL(aKeyEvent, aType);
				//UpdateSumText();
				return EKeyWasConsumed;
			}
		}
		return iSheetContainer->OfferKeyEventL(aKeyEvent, aType);
	}
	else
	{
		return iListBox->OfferKeyEventL (aKeyEvent, aType);
	}
}
//选择不同的烟调用此函数更新最上方的数值
void CGridDemoContainer::UpdateSumText()
{
	TPoint pos = iSheetContainer->GetCurrentPos();
	TPtrC ptr = iSheetContainer->GetText(TPoint(3, pos.iY));
	TSmokeFlowSum* flowSum = FindFlowSum(ptr);
	TBuf <128> nText;
	if(flowSum)
	{
		nText.Num(flowSum->iCount2);
		nText.Append(_L(","));
		nText.AppendNum(flowSum->iCount3);
		nText.Append(_L(","));
		nText.AppendNum(flowSum->iCount8);
		nText.Append(_L(","));
		nText.AppendNum(flowSum->iCount11);
	}
	else
	{
		nText.Copy(_L(""));
	}

	iMyAppUi->SetNavigationLabelL(nText);
}


void CGridDemoContainer::UpdateSumText2()
{
	
	TBuf <128> nText;
	
	nText.Num(iSmokeFlowSum2.iCount1);
	nText.Append(_L(","));
	nText.AppendNum(iSmokeFlowSum2.iCount3);
	nText.Append(_L(","));
	nText.AppendNum(iSmokeFlowSum2.iCount2);
	nText.Append(_L(","));
	nText.AppendNum(iSmokeFlowSum2.iCount8);
	iMyAppUi->SetNavigationLabelL(nText);
}

//主界面功能菜单的选择后调用此方法
void CGridDemoContainer::HandleFunctionCall()
{
		iFunctionIndex  = iListBox->CurrentItemIndex();
		iAllowEdit = EFalse;
		switch(iFunctionIndex)
		{
			case 0:
				HandleFunctionOrderCall();
				break;
			case 1:
				HandleFunctionAccountCall();
				break;
			case 2:
				HandleFunctionTypeCall();
				break;
			case 3:
				iStartNumber = 0;

				if(	ShowUserSheet() )
				{
					iMyAppUi->SetNavigationLabelL(R_FUNCTION4);
					iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
				}
				break;
			case 4:
				{
					if(InputCodeAndFind())
					{
						iStartNumber = 0;

						if(	ShowSmokeRealInfoSheet() )
						{
							iMyAppUi->SetNavigationLabelL(R_FUNCTION5);
							iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
						}
					}
				}
				break;
			case 5:
				iMyAppUi->LoadSmokeInfo();
				HandleFunctionInfoCall();
				break;
			case 6:
				iStartNumber = 0;
				if ( ShowSmokePlanSheet() )
				{
					iMyAppUi->SetNavigationLabelL(R_FUNCTION6);
					iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
				}
				break;
			case 7:
				iStartNumber = 0;
				if(	ShowSmokeCampaignSheet() )
				{
					iMyAppUi->SetNavigationLabelL(R_FUNCTION7);
					iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
				}
				break;
			default:
				break;
		}
}
//烟查看功能调用此函数
void CGridDemoContainer::HandleFunctionTypeCall()
{
	CDesCArray* array = new (ELeave) CDesCArrayFlat(3);

	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_ALL);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_1);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_2);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_3);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_4);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_5);
	array->AppendL(buf);

	MDesCArray* list = STATIC_CAST(MDesCArray*,array);

	iEikonEnv->ReadResource(buf, R_SMOKE_TYPE_TITLE);
	TInt idx = iMyAppUi->ShowListQueryL(buf, list);
	if(idx != KErrNotFound)
	{
		iIndexArray.Reset();
		if(idx == 0)
		{
			for(TInt i=0; i<iMyAppUi->iSmokeTypes.Count(); i++)
				iIndexArray.Append(i);
		}
		else
		{
			buf.Zero();
			buf.AppendNum(idx);
			for(TInt i=0; i<iMyAppUi->iSmokeTypes.Count(); i++)
			{
				if(iMyAppUi->iSmokeTypes[i]->iType.Compare(buf) == 0)
					iIndexArray.Append(i);
			}
		}
		iStartNumber = 0;
		ShowTypeSheet();
		iMyAppUi->SetNavigationLabelL(R_FUNCTION3);
		iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
	}

	array->Reset();
	delete array;
}
//可供货信息查看功能
void CGridDemoContainer::HandleFunctionInfoCall()
{
	CDesCArray* array = new (ELeave) CDesCArrayFlat(3);

	TBuf<32> buf;
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_ALL);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_1);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_2);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_3);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_4);
	array->AppendL(buf);
	iEikonEnv->ReadResourceL(buf, R_SMOKE_TYPE_5);
	array->AppendL(buf);

	MDesCArray* list = STATIC_CAST(MDesCArray*,array);

	iEikonEnv->ReadResource(buf, R_SMOKE_TYPE_TITLE);
	TInt idx = iMyAppUi->ShowListQueryL(buf, list);
	if(idx != KErrNotFound)
	{
		iIndexArray.Reset();
		if(idx == 0)
		{
			for(TInt i=0; i<iMyAppUi->iSmokeInfos.Count(); i++)
				iIndexArray.Append(i);
		}
		else
		{
			buf.Zero();
			buf.AppendNum(idx);
			for(TInt i=0; i<iMyAppUi->iSmokeInfos.Count(); i++)
			{
				TSmokeType* type = iMyAppUi->FindSmokeType(iMyAppUi->iSmokeInfos[i]->iCode);
				if(type)
				{
					if(type->iType.Compare(buf) == 0)
						iIndexArray.Append(i);
					else
						RDebug::Print(_L("type->iType=%S<"), &type->iType);
				}
			}
		}

		iStartNumber = 0;
		ShowSmokeInfoSheet();
		iMyAppUi->SetNavigationLabelL(R_FUNCTION4);
		iMyAppUi->ChangeCBA(R_SHEET_CBA, R_SHEET_MENUBAR);
	}

	array->Reset();
	delete array;
}
//输入编码查找用户
TBool CGridDemoContainer::InputCodeAndFind()
{
	iOperaterName.Set(0,0);
	iOperaterCode.Zero();
	TSmokeUser* user = iMyAppUi->SelectUser();
	if(user)
	{
		iOperaterCode.Copy(user->iNo);
		iOperaterName.Set(user->iName);
		iMyAppUi->SetStatusPaneTitleL(iOperaterName);
		return ETrue;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -