📄 serverwnd.cpp
字号:
}
void CServerWnd::OnBnClickedAddserver()
{
CString serveraddr;
if (!GetDlgItem(IDC_IPADDRESS)->GetWindowTextLength()){
AfxMessageBox(GetResString(IDS_SRV_ADDR));
return;
}
else
GetDlgItem(IDC_IPADDRESS)->GetWindowText(serveraddr);
UINT uPort = 0;
if (_tcsncmp(serveraddr, _T("ed2k://"), 7) == 0){
CED2KLink* pLink = NULL;
try{
pLink = CED2KLink::CreateLinkFromUrl(serveraddr);
serveraddr.Empty();
if (pLink && pLink->GetKind() == CED2KLink::kServer){
CED2KServerLink* pServerLink = pLink->GetServerLink();
if (pServerLink){
uint32 nServerIP = pServerLink->GetIP();
uPort = pServerLink->GetPort();
serveraddr = ipstr(nServerIP);
SetDlgItemText(IDC_IPADDRESS, serveraddr);
SetDlgItemInt(IDC_SPORT, uPort, FALSE);
}
}
}
catch(CString strError){
AfxMessageBox(strError);
serveraddr.Empty();
}
delete pLink;
}
else{
if (!GetDlgItem(IDC_SPORT)->GetWindowTextLength()){
AfxMessageBox(GetResString(IDS_SRV_PORT));
return;
}
BOOL bTranslated = FALSE;
uPort = GetDlgItemInt(IDC_SPORT, &bTranslated, FALSE);
if (!bTranslated){
AfxMessageBox(GetResString(IDS_SRV_PORT));
return;
}
}
if (serveraddr.IsEmpty() || uPort == 0){
AfxMessageBox(GetResString(IDS_SRV_ADDR));
return;
}
CString strServerName;
GetDlgItem(IDC_SNAME)->GetWindowText(strServerName);
AddServer(uPort, serveraddr, strServerName);
}
void CServerWnd::PasteServerFromClipboard()
{
CString strServer = theApp.CopyTextFromClipboard();
strServer.Trim();
if (strServer.IsEmpty())
return;
int nPos = 0;
CString strTok = strServer.Tokenize(_T(" \t\r\n"), nPos);
while (!strTok.IsEmpty())
{
uint32 nIP = 0;
uint16 nPort = 0;
CED2KLink* pLink = NULL;
try{
pLink = CED2KLink::CreateLinkFromUrl(strTok);
if (pLink && pLink->GetKind() == CED2KLink::kServer){
CED2KServerLink* pServerLink = pLink->GetServerLink();
if (pServerLink){
nIP = pServerLink->GetIP();
nPort = pServerLink->GetPort();
}
}
}
catch(CString strError){
AfxMessageBox(strError);
}
delete pLink;
if (nIP == 0 || nPort == 0)
break;
(void)AddServer(nPort, ipstr(nIP), _T(""), false);
strTok = strServer.Tokenize(_T(" \t\r\n"), nPos);
}
}
bool CServerWnd::AddServer(uint16 nPort, CString strIP, CString strName, bool bShowErrorMB)
{
CServer* toadd = new CServer(nPort, strIP);
// Barry - Default all manually added servers to high priority
if (thePrefs.GetManualHighPrio())
toadd->SetPreference(SRV_PR_HIGH);
if (strName.IsEmpty())
strName = strIP;
toadd->SetListName(strName);
if (!serverlistctrl.AddServer(toadd, true))
{
CServer* update = theApp.serverlist->GetServerByAddress(toadd->GetAddress(), toadd->GetPort());
if (update)
{
static const TCHAR _aszServerPrefix[] = _T("Server");
if (_tcsnicmp(toadd->GetListName(), _aszServerPrefix, ARRSIZE(_aszServerPrefix)-1) != 0)
{
update->SetListName(toadd->GetListName());
serverlistctrl.RefreshServer(update);
}
}
else
{
if (bShowErrorMB)
AfxMessageBox(GetResString(IDS_SRV_NOTADDED));
}
delete toadd;
return false;
}
else
{
AddLogLine(true, GetResString(IDS_SERVERADDED), toadd->GetListName());
return true;
}
}
void CServerWnd::OnBnClickedUpdateservermetfromurl()
{
// step1 - get url
CString strURL;
bool bDownloaded=false;
GetDlgItem(IDC_SERVERMETURL)->GetWindowText(strURL);
if (strURL==_T("")){
if (thePrefs.adresses_list.IsEmpty()){
AddLogLine(true, GetResString(IDS_SRV_NOURLAV) );
return;
}
else
{
POSITION Pos = thePrefs.adresses_list.GetHeadPosition();
while ((!bDownloaded) && (Pos != NULL)){
strURL = thePrefs.adresses_list.GetNext(Pos).GetBuffer();
bDownloaded=UpdateServerMetFromURL(strURL);
}
}
}
else
UpdateServerMetFromURL(strURL);
}
void CServerWnd::OnBnClickedResetLog()
{
int cur_sel = StatusSelector.GetCurSel();
if (cur_sel == -1)
return;
if (cur_sel == PaneVerboseLog)
{
theApp.emuledlg->ResetDebugLog();
theApp.emuledlg->statusbar->SetText(_T(""), SBarLog, 0);
}
if (cur_sel == PaneLog)
{
theApp.emuledlg->ResetLog();
theApp.emuledlg->statusbar->SetText(_T(""), SBarLog, 0);
}
if (cur_sel == PaneServerInfo)
{
servermsgbox->Reset();
// the statusbar does not contain any server log related messages, so it's not cleared.
}
}
void CServerWnd::OnTcnSelchangeTab3(NMHDR *pNMHDR, LRESULT *pResult)
{
UpdateLogTabSelection();
*pResult = 0;
}
void CServerWnd::UpdateLogTabSelection()
{
int cur_sel = StatusSelector.GetCurSel();
if (cur_sel == -1)
return;
if (cur_sel == PaneVerboseLog)
{
servermsgbox->ShowWindow(SW_HIDE);
logbox->ShowWindow(SW_HIDE);
debuglog->ShowWindow(SW_SHOW);
debuglog->Invalidate();
StatusSelector.HighlightItem(cur_sel, FALSE);
}
if (cur_sel == PaneLog)
{
debuglog->ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_HIDE);
logbox->ShowWindow(SW_SHOW);
logbox->Invalidate();
StatusSelector.HighlightItem(cur_sel, FALSE);
}
if (cur_sel == PaneServerInfo)
{
debuglog->ShowWindow(SW_HIDE);
logbox->ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_SHOW);
servermsgbox->Invalidate();
StatusSelector.HighlightItem(cur_sel, FALSE);
}
}
void CServerWnd::ToggleDebugWindow()
{
int cur_sel = StatusSelector.GetCurSel();
if (thePrefs.GetVerbose() && !debug)
{
TCITEM newitem;
CString name;
name = SZ_DEBUG_LOG_TITLE;
newitem.mask = TCIF_TEXT|TCIF_IMAGE;
newitem.pszText = const_cast<LPTSTR>((LPCTSTR)name);
newitem.iImage = 0;
StatusSelector.InsertItem(StatusSelector.GetItemCount(),&newitem);
debug = true;
}
else if (!thePrefs.GetVerbose() && debug)
{
if (cur_sel == PaneVerboseLog)
{
StatusSelector.SetCurSel(PaneLog);
StatusSelector.SetFocus();
}
debuglog->ShowWindow(SW_HIDE);
servermsgbox->ShowWindow(SW_HIDE);
logbox->ShowWindow(SW_SHOW);
StatusSelector.DeleteItem(PaneVerboseLog);
debug = false;
}
}
void CServerWnd::UpdateMyInfo()
{
m_MyInfo.SetRedraw(FALSE);
m_MyInfo.SetWindowText(_T(""));
CreateNetworkInfo(m_MyInfo, m_cfDef, m_cfBold);
m_MyInfo.SetRedraw(TRUE);
m_MyInfo.Invalidate();
}
BOOL CServerWnd::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN){
if (pMsg->wParam == VK_ESCAPE)
return FALSE;
if( m_pacServerMetURL && m_pacServerMetURL->IsBound() && ((pMsg->wParam == VK_DELETE) && (pMsg->hwnd == GetDlgItem(IDC_SERVERMETURL)->m_hWnd) && (GetAsyncKeyState(VK_MENU)<0 || GetAsyncKeyState(VK_CONTROL)<0)) )
m_pacServerMetURL->Clear();
if (pMsg->wParam == VK_RETURN){
if ( pMsg->hwnd == GetDlgItem(IDC_IPADDRESS)->m_hWnd
|| pMsg->hwnd == GetDlgItem(IDC_SPORT)->m_hWnd
|| pMsg->hwnd == GetDlgItem(IDC_SNAME)->m_hWnd){
OnBnClickedAddserver();
return TRUE;
}
else if (pMsg->hwnd == GetDlgItem(IDC_SERVERMETURL)->m_hWnd){
if (m_pacServerMetURL && m_pacServerMetURL->IsBound() ){
CString strText;
GetDlgItem(IDC_SERVERMETURL)->GetWindowText(strText);
if (!strText.IsEmpty()){
GetDlgItem(IDC_SERVERMETURL)->SetWindowText(_T("")); // this seems to be the only chance to let the dropdown list to disapear
GetDlgItem(IDC_SERVERMETURL)->SetWindowText(strText);
((CEdit*)GetDlgItem(IDC_SERVERMETURL))->SetSel(strText.GetLength(), strText.GetLength());
}
}
OnBnClickedUpdateservermetfromurl();
return TRUE;
}
}
}
return CResizableDialog::PreTranslateMessage(pMsg);
}
BOOL CServerWnd::SaveServerMetStrings()
{
if (m_pacServerMetURL== NULL)
return FALSE;
return m_pacServerMetURL->SaveList(CString(thePrefs.GetConfigDir()) + _T("\\") SERVERMET_STRINGS_PROFILE);
}
void CServerWnd::ShowNetworkInfo()
{
CNetworkInfoDlg dlg;
dlg.DoModal();
}
void CServerWnd::OnEnLinkServerBox(NMHDR *pNMHDR, LRESULT *pResult)
{
*pResult = 0;
ENLINK* pEnLink = reinterpret_cast<ENLINK *>(pNMHDR);
if (pEnLink && pEnLink->msg == WM_LBUTTONDOWN)
{
CString strUrl;
servermsgbox->GetTextRange(pEnLink->chrg.cpMin, pEnLink->chrg.cpMax, strUrl);
if (strUrl == m_strClickNewVersion){
// MOD Note: Do not remove this part - Merkur
strUrl.Format(_T("/en/version_check.php?version=%i&language=%i"),theApp.m_uCurVersionCheck,thePrefs.GetLanguageID());
strUrl = thePrefs.GetVersionCheckBaseURL()+strUrl;
// MOD Note: end
}
ShellExecute(NULL, NULL, strUrl, NULL, NULL, SW_SHOWDEFAULT);
*pResult = 1;
}
}
void CServerWnd::UpdateControlsState()
{
CString strLabel;
if (theApp.serverconnect->IsConnected())
strLabel = GetResString(IDS_MAIN_BTN_DISCONNECT);
else if (theApp.serverconnect->IsConnecting())
strLabel = GetResString(IDS_MAIN_BTN_CANCEL);
else
strLabel = GetResString(IDS_MAIN_BTN_CONNECT);
strLabel.Remove(_T('&'));
GetDlgItem(IDC_ED2KCONNECT)->SetWindowText(strLabel);
}
void CServerWnd::OnBnConnect()
{
if (theApp.serverconnect->IsConnected())
theApp.serverconnect->Disconnect();
else if (theApp.serverconnect->IsConnecting())
theApp.serverconnect->StopConnectionTry();
else
theApp.serverconnect->ConnectToAnyServer();
}
void CServerWnd::SaveAllSettings()
{
thePrefs.SetLastLogPaneID(StatusSelector.GetCurSel());
serverlistctrl.SaveSettings(CPreferences::tableServer);
SaveServerMetStrings();
}
void CServerWnd::OnDDClicked()
{
CWnd* box = GetDlgItem(IDC_SERVERMETURL);
box->SetFocus();
box->SetWindowText(_T(""));
box->SendMessage(WM_KEYDOWN, VK_DOWN, 0x00510001);
}
void CServerWnd::ResetHistory()
{
if (m_pacServerMetURL == NULL)
return;
GetDlgItem(IDC_SERVERMETURL)->SendMessage(WM_KEYDOWN, VK_ESCAPE, 0x00510001);
m_pacServerMetURL->Clear();
}
BOOL CServerWnd::OnHelpInfo(HELPINFO* pHelpInfo)
{
theApp.ShowHelp(eMule_FAQ_Update_Server);
return TRUE;
}
void CServerWnd::OnSvrTextChange()
{
GetDlgItem(IDC_ADDSERVER)->EnableWindow(GetDlgItem(IDC_IPADDRESS)->GetWindowTextLength());
GetDlgItem(IDC_UPDATESERVERMETFROMURL)->EnableWindow( GetDlgItem(IDC_SERVERMETURL)->GetWindowTextLength()>0 );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -