📄 emuledlg.cpp
字号:
statusbar->SetIcon(3, connicons[4]); // LowLow
else if (theApp.serverconnect->IsLowID())
statusbar->SetIcon(3, connicons[5]); // LowHigh
else if (Kademlia::CKademlia::isFirewalled())
statusbar->SetIcon(3, connicons[7]); // HighLow
else
statusbar->SetIcon(3, connicons[8]); // HighHigh
}
else
{
statusbar->SetIcon(3, connicons[0]); // NotNot
}
}
void CemuleDlg::ShowConnectionState()
{
theApp.downloadqueue->OnConnectionState(theApp.IsConnected());
serverwnd->UpdateMyInfo();
serverwnd->UpdateControlsState();
kademliawnd->UpdateControlsState();
ShowConnectionStateIcon();
CString status;
if(theApp.serverconnect->IsConnected())
status = _T("eD2K:")+GetResString(IDS_CONNECTED);
else if (theApp.serverconnect->IsConnecting())
status = _T("eD2K:")+GetResString(IDS_CONNECTING);
else
status = _T("eD2K:")+GetResString(IDS_NOTCONNECTED);
//Most likley needs a rewrite
if(thePrefs.networkkademlia){ //VeryCD
if(Kademlia::CKademlia::isConnected())
status += _T("|Kad:")+GetResString(IDS_CONNECTED);
else if (Kademlia::CKademlia::isRunning())
status += _T("|Kad:")+GetResString(IDS_CONNECTING);
else
status += _T("|Kad:")+GetResString(IDS_NOTCONNECTED);
}
statusbar->SetTipText(3,status);
statusbar->SetText(status,3,0);
if (theApp.IsConnected())
{
TCHAR szBuf[200];
_stprintf(szBuf, _T("%s"), GetResString(IDS_MAIN_BTN_DISCONNECT));
LPTSTR pszBuf;
TBBUTTONINFO tbi;
LPTBBUTTONINFO lptbbi;
pszBuf = szBuf;
lptbbi = &tbi;
tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
tbi.cbSize = sizeof (TBBUTTONINFO);
tbi.iImage = 1;
tbi.pszText = pszBuf;
tbi.cchText = sizeof (szBuf);
toolbar->SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
//TOOLTIP: GetResString(IDS_MAIN_BTN_DISCONNECT_TOOLTIP)
}
else
{
if (theApp.serverconnect->IsConnecting() || Kademlia::CKademlia::isRunning())
{
TCHAR szBuf[200];
_stprintf(szBuf, _T("%s"), GetResString(IDS_MAIN_BTN_CANCEL));
LPTSTR pszBuf;
TBBUTTONINFO tbi;
LPTBBUTTONINFO lptbbi;
pszBuf = szBuf;
lptbbi = &tbi;
tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
tbi.cbSize = sizeof (TBBUTTONINFO);
tbi.iImage = 2;
tbi.pszText = pszBuf;
tbi.cchText = sizeof (szBuf);
toolbar->SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
//TOOLTIP: GetResString(IDS_MAIN_BTN_CONNECT_TOOLTIP)
ShowUserCount();
}
else
{
TCHAR szBuf[200];
_stprintf(szBuf, _T("%s"), GetResString(IDS_MAIN_BTN_CONNECT));
LPTSTR pszBuf;
TBBUTTONINFO tbi;
LPTBBUTTONINFO lptbbi;
pszBuf = szBuf;
lptbbi = &tbi;
tbi.dwMask = TBIF_IMAGE | TBIF_TEXT;
tbi.cbSize = sizeof (TBBUTTONINFO);
tbi.iImage = 0;
tbi.pszText = pszBuf;
tbi.cchText = sizeof (szBuf);
toolbar->SetButtonInfo(IDC_TOOLBARBUTTON+0, lptbbi);
//TOOLTIP: GetResString(IDS_CONNECTTOANYSERVER)
//toolbar->AutoSize();
ShowUserCount();
}
}
}
void CemuleDlg::ShowUserCount(){
uint32 totaluser, totalfile;
totaluser = totalfile = 0;
theApp.serverlist->GetUserFileStatus( totaluser, totalfile );
CString buffer;
buffer.Format(_T("%s:%s(%s)|%s:%s(%s)"), GetResString(IDS_UUSERS), CastItoIShort(totaluser, false, 1), CastItoIShort(Kademlia::CKademlia::getKademliaUsers(), false, 1), GetResString(IDS_FILES), CastItoIShort(totalfile, false, 1), CastItoIShort(Kademlia::CKademlia::getKademliaFiles(), false, 1));
statusbar->SetText(buffer,1,0);
}
void CemuleDlg::ShowMessageState(uint8 iconnr)
{
m_iMsgIcon = iconnr;
statusbar->SetIcon(4, imicons[m_iMsgIcon]);
}
void CemuleDlg::ShowTransferStateIcon()
{
if (lastuprate && lastdownrate)
statusbar->SetIcon(2,transicons[3]);
else if (lastuprate)
statusbar->SetIcon(2,transicons[2]);
else if (lastdownrate)
statusbar->SetIcon(2,transicons[1]);
else
statusbar->SetIcon(2,transicons[0]);
}
void CemuleDlg::ShowTransferRate(bool forceAll){
TCHAR buffer[50];
if (forceAll)
m_lasticoninfo=255;
lastdownrate=theApp.downloadqueue->GetDatarate();
lastuprate=theApp.uploadqueue->GetDatarate();
if (thePrefs.ShowOverhead())
_stprintf(buffer, GetResString(IDS_UPDOWN),
(float)lastuprate/1024,
(float)theStats.GetUpDatarateOverhead()/1024,
(float)lastdownrate/1024,
(float)theStats.GetDownDatarateOverhead()/1024);
else
_stprintf(buffer,GetResString(IDS_UPDOWNSMALL),
(float)lastuprate/1024,
(float)lastdownrate/1024);
if (TrayIsVisible() || forceAll){
TCHAR buffer2[100];
// set trayicon-icon
int DownRateProcent=(int)ceil ( (lastdownrate/10.24)/ thePrefs.GetMaxGraphDownloadRate());
if (DownRateProcent>100)
DownRateProcent=100;
UpdateTrayIcon(DownRateProcent);
if (theApp.IsConnected())
_sntprintf(buffer2,ARRSIZE(buffer2),_T("eMule VeryCD (%s)\r\n%s"),GetResString(IDS_CONNECTED),buffer);
else
_sntprintf(buffer2,ARRSIZE(buffer2),_T("eMule VeryCD (%s)\r\n%s"),GetResString(IDS_DISCONNECTED),buffer);
buffer2[63]=0;
TraySetToolTip(buffer2);
}
if (IsWindowVisible() || forceAll) {
statusbar->SetText(buffer,2,0);
ShowTransferStateIcon();
}
if (IsWindowVisible() && thePrefs.ShowRatesOnTitle()) {
_sntprintf(buffer,ARRSIZE(buffer),_T("(U:%.1f D:%.1f) eMule v%s"),(float)lastuprate/1024, (float)lastdownrate/1024,theApp.m_strCurVersionLong);
SetWindowText(buffer);
}
}
// ZZ:UploadSpeedSense -->
void CemuleDlg::ShowPing() {
if(IsWindowVisible()) {
CurrentPingStruct lastPing = theApp.lastCommonRouteFinder->GetCurrentPing();
CString buffer;
if(thePrefs.IsDynUpEnabled()) {
if(lastPing.state.GetLength() == 0) {
if(lastPing.lowest > 0 && !thePrefs.IsDynUpUseMillisecondPingTolerance()) {
buffer.Format(_T("%.1f | %ims | %i%%"),lastPing.currentLimit/1024.0f, lastPing.latency, lastPing.latency*100/lastPing.lowest);
} else {
buffer.Format(_T("%.1f | %ims"),lastPing.currentLimit/1024.0f, lastPing.latency);
}
} else {
buffer.SetString(lastPing.state);
}
}
statusbar->SetText(buffer,4,0);
}
}
// ZZ:UploadSpeedSense <--
void CemuleDlg::OnCancel()
{
if (*thePrefs.GetMinTrayPTR()){
TrayShow();
ShowWindow(SW_HIDE);
}
else{
ShowWindow(SW_MINIMIZE);
}
ShowTransferRate();
// ZZ:UploadSpeedSense -->
ShowPing();
// ZZ:UploadSpeedSense <--
}
void CemuleDlg::SetActiveDialog(CWnd* dlg)
{
if (dlg == activewnd)
return;
if (activewnd)
activewnd->ShowWindow(SW_HIDE);
dlg->ShowWindow(SW_SHOW);
dlg->SetFocus();
activewnd = dlg;
if (dlg == transferwnd){
if (thePrefs.ShowCatTabInfos())
transferwnd->UpdateCatTabTitles();
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+3);
}
else if (dlg == serverwnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+2);
}
else if (dlg == chatwnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+6);
chatwnd->chatselector.ShowChat();
}
else if (dlg == ircwnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+7);
}
else if (dlg == sharedfileswnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+5);
}
else if (dlg == searchwnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+4);
}
else if (dlg == statisticswnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+8);
statisticswnd->ShowStatistics();
}
else if (dlg == kademliawnd){
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+1);
}
else if (dlg == ChanblardWnd){ //VeryCD
if (thePrefs.GetBrowser())
{
toolbar->PressMuleButton(IDC_TOOLBARBUTTON+12);
statisticswnd->ShowStatistics();
}else
ShellExecute(NULL, NULL, "http://www.verycd.com", NULL, thePrefs.GetAppDir(), SW_SHOWDEFAULT);
}
}
void CemuleDlg::SetStatusBarPartsSize()
{
CRect rect;
statusbar->GetClientRect(&rect);
int ussShift = 0;
if(thePrefs.IsDynUpEnabled())
{
if(thePrefs.IsDynUpUseMillisecondPingTolerance()) {
ussShift = 45;
} else {
ussShift = 90;
}
}
int aiWidths[5] = { rect.right-675-ussShift, rect.right-440-ussShift, rect.right-250-ussShift,rect.right-25-ussShift, -1 };
statusbar->SetParts(5, aiWidths);
}
void CemuleDlg::OnSize(UINT nType, int cx, int cy)
{
CTrayDialog::OnSize(nType, cx, cy);
SetStatusBarPartsSize();
transferwnd->VerifyCatTabSize();
}
void CemuleDlg::ProcessED2KLink(LPCTSTR pszData)
{
try {
CString link2;
CString link;
link2 = pszData;
link2.Replace(_T("%7c"),_T("|"));
link = OptUtf8ToStr(URLDecode(link2));
CED2KLink* pLink = CED2KLink::CreateLinkFromUrl(link);
_ASSERT( pLink !=0 );
switch (pLink->GetKind()) {
case CED2KLink::kFile:
{
CED2KFileLink* pFileLink = pLink->GetFileLink();
_ASSERT(pFileLink !=0);
theApp.downloadqueue->AddFileLinkToDownload(pFileLink,searchwnd->GetSelectedCat());
}
break;
case CED2KLink::kServerList:
{
CED2KServerListLink* pListLink = pLink->GetServerListLink();
_ASSERT( pListLink !=0 );
CString strAddress = pListLink->GetAddress();
if(strAddress.GetLength() != 0)
serverwnd->UpdateServerMetFromURL(strAddress);
}
break;
case CED2KLink::kServer:
{
CString defName;
CED2KServerLink* pSrvLink = pLink->GetServerLink();
_ASSERT( pSrvLink !=0 );
CServer* pSrv = new CServer(pSrvLink->GetPort(), ipstr(pSrvLink->GetIP()));
_ASSERT( pSrv !=0 );
pSrvLink->GetDefaultName(defName);
pSrv->SetListName(defName.GetBuffer());
// Barry - Default all new servers to high priority
if (thePrefs.GetManualHighPrio())
pSrv->SetPreference(SRV_PR_HIGH);
if (!serverwnd->serverlistctrl.AddServer(pSrv,true))
delete pSrv;
else
AddLogLine(true,GetResString(IDS_SERVERADDED), pSrv->GetListName());
}
break;
default:
break;
}
delete pLink;
}
catch(...){
AddLogLine(true, GetResString(IDS_LINKNOTADDED));
ASSERT(0);
}
}
LRESULT CemuleDlg::OnWMData(WPARAM wParam,LPARAM lParam)
{
PCOPYDATASTRUCT data = (PCOPYDATASTRUCT)lParam;
if (data->dwData == OP_ED2KLINK)
{
FlashWindow(true);
if (thePrefs.IsBringToFront())
{
if (IsIconic())
ShowWindow(SW_SHOWNORMAL);
else if (TrayHide())
ShowWindow(SW_SHOW);
else
SetForegroundWindow();
}
ProcessED2KLink((LPCTSTR)data->lpData);
}
else if (data->dwData == OP_CLCOMMAND){
// command line command received
CString clcommand((LPCTSTR)data->lpData);
clcommand.MakeLower();
AddLogLine(true,_T("CLI: %s"),clcommand);
if (clcommand==_T("connect")) {StartConnection(); return true;}
if (clcommand==_T("disconnect")) {theApp.serverconnect->Disconnect(); return true;}
if (clcommand==_T("resume")) {theApp.downloadqueue->StartNextFile(); return true;}
if (clcommand==_T("exit")) {OnClose(); return true;}
if (clcommand==_T("restore")) {RestoreWindow();return true;}
if (clcommand.Left(7).MakeLower()==_T("limits=") && clcommand.GetLength()>8) {
CString down;
CString up=clcommand.Mid(7);
int pos=up.Find(_T(','));
if (pos>0) {
down=up.Mid(pos+1);
up=up.Left(pos);
}
if (down.GetLength()>0) thePrefs.SetMaxDownload(_tstoi(down));
if (up.GetLength()>0) thePrefs.SetMaxUpload(_tstoi(up));
return true;
}
if (clcommand==_T("help") || clcommand==_T("/?")) {
// show usage
return true;
}
if (clcommand==_T("status")) {
CString strBuff;
strBuff.Format(_T("%sstatus.log"),thePrefs.GetAppDir());
FILE* file = _tfsopen(strBuff, _T("wt"), _SH_DENYWR);
if (file){
if (theApp.serverconnect->IsConnected())
strBuff = GetResString(IDS_CONNECTED);
else if (theApp.serverconnect->IsConnecting())
strBuff = GetResString(IDS_CONNECTING);
else
strBuff = GetResString(IDS_DISCONNECTED);
_ftprintf(file, _T("%s\n"), strBuff);
strBuff.Format(GetResString(IDS_UPDOWNSMALL), (float)theApp.uploadqueue->GetDatarate()/1024, (float)theApp.downloadqueue->GetDatarate()/1024);
_ftprintf(file, _T("%s"), strBuff); // next string (getTextList) is already prefixed with '\n'!
_ftprintf(file, _T("%s\n"), transferwnd->downloadlistctrl.getTextList());
fclose(file);
}
return true;
}
// show "unknown command";
}
return true;
}
LRESULT CemuleDlg::OnFileHashed(WPARAM wParam, LPARAM lParam)
{
if (theApp.m_app_state == APP_STATE_SHUTINGDOWN)
return FALSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -