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

📄 sman.cpp

📁 手机文件浏览器 Here are the sources to SMan v1.2c 1.2 is a major jump from v1.1. You will see this from the
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	// 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 + -