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

📄 controlpanelapplication_app.cpp

📁 symbian os c++ 界面控制及显示
💻 CPP
字号:
//
// Copyright (c) 2004 Symbian Ltd.  All rights reserved.
//

#include "ControlPanelApplication.h"

// Constants
const TInt KPathColumn = 0;
const TInt KUidColumn = 1;

// Location of the resource file
_LIT(KLitResourceFileName,"Z:\\SYSTEM\\Controls\\CONTROLPANELAPPLICATION.rsc");

CControlPanelDialog::CControlPanelDialog()
	{
	iPageNumber = 0;
	}

CControlPanelDialog::~CControlPanelDialog()
	{
	iCoeEnv->DeleteResourceFile(iResourceFileId);
	delete iAppsArray;
	delete iInisArray;
	}

void CControlPanelDialog::AddResourceFileL()
	{
	TParse* parse = new (ELeave) TParse;
	CleanupStack::PushL(parse);
	parse->Set(KLitResourceFileName, NULL, NULL);
	TFileName* fileName=new(ELeave) TFileName(parse->FullName());
	CleanupStack::PopAndDestroy();//parse;
	CleanupStack::PushL(fileName);
	BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(),*fileName);
	iResourceFileId = iCoeEnv->AddResourceFileL(*fileName);
	CleanupStack::PopAndDestroy(); // fileName
	}

void CControlPanelDialog::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
	{
	// catch events from the list boxes
	switch(aEventType)
		{
	case EEventEnterKeyPressed:
		RDebug::Print(_L("Key Press"));
		break; /** Keypress event. */
	case EEventItemClicked:
		RDebug::Print(_L("Click"));
		break; /** Item single-tap event. */
	case EEventItemDoubleClicked:
		RDebug::Print(_L("Double Click"));
		break; /** Item two-taps event. */
	case EEventSelectionChanged:
		RDebug::Print(_L("Selection Changed"));
		break;
	default: /** Selection in list changed */
		RDebug::Print(_L("Default"));
		break;
		}
	}

TInt CControlPanelDialog::PrepareForcedExitL()
	{
	return ETrue;
	}

TBool CControlPanelDialog::OkToExitL(TInt aButtonId)
	{
	if(aButtonId == ERemoveButton)
		{ 
		// user has selected the remove button, return EFalse to return to the app
		RemoveFromList();
		return EFalse;
		}
	return ETrue;
	}

void CControlPanelDialog::HandleControlStateChangeL(TInt aControlId)
	{
	// catch control event for the current control
	if(aControlId == EAppsListBox)
		RDebug::Print(_L("Control Event in Applications List"));
	else if(aControlId == EInisListBox)
		RDebug::Print(_L("Control Even in Ini files list"));
	}

void CControlPanelDialog::PreLayoutDynInitL()
	{
	// Do pre drawing initialization
	InitilizeAppsListboxL();
	InitilizeInisListboxL();
	}

void CControlPanelDialog::PostLayoutDynInitL()
	{
	// Do post drawing initialization - just refreshes the list boxes
	RefreshAppsListBoxL(EItemAdded);
	}

void CControlPanelDialog::InitilizeAppsListboxL()
	{
	CEikColumnListBox* appsListBox= static_cast(CEikColumnListBox*, Control(EAppsListBox));
	
	// set up scroll bars
	CEikScrollBarFrame* sbFrame = appsListBox->CreateScrollBarFrameL();
	sbFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);

	appsListBox->SetListBoxObserver(this);
	iAppsArray = new (ELeave) CDesCArrayFlat(5);
	TInt maxWidth = 0;
	TInt currentWidth = 0;

	RApaLsSession ls;
	if(ls.Connect() == KErrNone)
		{
		// Get all applications installed
		if(ls.GetAllApps() != KErrNone)
			return;
		TApaAppInfo info;
		while(ls.GetNextApp(info) == KErrNone)
			{
			TApaAppInfo info1;
			ls.GetAppInfo(info1,info.iUid);
			// Don't want full path so just show name
			TParsePtr parse(info1.iFullName);
			TFileName fileName = parse.NameAndExt();
			currentWidth = fileName.Length();
			if (maxWidth<currentWidth)
				maxWidth=currentWidth;
			// Append the column separator for the list box
			fileName.Append(KColumnListSeparator);
			fileName.Append(info1.iUid.Name());
			iAppsArray->AppendL(fileName);
			}
		}

	appsListBox->SetFocus( EFalse );

	// set up the column data
	iColumnData =  appsListBox->ItemDrawer()->ColumnData();
	iColumnData->SetColumnFontL(KPathColumn,iEikonEnv->NormalFont());
	iColumnData->SetColumnFontL(KUidColumn,iEikonEnv->NormalFont());
	iColumnData->SetColumnAlignmentL(KPathColumn,CGraphicsContext::ELeft);
	iColumnData->SetColumnAlignmentL(KUidColumn,CGraphicsContext::ELeft);

	iColumnData->SetColumnWidthPixelL(KPathColumn,maxWidth*10);
	iColumnData->SetColumnWidthPixelL(KUidColumn,100);

	}

