options.cpp

来自「一个支持FTP,SFTP的客户端程序」· C++ 代码 · 共 1,863 行 · 第 1/5 页

CPP
1,863
字号

					val = _ttoi(str);
					error = 0;
				}
			}
			RegCloseKey(key);
		}

		if (error)
		{
			memset(buffer,0,100);
			if (RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\FileZilla") ,&key)==ERROR_SUCCESS)
			{
				DWORD type;
				if (RegQueryValueEx(key, options[nOptionID-1].name, NULL, &type, buffer, &tmp)==ERROR_SUCCESS)
				{
					if (type == REG_DWORD)
					{
						if (tmp<=4)
						{
							memcpy(&val,buffer,tmp);
							error=0;
						}
					}
					else
					{
						int i;
						LPTSTR str = (LPTSTR)buffer;
						for (i = 0; i < 100; i++)
						{
							if (!str[i])
								break;
						}
						if (i == 100)
							str[99] = 0;

						val = _ttoi(str);
						error = 0;
					}
				}
				RegCloseKey(key);
			}
		}
		delete [] buffer;
	}
	switch (nOptionID)
	{
		case OPTION_PASV:
			if (error)
				val = 1;
			break;
		case OPTION_KEEPALIVE:
			if (error)
				val=1;
			break;
		case OPTION_INTERVALLOW:
			if (val>500)
				val=15;
			else if (val<15)
				val=15;
			break;
		case OPTION_INTERVALHIGH:
			if (val>500)
				val=30;
			else if (val<15)
				val=30;
			break;
		case OPTION_TIMEOUTLENGTH:
			if (val<30)
				val=30;
			else if (val>999)
				val=30;
			break;
		case OPTION_NUMRETRIES:
			if (val<0 || error)
				val=5;
			else if (val>999)
				val=5;
			break;
		case OPTION_RETRYDELAY:
			if (val<0 || error)
				val=5;
			else if (val>999)
				val=5;
			break;
		case OPTION_DEFAULTFOLDERTYPE:
			if (val!=1)
				val=0;
			break;
		case OPTION_TRANSFERMODE:
			if (val<0 || val>2)
				val=0;
			break;
		case OPTION_PORTRANGELOW:
			if (val<1 || val>65535)
				val=1;
			break;
		case OPTION_PORTRANGEHIGH:
			if (val<1 || val>65535)
				val=65535;
			break;
		case OPTION_MAXCACHETIME:
			if (val<=0)
				val=60*30;
			break;
		case OPTION_LOCALFILESIZEFORMAT:
			if (error || val<0 || val >3)
				val=0;
			break;
		case OPTION_REMOTEFILESIZEFORMAT:
			if (error || val<0 || val >3)
				val=1;
			break;
		case OPTION_USECACHE:
			if (error)
				val=1;
			break;
		case OPTION_TRANSFERPRIMARYMAXSIZE:
			if (error || val < 0 || val > 999999)
				val=1024;
			break;
		case OPTION_TRANSFERAPICOUNT:
			if (error || val < 1 || val > 10)
				val=2;
			break;
		case OPTION_TRANSFERUSEMULTIPLE:
			if (error)
				val=1;
			break;
		case OPTION_FILEEXISTSACTION:
			if (val<0 || val>5)
				val=0;
			break;
		case OPTION_SPEEDLIMIT_DOWNLOAD_VALUE:
		case OPTION_SPEEDLIMIT_UPLOAD_VALUE:
			if (error || val<=0)
				val=10;
			break;
		case OPTION_SHOWLOCALSTATUSBAR:
		case OPTION_SHOWREMOTESTATUSBAR:
			if (error)
				val = 1;
			break;
		case OPTION_HIDEREMOTECOLUMNS:
			if (error)
				val = 0x20;
			break;
		case OPTION_SSHUSECOMPRESSION:
		case OPTION_SSHPROTOCOL:
			if (val < 0 || val > 2)
				val = 0;
			break;
		case OPTION_MINIMIZETOTRAY:
			if (val < 0 || val > 2)
				val = 0;
			break;
		case OPTION_LOCAL_DOUBLECLICK_ACTION:
		case OPTION_REMOTE_DOUBLECLICK_ACTION:
			if (val < 0 || val > 2)
				val = 0;
			break;
		case OPTION_LOCALTREEVIEWLOCATION:
		case OPTION_REMOTETREEVIEWLOCATION:
			if (val < 0 || val > 1)
				val = 0;
			break;
		case OPTION_USEREGISTRY:
			if (error || val < 0 || val > 2)
				val = -1;
			break;
		case OPTION_LASTSERVERTRANSFERMODE:
			if (error || val < 0 || val > 2)
				val = 0;
			break;
		case OPTION_MESSAGELOG_FONTSIZE:
			if (error || val < 1 || val > 72)
				val = 0;
			break;
		case OPTION_MODEZ_USE:
			if (error || val < 0 || val > 2)
				val = 2;
			break;
		case OPTION_MODEZ_LEVEL:
			if (error || val < 1 || val > 9)
				val = 8;
			break;
	}
	if (!m_OptionsCache[nOptionID-1].bCached)
	{
		m_OptionsCache[nOptionID-1].bCached = TRUE;
		m_OptionsCache[nOptionID-1].createtime = CTime::GetCurrentTime();
		m_OptionsCache[nOptionID-1].value = val;
		m_OptionsCache[nOptionID-1].nType = 1;
	}

	return val;
}

void COptions::OnOK()
{
	if (!UpdateData(true))
		return;
	if (!GetCurPage()->UpdateData(TRUE))
		return;
	for (std::list<CSAPrefsSubDlg *>::iterator iter = m_PageList.begin(); iter != m_PageList.end(); iter++)
		if (IsWindow((*iter)->GetSafeHwnd()))
			if (!(*iter)->UpdateData(TRUE))
				return;
	if (m_OptionsPage2.m_UseKeepAlive)
	{
		int low=_ttoi(m_OptionsPage2.m_IntervalLow);
		int high=_ttoi(m_OptionsPage2.m_IntervalHigh);
		if ((low<15)||(low>500))
		{
			ShowPage(&m_OptionsPage2);
			m_OptionsPage2.GetDlgItem(IDC_INTERVALLOW)->SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_KEEPALIVEBORDERLOW,15,500);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
		if ((high<15)||(high>500))
		{
			ShowPage(&m_OptionsPage2);
			m_OptionsPage2.GetDlgItem(IDC_INTERVALHIGH)->SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_KEEPALIVEBORDERHIGH,15,500);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
		if (low>high)
		{
			ShowPage(&m_OptionsPage2);
			m_OptionsPage2.GetDlgItem(IDC_INTERVALLOW)->SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_KEEPALIVEBORDERDIFF);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
	}
	if ((m_OptionsPage2.m_Timeout < 0) || (m_OptionsPage2.m_Timeout > 999))
	{
		ShowPage(&m_OptionsPage2);
		m_OptionsPage2.GetDlgItem(IDC_NUMRETRY)->SetFocus();
		CString str;
		str.Format(IDS_OPTIONS_TIMEOUT, 0, 999);
		AfxMessageBox(str, MB_ICONEXCLAMATION);
		return;
	}


	int val=_ttoi(m_OptionsPage2.m_NumRetries);
	if ((val<0)||(val>999))
	{
		ShowPage(&m_OptionsPage2);
		m_OptionsPage2.GetDlgItem(IDC_NUMRETRY)->SetFocus();
		CString str;
		str.Format(IDS_OPTIONS_NUMRETRIES,0,999);
		AfxMessageBox(str,MB_ICONEXCLAMATION);
		return;

	}

	val=_ttoi(m_OptionsPage2.m_Delay);
	if ((val<0)||(val>999))
	{
		ShowPage(&m_OptionsPage2);
		m_OptionsPage2.GetDlgItem(IDC_DELAY)->SetFocus();
		CString str;
		str.Format(IDS_OPTIONS_RETRYDELAY,0,999);
		AfxMessageBox(str,MB_ICONEXCLAMATION);
		return;

	}

	if (m_OptionsProxyPage.m_Type)
	{
		if (m_OptionsProxyPage.m_Host=="")
		{
			ShowPage(&m_OptionsProxyPage);
			m_OptionsProxyPage.m_HostCtrl.SetFocus();
			AfxMessageBox(IDS_OPTIONS_PROXYHOST,MB_ICONEXCLAMATION);
			return;
		}
		val=_ttoi(m_OptionsProxyPage.m_Port);
		if (val<=0 || val>=65535)
		{
			ShowPage(&m_OptionsProxyPage);
			m_OptionsProxyPage.m_PortCtrl.SetFocus();
			AfxMessageBox(IDS_OPTIONS_PROXYPORT,MB_ICONEXCLAMATION);
			return;
		}
	}

	if (m_OptionsTypePage.m_AsciiFiles=="")
	{
		m_OptionsTypePage.m_AsciiFiles="";
		for (int i=0;i<m_OptionsTypePage.m_cTypeList.GetCount();i++)
		{
			CString tmp;
			m_OptionsTypePage.m_cTypeList.GetText(i,tmp);
			m_OptionsTypePage.m_AsciiFiles+=tmp+";";
		}
		m_OptionsTypePage.m_AsciiFiles.TrimRight( _T(";") );
		m_OptionsTypePage.m_AsciiFiles+=";";
	}

	if (m_OptionsGssPage.m_GssServers=="")
	{
		m_OptionsGssPage.m_GssServers="";
		for (int i=0;i<m_OptionsGssPage.m_cServerList.GetCount();i++)
		{
			CString tmp;
			m_OptionsGssPage.m_cServerList.GetText(i,tmp);
			m_OptionsGssPage.m_GssServers+=tmp+";";
		}
		m_OptionsGssPage.m_GssServers.TrimRight( _T(";") );
		m_OptionsGssPage.m_GssServers+=";";
	}

	if (m_OptionsFirewallPage.m_bLimitPortRange)
	{
		int low=_ttoi(m_OptionsFirewallPage.m_PortRangeLow);
		int high=_ttoi(m_OptionsFirewallPage.m_PortRangeHigh);
		if ((low<1)||(low>65534))
		{
			ShowPage(&m_OptionsFirewallPage);
			m_OptionsFirewallPage.m_cPortRangeLow.SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_LIMITPORTRANGELOW,1,65534);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
		if ((high<2)||(high>65535))
		{
			ShowPage(&m_OptionsFirewallPage);
			m_OptionsFirewallPage.m_cPortRangeLow.SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_LIMITPORTRANGEHIGH,2,65535);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
		if (low>=high)
		{
			ShowPage(&m_OptionsFirewallPage);
			m_OptionsFirewallPage.m_cPortRangeLow.SetFocus();
			CString str;
			str.Format(IDS_OPTIONS_LIMITPORTRANGEDIFF);
			AfxMessageBox(str,MB_ICONEXCLAMATION);
			return;
		}
	}

	CString str=m_OptionsViewEditPage.m_Custom;
	m_OptionsViewEditPage.m_Custom2="";
	CString line;
	for (int i=0;i<=str.GetLength();i++)
	{
		if (i==str.GetLength() || str[i]=='\r' || str[i]=='\n')
		{
			if (i!=str.GetLength())
			{
				line=str.Left(i);

				str=str.Mid(i+1);
				i=-1;
			}
			else
				line=str;

			line.TrimLeft( _T(" ") );
			line.TrimRight( _T(" ") );

⌨️ 快捷键说明

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