📄 controlpanelapplication_app.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 + -