void CControlPanelDialog::InitilizeInisListboxL()
	{
	CEikListBox* inisListBox= static_cast(CEikListBox*, Control(EInisListBox));
	
	// set up the scroll bar
	CEikScrollBarFrame* sbFrame1 = inisListBox->CreateScrollBarFrameL();
	sbFrame1->SetScrollBarVisibilityL(CEikScrollBarFrame::EAuto, CEikScrollBarFrame::EAuto);

	inisListBox->SetListBoxObserver(this);
	iInisArray = new (ELeave) CDesCArrayFlat(5);
	RFs rfs;
	User::LeaveIfError(rfs.Connect());
	CDirScan* scan = CDirScan::NewLC(rfs);
	scan->SetScanDataL(_L("C:\\"),KEntryAttDir,ESortByName|EAscending,CDirScan::EScanDownTree);
	CDir* dir = NULL;
	TFindFile find(rfs);
	do
		{
		if(dir)
			delete dir;
		scan->NextL(dir);
		CDir* files = NULL;
		RDebug::Print(scan->FullPath());
		// Search for all .ini files on the C: drive
		if(find.FindWildByDir(_L("*.ini"),scan->FullPath(),files) == KErrNone)
			{
			for(TInt i=0;i<files->Count();i++)
				{
				RDebug::Print((*files)[i].iName);
				iInisArray->AppendL((*files)[i].iName);
				}
			delete files;
			files = NULL;
			}
		}
		while(dir != NULL);

	CleanupStack::PopAndDestroy(); //CDirScan
	}

void CControlPanelDialog::RefreshAppsListBoxL(TEnumAddRemove aStatus)
	{
	if(iPageNumber == 0)
		{
		CEikColumnListBox* appsListBox= static_cast(CEikColumnListBox*, Control(EAppsListBox));
		appsListBox->Model()->SetItemTextArray(iAppsArray);
		appsListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
		if(aStatus == EItemRemoved)
			appsListBox->HandleItemRemovalL();
		else
			appsListBox->HandleItemAdditionL();
		appsListBox->DrawNow();
		}
	else if(iPageNumber == 1)
		{
		CEikTextListBox* inisListBox= static_cast(CEikTextListBox*, Control(EInisListBox));
		inisListBox->Model()->SetItemTextArray(iInisArray);
		inisListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray);
		if(aStatus == EItemRemoved)
			inisListBox->HandleItemRemovalL();
		else
			inisListBox->HandleItemAdditionL();
		inisListBox->DrawNow();
		}
	}

void CControlPanelDialog::RemoveFromList(void)
	{
	if(iPageNumber == 0)
		{
		CEikColumnListBox* appsListBox= static_cast(CEikColumnListBox*, Control(EAppsListBox));
		TInt item = appsListBox->CurrentItemIndex();
		if(item == KErrNotFound)
			return;
		iAppsArray->Delete(item);
		}
	else if(iPageNumber == 1)
		{
		CEikTextListBox* exesListBox= static_cast(CEikTextListBox*, Control(EInisListBox));
		TInt item = exesListBox->CurrentItemIndex();
		if(item == KErrNotFound)
			return;
		iInisArray->Delete(item);
		}
	RefreshAppsListBoxL(EItemRemoved);
	}

void CControlPanelDialog::PageChangedL(TInt aPageId)
	{
	// Keep track of what page is currently being displayed
	if(aPageId == EAppsListPage)
		{
		iPageNumber = 0;
		RefreshAppsListBoxL(EItemAdded);
		}
	else if(aPageId == EInisListPage)
		{
		iPageNumber = 1;
		RefreshAppsListBoxL(EItemAdded);
		}
	}

⌨️ 快捷键说明

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