📄 searchparamswnd.cpp
字号:
m_pacSearchString->Clear();
}
void CSearchParamsWnd::OnCbnSelChangeMethod()
{
UpdateControls();
OnEnChangeName();
}
void CSearchParamsWnd::OnCbnSelEndOkMethod()
{
UpdateControls();
}
void CSearchParamsWnd::OnDDClicked()
{
m_ctlName.SetFocus();
m_ctlName.SetWindowText(_T(""));
m_ctlName.SendMessage(WM_KEYDOWN, VK_DOWN, 0x00510001);
}
BOOL CSearchParamsWnd::SaveSearchStrings()
{
if (m_pacSearchString == NULL)
return FALSE;
return m_pacSearchString->SaveList(thePrefs.GetConfigDir() + _T("\\") SEARCH_STRINGS_PROFILE);
}
void CSearchParamsWnd::SaveSettings()
{
SaveSearchStrings();
}
void CSearchParamsWnd::OnEnChangeName()
{
m_ctlStart.EnableWindow(m_ctlName.GetWindowTextLength() > 0);
bool bOfferUnicode = false;
#ifdef _UNICODE
if ((ESearchType)m_ctlMethod.GetCurSel() != SearchTypeFileDonkey)
#else
if ((ESearchType)m_ctlMethod.GetCurSel() == SearchTypeKademlia)
#endif
{
CString strExpr;
m_ctlName.GetWindowText(strExpr);
CStringW wstrExpr(strExpr);
for (int i = 0; i < wstrExpr.GetLength(); i++)
{
if (wstrExpr[i] >= 0x80)
{
bOfferUnicode = true;
break;
}
}
}
m_ctlUnicode.EnableWindow(bOfferUnicode);
}
void CSearchParamsWnd::OnBnClickedSearchReset()
{
m_ctlName.SetWindowText(_T(""));
m_ctlFileType.SetCurSel(m_ctlFileType.FindString(-1,GetResString(IDS_SEARCH_ANY)));
for (int i = 0; i < m_ctlOpts.GetItemCount(); i++)
m_ctlOpts.SetItemText(i, 1, _T(""));
OnEnChangeName();
}
void CSearchParamsWnd::OnSysCommand(UINT nID, LPARAM lParam)
{
if (nID == SC_KEYMENU)
{
if (lParam == EMULE_HOTMENU_ACCEL)
theApp.emuledlg->SendMessage(WM_COMMAND, IDC_HOTMENU);
else
theApp.emuledlg->SendMessage(WM_SYSCOMMAND, nID, lParam);
return;
}
CDialogBar::OnSysCommand(nID, lParam);
}
void CSearchParamsWnd::SetParameters(const SSearchParams* pParams)
{
if (!pParams->bClientSharedFiles)
{
m_ctlName.SetWindowText(pParams->strExpression);
m_ctlOpts.SetItemText(orMinSize, 1, pParams->strMinSize);
m_ctlOpts.SetItemText(orMaxSize, 1, pParams->strMaxSize);
m_ctlOpts.SetItemText(orExtension, 1, pParams->strExtension);
CString strBuff;
if (pParams->uAvailability > 0)
strBuff.Format(_T("%u"), pParams->uAvailability);
else
strBuff.Empty();
m_ctlOpts.SetItemText(orAvailability, 1, strBuff);
if (pParams->uComplete > 0)
strBuff.Format(_T("%u"), pParams->uComplete);
else
strBuff.Empty();
m_ctlOpts.SetItemText(orCompleteSources, 1, strBuff);
m_ctlOpts.SetItemText(orCodec, 1, pParams->strCodec);
if (pParams->ulMinBitrate > 0)
strBuff.Format(_T("%u"), pParams->ulMinBitrate);
else
strBuff.Empty();
m_ctlOpts.SetItemText(orBitrate, 1, strBuff);
if (pParams->ulMinLength > 0)
SecToTimeLength(pParams->ulMinLength, strBuff);
else
strBuff.Empty();
m_ctlOpts.SetItemText(orLength, 1, strBuff);
m_ctlOpts.SetItemText(orTitle, 1, pParams->strTitle);
m_ctlOpts.SetItemText(orAlbum, 1, pParams->strAlbum);
m_ctlOpts.SetItemText(orArtist, 1, pParams->strArtist);
}
}
ULONG CSearchParamsWnd::GetSearchSize(const CString& strExpr)
{
ULONG ulNum;
TCHAR szUnit[40];
int iArgs = _stscanf(strExpr, _T("%u%s"), &ulNum, szUnit);
if (iArgs <= 0)
return 0;
if (iArgs == 2){
CString strUnits(szUnit);
strUnits.Trim();
if (!strUnits.IsEmpty()){
if (strUnits.CompareNoCase(_T("b")) == 0 || strUnits.CompareNoCase(_T("byte")) == 0 || strUnits.CompareNoCase(_T("bytes")) == 0)
return ulNum * 1U; // Bytes
else if (strUnits.CompareNoCase(_T("k")) == 0 || strUnits.CompareNoCase(_T("kb")) == 0 || strUnits.CompareNoCase(_T("kbyte")) == 0 || strUnits.CompareNoCase(_T("kbytes")) == 0)
return ulNum * 1024U; // KBytes
else if (strUnits.CompareNoCase(_T("m")) == 0 || strUnits.CompareNoCase(_T("mb")) == 0 || strUnits.CompareNoCase(_T("mbyte")) == 0 || strUnits.CompareNoCase(_T("mbytes")) == 0)
return ulNum * 1024U*1024; // MBytes
else if (strUnits.CompareNoCase(_T("g")) == 0 || strUnits.CompareNoCase(_T("gb")) == 0 || strUnits.CompareNoCase(_T("gbyte")) == 0 || strUnits.CompareNoCase(_T("gbytes")) == 0)
return ulNum * 1024U*1024U*1024U; // GBytes
else{
AfxMessageBox(GetResString(IDS_SEARCH_EXPRERROR) + _T("\n\n") + GetResString(IDS_SEARCH_INVALIDMINMAX), MB_ICONWARNING | MB_HELP, eMule_FAQ_Search - HID_BASE_PROMPT);
return (ULONG)-1;
}
}
}
return ulNum * 1024U*1024U; // Default = MBytes
}
SSearchParams* CSearchParamsWnd::GetParameters()
{
CString strExpression;
m_ctlName.GetWindowText(strExpression);
strExpression.Trim();
if (!IsValidEd2kString(strExpression)){
AfxMessageBox(GetResString(IDS_SEARCH_EXPRERROR) + _T("\n\n") + GetResString(IDS_SEARCH_INVALIDCHAR), MB_ICONWARNING | MB_HELP, eMule_FAQ_Search - HID_BASE_PROMPT);
return NULL;
}
#ifndef _UNICODE
if ((ESearchType)m_ctlMethod.GetCurSel() != SearchTypeKademlia)
m_ctlUnicode.SetCheck(0);
#endif
bool bUnicode = m_ctlUnicode.IsWindowEnabled() && m_ctlUnicode.GetCheck();
if (!bUnicode)
{
CStringA strACP(strExpression);
if (!IsValidEd2kStringA(strACP)){
AfxMessageBox(GetResString(IDS_SEARCH_EXPRERROR) + _T("\n\n") + GetResString(IDS_SEARCH_INVALIDCHAR), MB_ICONWARNING | MB_HELP, eMule_FAQ_Search - HID_BASE_PROMPT);
return NULL;
}
}
CStringA strFileType;
int iItem = m_ctlFileType.GetCurSel();
if (iItem != CB_ERR)
{
LPCSTR pszED2KFileType = (LPCSTR)m_ctlFileType.GetItemDataPtr(iItem);
ASSERT( pszED2KFileType != NULL );
strFileType = pszED2KFileType;
}
CString strMinSize = m_ctlOpts.GetItemText(orMinSize, 1);
ULONG ulMinSize = GetSearchSize(strMinSize);
if (ulMinSize == (ULONG)-1)
return NULL;
CString strMaxSize = m_ctlOpts.GetItemText(orMaxSize, 1);
ULONG ulMaxSize = GetSearchSize(strMaxSize);
if (ulMaxSize == (ULONG)-1)
return NULL;
if (ulMaxSize < ulMinSize){
ulMaxSize = 0; // TODO: Create a message box for that
m_ctlOpts.SetItemText(orMaxSize, 1, _T(""));
}
CString strExtension;
if ((m_ctlOpts.GetItemData(orExtension) & 1) == 0)
{
strExtension = m_ctlOpts.GetItemText(orExtension, 1);
strExtension.Trim();
if (!strExtension.IsEmpty() && strExtension[0] == _T('.'))
{
strExtension = strExtension.Mid(1);
m_ctlOpts.SetItemText(orExtension, 1, strExtension);
}
}
UINT uAvailability = 0;
if ((m_ctlOpts.GetItemData(orAvailability) & 1) == 0)
{
CString strAvailability = m_ctlOpts.GetItemText(orAvailability, 1);
_stscanf(strAvailability, _T("%u"), &uAvailability);
if (uAvailability > 1000000)
{
uAvailability = 1000000;
strAvailability.Format(_T("%u"), uAvailability);
m_ctlOpts.SetItemText(orAvailability, 1, strAvailability);
}
}
UINT uComplete = 0;
if ((m_ctlOpts.GetItemData(orCompleteSources) & 1) == 0)
{
CString strComplete = m_ctlOpts.GetItemText(orCompleteSources, 1);
_stscanf(strComplete, _T("%u"), &uComplete);
if (uComplete > 1000000)
{
uComplete = 1000000;
strComplete.Format(_T("%u"), uComplete);
m_ctlOpts.SetItemText(orCompleteSources, 1, strComplete);
}
}
CString strCodec;
if ((m_ctlOpts.GetItemData(orCodec) & 1) == 0)
strCodec = m_ctlOpts.GetItemText(orCodec, 1);
strCodec.Trim();
ULONG ulMinBitrate = 0;
if ((m_ctlOpts.GetItemData(orBitrate) & 1) == 0)
{
CString strMinBitrate = m_ctlOpts.GetItemText(orBitrate, 1);
_stscanf(strMinBitrate, _T("%u"), &ulMinBitrate);
if (ulMinBitrate > 1000000)
{
ulMinBitrate = 1000000;
strMinBitrate.Format(_T("%u"), ulMinBitrate);
m_ctlOpts.SetItemText(orBitrate, 1, strMinBitrate);
}
}
ULONG ulMinLength = 0;
if ((m_ctlOpts.GetItemData(orLength) & 1) == 0)
{
CString strMinLength = m_ctlOpts.GetItemText(orLength, 1);
if (!strMinLength.IsEmpty())
{
UINT hour = 0, min = 0, sec = 0;
if (_stscanf(strMinLength, _T("%u : %u : %u"), &hour, &min, &sec) == 3)
ulMinLength = hour * 3600 + min * 60 + sec;
else if (_stscanf(strMinLength, _T("%u : %u"), &min, &sec) == 2)
ulMinLength = min * 60 + sec;
else if (_stscanf(strMinLength, _T("%u"), &sec) == 1)
ulMinLength = sec;
if (ulMinLength > 3600*24)
{
ulMinLength = 3600*24;
CString strValue;
SecToTimeLength(ulMinLength, strValue);
m_ctlOpts.SetItemText(orLength, 1, strValue);
}
}
}
SSearchParams* pParams = new SSearchParams;
pParams->strExpression = strExpression;
pParams->eType = (ESearchType)m_ctlMethod.GetCurSel();
pParams->strFileType = strFileType;
pParams->strMinSize = strMinSize;
pParams->ulMinSize = ulMinSize;
pParams->strMaxSize = strMaxSize;
pParams->ulMaxSize = ulMaxSize;
pParams->uAvailability = uAvailability;
pParams->strExtension = strExtension;
//pParams->bMatchKeywords = IsDlgButtonChecked(IDC_MATCH_KEYWORDS);
pParams->uComplete = uComplete;
pParams->strCodec = strCodec;
pParams->ulMinBitrate = ulMinBitrate;
pParams->ulMinLength = ulMinLength;
if ((m_ctlOpts.GetItemData(orTitle) & 1) == 0)
{
pParams->strTitle = m_ctlOpts.GetItemText(orTitle, 1);
pParams->strTitle.Trim();
}
if ((m_ctlOpts.GetItemData(orAlbum) & 1) == 0)
{
pParams->strAlbum = m_ctlOpts.GetItemText(orAlbum, 1);
pParams->strAlbum.Trim();
}
if ((m_ctlOpts.GetItemData(orArtist) & 1) == 0)
{
pParams->strArtist = m_ctlOpts.GetItemText(orArtist, 1);
pParams->strArtist.Trim();
}
pParams->bUnicode = bUnicode;
return pParams;
}
BOOL CSearchParamsWnd::OnHelpInfo(HELPINFO* pHelpInfo)
{
theApp.ShowHelp(eMule_FAQ_Search);
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -