📄 sman.cpp
字号:
// For some strange reason when I have just issued a command to write to the
// disk (via saving snapshot or saving shortcuts), the app server always returns
// an invalid application list (corrupted). I have to wait a while before the query
// runs correct again....?????
CEikonEnv::Static()->BusyMsgL(R_TBUF_VALIDATING);
//_L("Validating..."), TGulAlignment(EHRightVTop));
mySession.Connect();
mySession.GetAllApps();
errRes = 2;
while ((errRes != 0) & (iTimeout > 0))
{
while (mySession.GetNextApp(theAppInfo) == KErrNone)
{
errRes = 1;
if (mySession.GetAppCapability(aCapabilityBuf, theAppInfo.iUid) == KErrNone)
{
// Only scan applications that are not hidden
if (aCapabilityBuf().iAppIsHidden == EFalse)
{
if (theAppInfo.iUid == appUid)
{
aInfo->iUid = theAppInfo.iUid;
aInfo->iFullName = theAppInfo.iFullName;
aInfo->iCaption = theAppInfo.iCaption;
errRes = 0;
break;
}
}
}
}
User::After(iDelay);
iTimeout--;
}
mySession.Close();
CEikonEnv::Static()->BusyMsgCancel();
return errRes;
}
void CSMan2AppUi::sizeToText(TInt64 size, TDes* desc)
{
TInt64 origSize, decimals;
TBuf<3> sizeName;
origSize = size;
if (size < 1024)
{
sizeName = _L("b)");
decimals = 0;
}
else if (size < (1024 * 1024))
{
size = size / 1024;
decimals = (origSize - (size * 1024)) / 1024;
sizeName = _L("KB)");
}
else
{
size = size / (1024 * 1024);
decimals = (origSize - (size * 1024 * 1024)) / 1024;
sizeName = _L("MB)");
}
desc->Num(size);
desc->Append(_L("."));
desc->AppendFormat(_L("%2d"), decimals);
if (size > 999)
desc->Insert(desc->Length() - 6, _L(","));
desc->Append(sizeName);
desc->Insert(0, _L("]("));
}
void CSMan2AppUi::DynInitMenuPaneL(TInt aMenuId, CEikMenuPane* aMenuPane)
{
if (aMenuId == R_GENERIC_FN)
{
if ((configData->fnActivatedMenus & 1) == 0)
aMenuPane->DeleteMenuItem(cmdSwitchFile);
if ((configData->fnActivatedMenus & 2) == 0)
aMenuPane->DeleteMenuItem(cmdSwitchSysInfo);
if ((configData->fnActivatedMenus & 4) == 0)
aMenuPane->DeleteMenuItem(cmdSwitchBJack);
if ((configData->fnActivatedMenus & 8) == 0)
aMenuPane->DeleteMenuItem(cmdSwitchDB);
if ((configData->fnActivatedMenus & 16) == 0)
aMenuPane->DeleteMenuItem(cmdSwitchAgenda);
}
else if (aMenuId == R_OPTIONS_AUTOSTART_MENU)
{
CAutostartDialog* autoStartDialog = new (ELeave) CAutostartDialog();
autoStartDialog->loadBootFile();
if (autoStartDialog->autoStartConfig.autoStartUid[MAX_AUTOSTART - 1] == KUidSMan2App)
aMenuPane->SetItemButtonState(cmdAutostartSMan, EEikMenuItemSymbolOn);
delete autoStartDialog;
}
else if (aMenuId == R_FIXAPPORDER_MENU)
{
if (!ConeUtils::FileExists(KAppConfigFileBackup))
aMenuPane->SetItemDimmed(cmdUtilsFixAppOrderRestore, ETrue);
}
else if (viewId == EViewAgenda)
{
if (aMenuId == R_AGENDA_COMPLETED_MENU)
{
if (configData->agendaShowCompleteCalendar)
aMenuPane->SetItemButtonState(cmdAgendaCompleteCalendar, EEikMenuItemSymbolOn);
if (configData->agendaShowCompleteTodo)
aMenuPane->SetItemButtonState(cmdAgendaCompleteTodo, EEikMenuItemSymbolOn);
}
else if (aMenuId == R_AGENDA_AUTOEXPAND_MENU)
{
if (configData->agendaAutoExpandCalendar)
aMenuPane->SetItemButtonState(cmdAgendaAutoExpandCalendar, EEikMenuItemSymbolOn);
if (configData->agendaAutoExpandTodo)
aMenuPane->SetItemButtonState(cmdAgendaAutoExpandTodo, EEikMenuItemSymbolOn);
}
}
else if (viewId == EViewDB)
{
if (aMenuId == R_DB_OPTIONS)
{
if (!iDBView->dbIsOpened)
{
aMenuPane->SetItemDimmed(cmdDBUpdateStats, ETrue);
aMenuPane->SetItemDimmed(cmdDBCompact, ETrue);
aMenuPane->SetItemDimmed(cmdDBChangePassword, ETrue);
aMenuPane->SetItemDimmed(cmdDBSortAsc, ETrue);
aMenuPane->SetItemDimmed(cmdDBSortDes, ETrue);
aMenuPane->SetItemDimmed(cmdDBCloseDB, ETrue);
}
else if (iDBView->dbIsOpened)
{
aMenuPane->SetItemDimmed(cmdDBReadDB, ETrue);
if (iDBView->currentDBView != CSMan2DBView::DBView_List)
{
aMenuPane->SetItemDimmed(cmdDBChangePassword, ETrue);
aMenuPane->SetItemDimmed(cmdDBReadDB, ETrue);
aMenuPane->SetItemDimmed(cmdDBReInit, ETrue);
aMenuPane->SetItemDimmed(cmdDBSortAsc, ETrue);
aMenuPane->SetItemDimmed(cmdDBSortDes, ETrue);
aMenuPane->SetItemDimmed(cmdDBUpdateStats, ETrue);
aMenuPane->SetItemDimmed(cmdDBCompact, ETrue);
}
}
if (configData->dbSortAscending)
aMenuPane->SetItemButtonState(cmdDBSortAsc, EEikMenuItemSymbolOn);
else
aMenuPane->SetItemButtonState(cmdDBSortDes, EEikMenuItemSymbolOn);
}
else if (aMenuId == R_DB_DOBUTTON)
{
if (!iDBView->dbIsOpened)
{
aMenuPane->SetItemDimmed(cmdDBAdd, ETrue);
aMenuPane->SetItemDimmed(cmdDBEdit, ETrue);
aMenuPane->SetItemDimmed(cmdDBView, ETrue);
aMenuPane->SetItemDimmed(cmdDBDel, ETrue);
aMenuPane->SetItemDimmed(cmdDBSave, ETrue);
}
else
{
switch (iDBView->currentDBOp)
{
case CSMan2DBView::DBOp_Browsing:
{
aMenuPane->SetItemDimmed(cmdDBSave, ETrue);
break;
}
case ((CSMan2DBView::DBOp_Editing) || (CSMan2DBView::DBOp_Adding)):
{
aMenuPane->SetItemDimmed(cmdDBAdd, ETrue);
aMenuPane->SetItemDimmed(cmdDBEdit, ETrue);
aMenuPane->SetItemDimmed(cmdDBDel, ETrue);
aMenuPane->SetItemDimmed(cmdDBView, ETrue);
break;
}
case CSMan2DBView::DBOp_Adding:
{
aMenuPane->SetItemDimmed(cmdDBAdd, ETrue);
aMenuPane->SetItemDimmed(cmdDBEdit, ETrue);
aMenuPane->SetItemDimmed(cmdDBDel, ETrue);
aMenuPane->SetItemDimmed(cmdDBView, ETrue);
break;
}
case CSMan2DBView::DBOp_Viewing:
{
aMenuPane->SetItemDimmed(cmdDBAdd, ETrue);
aMenuPane->SetItemDimmed(cmdDBDel, ETrue);
aMenuPane->SetItemDimmed(cmdDBView, ETrue);
aMenuPane->SetItemDimmed(cmdDBSave, ETrue);
break;
}
}
}
}
}
else if (viewId == EViewFile)
{
if (aMenuId == R_FILE_DRIVES_MENU)
{
// Get volume + free space information for all the drives.
TVolumeInfo volInfo;
TInt err, i;
TBuf<KMaxFileName + 30> desc;
TBuf<3> drivePrefix;
CEikMenuPaneItem::SData itemData;
for (i = 0; i < KMaxDrives; i++)
{
err = iEikonEnv->FsSession().Volume(volInfo, EDriveA + i);
if (err == KErrNone)
{
if (volInfo.iDrive.iType != EMediaRom)
sizeToText(volInfo.iFree, &desc);
else
desc.Copy(_L("](ROM)"));
desc.Insert(0, volInfo.iName);
drivePrefix.Format(_L("%c:["), 0x41 + i);
desc.Insert(0, drivePrefix);
itemData.iText.Copy(desc);
itemData.iCommandId = cmdFileMan_Drive_A + i;
itemData.iFlags = 0;
itemData.iCascadeId = 0;
aMenuPane->AddMenuItemL(itemData);
}
}
}
else if (aMenuId == R_FILE_OPTIONS_MENU)
{
if (configData->beamProtocol == CBlueBeam::protocolIrDA)
aMenuPane->SetItemButtonState(cmdFileMan_IrDA, EEikMenuItemSymbolOn);
else if (configData->beamProtocol == CBlueBeam::protocolBluetooth)
aMenuPane->SetItemButtonState(cmdFileMan_Bluetooth, EEikMenuItemSymbolOn);
if (configData->showHiddenFiles)
aMenuPane->SetItemButtonState(cmdFileManToggleHiddenView, EEikMenuItemSymbolOn);
if (configData->autoRunApp)
aMenuPane->SetItemButtonState(cmdFileManToggleRunApp, EEikMenuItemSymbolOn);
if (configData->autoOpenFile)
aMenuPane->SetItemButtonState(cmdFileManToggleOpenFile, EEikMenuItemSymbolOn);
}
}
else if (viewId == EViewBJack)
{
if (aMenuId == R_OPTIONS_BLUEJACK_MENU)
{
if (configData->showBluejackSysMsg)
aMenuPane->SetItemButtonState(cmdBluejackSysMsg, EEikMenuItemSymbolOn);
if (configData->resolveName)
aMenuPane->SetItemButtonState(cmdResolveName, EEikMenuItemSymbolOn);
if (configData->autoSave)
aMenuPane->SetItemButtonState(cmdBluejackAutoSave, EEikMenuItemSymbolOn);
if (configData->proxSweepOnce)
aMenuPane->SetItemButtonState(cmdBluejackOnce, EEikMenuItemSymbolOn);
}
else if (aMenuId == R_BLUEJACK_FILELOG_MENU)
{
if (iBJackView->oScanner->IsActive())
{
aMenuPane->SetItemDimmed(cmdBluejackDelFileLog, ETrue);
aMenuPane->SetItemDimmed(cmdBluejackViewFileLog, ETrue);
}
}
}
else if (viewId == EViewTask)
{
if (aMenuId == R_EXTRAS_MENU)
{
//if ((iBJackView->oScanner->IsActive()) || (iFileView->blueBeam->IsActive()))
// aMenuPane->SetItemDimmed(cmdFileMan, ETrue);
if (!configData->hotkeyEnabled)
aMenuPane->SetItemButtonState(cmdNoHotkey, EEikMenuItemSymbolOn);
if (configData->flipFlush)
aMenuPane->SetItemButtonState(cmdFlipFlush, EEikMenuItemSymbolOn);
if (configData->forceEndTask)
aMenuPane->SetItemButtonState(cmdForceEndTask, EEikMenuItemSymbolOn);
if (configData->showHiddenTasks)
aMenuPane->SetItemButtonState(cmdShowHiddenTask, EEikMenuItemSymbolOn);
if (configData->persist)
aMenuPane->SetItemButtonState(cmdPersist, EEikMenuItemSymbolOn);
}
else if (aMenuId == R_RUNAPPLIST_MENU)
{
CEikMenuPaneItem::SData itemData;
CShortcutDialog* shortcutDialog = new (ELeave) CShortcutDialog(NULL);
shortcutDialog->populateAppArray();
startUidList->Reset();
startUidList->Compress();
for (int i = 0; i < shortcutDialog->appListArray->MdcaCount(); i++)
{
itemData.iText.Copy(shortcutDialog->appListArray->MdcaPoint(i));
itemData.iCommandId = cmdRunAppBase + i;
startUidList->AppendL(shortcutDialog->appListUid->At(i));
itemData.iFlags = 0;
itemData.iCascadeId = 0;
aMenuPane->AddMenuItemL(itemData);
}
delete shortcutDialog;
}
else if (aMenuId == R_SHORTCUTS_MENU)
{
// This is faster than NUM_SHORTCUTS calls to FindApp() as long as NUM_SHORTCUTS is less
// than the number of apps u have installed. However, this is bulkier in code.
RApaLsSession mySession;
TApaAppCapabilityBuf aCapabilityBuf;
TApaAppInfo aInfo;
TInt i;
CEikMenuPaneItem::SData itemData;
// Bounce the app server
FindApp(KUidControlPanel, &aInfo);
mySession.Connect();
mySession.GetAllApps();
while (mySession.GetNextApp(aInfo) == KErrNone)
{
if (mySession.GetAppCapability(aCapabilityBuf, aInfo.iUid) == KErrNone)
{
// Only scan applications that are not hidden
if (aCapabilityBuf().iAppIsHidden == EFalse)
{
for (i = 0; i < NUM_SHORTCUTS; i++)
{
if (aInfo.iUid == configData->shortCutUid[i])
{
aMenuPane->SetItemDimmed(cmdShort1 + i,EFalse);
aMenuPane->SetItemTextL(cmdShort1 + i, aInfo.iCaption);
}
}
}
}
}
mySession.Close();
// Dynamically initialize the history menu
TBool hasHistory = EFalse;
TInt iMenuPos;
for (i = 0; i < NUM_LASTRUN_HISTORY; i++)
{
if (historyUidList->At(i) != KNullUid)
{
if (FindApp(historyUidList->At(i), &aInfo) == 0)
itemData.iText.Copy(aInfo.iCaption);
else
itemData.iText=_L("<none>");
itemData.iCommandId = cmdLastRunBase + i;
itemData.iFlags = 0;
itemData.iCascadeId = 0;
// add the item
aMenuPane->AddMenuItemL(itemData);
hasHistory = ETrue;
}
}
// As per Phil Spencer's rant, I'm now in compliance with UIQ's style guide. LOL. :)
if (hasHistory)
{
CEikMenuPaneItem *theMenuItem = aMenuPane->ItemAndPos(cmdShort7, iMenuPos);
theMenuItem->iData.iFlags = theMenuItem->iData.iFlags | EEikMenuItemSeparatorAfter;
}
}
}
else if (viewId == EViewFlipClosed)
{
if (aMenuId == R_FC_BLUEJACK_MENU)
{
if (iBJackView->oScanner->IsActive())
{
HBufC* dataBuffer = CEikonEnv::Static()->AllocReadResourceL(R_TBUF_MISC_FC_BJACK_SWEEP);
aMenuPane->SetItemTextL(cmdBluejack, *dataBuffer);
delete dataBuffer;
}
}
}
}
/*************************************************************
*
* External interface
*
**************************************************************/
TUid CSMan2Application::AppDllUid() const
{
return KUidSMan2App;
}
GLDEF_C TInt E32Dll(TDllReason)
{
return KErrNone;
}
EXPORT_C CApaApplication* NewApplication()
{
return new CSMan2Application;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -