📄 statisticsdlg.cpp
字号:
//this file is part of eMule
//Copyright (C)2002 Merkur ( merkur-@users.sourceforge.net / http://www.emule-project.net )
//
//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either
//version 2 of the License, or (at your option) any later version.
//
//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.
//
//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#include "stdafx.h"
#include "emule.h"
#include "StatisticsDlg.h"
#include "UploadQueue.h"
#include "Statistics.h"
#include "emuledlg.h"
#include "OtherFunctions.h"
#include "WebServer.h"
#include "DownloadQueue.h"
#include "ClientList.h"
#include "Preferences.h"
#include "ListenSocket.h"
#include "ServerList.h"
#include "SharedFileList.h"
#include "UpDownClient.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
extern _CRT_ALLOC_HOOK g_pfnPrevCrtAllocHook;
#endif
// CStatisticsDlg dialog
IMPLEMENT_DYNAMIC(CStatisticsDlg, CDialog)
CStatisticsDlg::CStatisticsDlg(CWnd* pParent /*=NULL*/)
: CResizableDialog(CStatisticsDlg::IDD, pParent) , m_DownloadOMeter( 3 ),m_Statistics(4),m_UploadOMeter(3)
{
m_oldcx=0;
m_oldcy=0;
}
CStatisticsDlg::~CStatisticsDlg()
{
#ifdef _DEBUG
POSITION pos = blockFiles.GetStartPosition();
while (pos != NULL) {
const unsigned char* fileName;
HTREEITEM* pTag;
blockFiles.GetNextAssoc(pos, fileName, pTag);
delete pTag;
}
#endif
}
void CStatisticsDlg::DoDataExchange(CDataExchange* pDX)
{
CResizableDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CExoSliderDlg)
DDX_Control(pDX, IDC_STATTREE, stattree);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStatisticsDlg, CResizableDialog)
//{{AFX_MSG_MAP(CStatisticsDlg)
ON_WM_SHOWWINDOW()
ON_WM_SIZE()
//}}AFX_MSG_MAP
// -khaos--+++> Menu button.
ON_BN_CLICKED(IDC_BNMENU, OnMenuButtonClicked)
// <-----khaos-
ON_WM_SYSCOLORCHANGE()
END_MESSAGE_MAP()
void CStatisticsDlg::OnSysColorChange()
{
CResizableDialog::OnSysColorChange();
SetAllIcons();
}
void CStatisticsDlg::SetAllIcons()
{
InitWindowStyles(this);
CImageList iml;
iml.Create(16, 16, theApp.m_iDfltImageListColorFlags | ILC_MASK, 0, 1);
iml.Add(CTempIconLoader(_T("StatsGeneric"))); // Dots & Arrow (Default icon for stats)
iml.Add(CTempIconLoader(_T("Up1Down1"))); // Transfer
iml.Add(CTempIconLoader(_T("Pref_Connection"))); // Connection
iml.Add(CTempIconLoader(_T("StatsClients"))); // Clients
iml.Add(CTempIconLoader(_T("Pref_Server"))); // Server
iml.Add(CTempIconLoader(_T("SharedFiles"))); // Shared Files
iml.Add(CTempIconLoader(_T("Upload"))); // Transfer > Upload
iml.Add(CTempIconLoader(_T("Download"))); // Transfer > Download
iml.Add(CTempIconLoader(_T("Statistics"))); // Session Sections
iml.Add(CTempIconLoader(_T("StatsCumulative"))); // Cumulative Sections
iml.Add(CTempIconLoader(_T("Pref_Tweak"))); // Records
iml.Add(CTempIconLoader(_T("ConnectedHighHigh"))); // Connection > General
iml.Add(CTempIconLoader(_T("Pref_Scheduler"))); // Time Section
iml.Add(CTempIconLoader(_T("Pref_Statistics"))); // Time > Averages and Projections
iml.Add(CTempIconLoader(_T("StatsDay"))); // Time > Averages and Projections > Daily
iml.Add(CTempIconLoader(_T("StatsMonth"))); // Time > Averages and Projections > Monthly
iml.Add(CTempIconLoader(_T("StatsYear"))); // Time > Averages and Projections > Yearly
iml.Add(CTempIconLoader(_T("HardDisk"))); // Diskspace
stattree.SetImageList(&iml, TVSIL_NORMAL);
imagelistStatTree.DeleteImageList();
imagelistStatTree.Attach(iml.Detach());
COLORREF crBk = GetSysColor(COLOR_WINDOW);
COLORREF crFg = GetSysColor(COLOR_WINDOWTEXT);
LPCTSTR pszSkinProfile = thePrefs.GetSkinProfile();
if (pszSkinProfile != NULL && pszSkinProfile[0] != _T('\0'))
{
TCHAR szColor[MAX_PATH];
GetPrivateProfileString(_T("Colors"), _T("StatisticsTvBk"), _T(""), szColor, ARRSIZE(szColor), pszSkinProfile);
if (szColor[0] == _T('\0'))
GetPrivateProfileString(_T("Colors"), _T("DefLvBk"), _T(""), szColor, ARRSIZE(szColor), pszSkinProfile);
if (szColor[0] != _T('\0'))
{
UINT red, grn, blu;
int iVals = _stscanf(szColor, _T("%i , %i , %i"), &red, &grn, &blu);
if (iVals == 3)
crBk = RGB(red, grn, blu);
}
GetPrivateProfileString(_T("Colors"), _T("StatisticsTvFg"), _T(""), szColor, ARRSIZE(szColor), pszSkinProfile);
if (szColor[0] == _T('\0'))
GetPrivateProfileString(_T("Colors"), _T("DefLvFg"), _T(""), szColor, ARRSIZE(szColor), pszSkinProfile);
if (szColor[0] != _T('\0'))
{
UINT red, grn, blu;
int iVals = _stscanf(szColor, _T("%i , %i , %i"), &red, &grn, &blu);
if (iVals == 3)
crFg = RGB(red, grn, blu);
}
}
stattree.SetBkColor(crBk);
stattree.SetTextColor(crFg);
}
BOOL CStatisticsDlg::OnInitDialog()
{
CResizableDialog::OnInitDialog();
EnableWindow(FALSE);
SetAllIcons();
Localize();
if (theApp.emuledlg->m_fontMarlett.m_hObject){
GetDlgItem(IDC_BNMENU)->SetFont(&theApp.emuledlg->m_fontMarlett);
GetDlgItem(IDC_BNMENU)->SetWindowText(_T("6")); // show a down-arrow
}
CreateMyTree();
// <-----khaos- End Additions
#ifdef _DEBUG
if (g_pfnPrevCrtAllocHook){
h_debug = stattree.InsertItem( _T("Debug info") );stattree.SetItemData(h_debug,0);
h_blocks = stattree.InsertItem(_T("Blocks"),h_debug);stattree.SetItemData(h_blocks,1);
debug1 = stattree.InsertItem(_T("Free"),h_blocks);stattree.SetItemData(debug1,1);
debug2 = stattree.InsertItem(_T("Normal"),h_blocks);stattree.SetItemData(debug2,1);
debug3 = stattree.InsertItem(_T("CRT"),h_blocks);stattree.SetItemData(debug3,1);
debug4 = stattree.InsertItem(_T("Ignore"),h_blocks);stattree.SetItemData(debug4,1);
debug5 = stattree.InsertItem(_T("Client"),h_blocks);stattree.SetItemData(debug5,1);
stattree.Expand(h_debug,TVE_EXPAND);
stattree.Expand(h_blocks,TVE_EXPAND);
}
#endif
// Setup download-scope
CRect rect;
GetDlgItem(IDC_SCOPE_D)->GetWindowRect(rect) ;
ScreenToClient(rect) ;
m_DownloadOMeter.Create(WS_VISIBLE | WS_CHILD, rect, this) ;
m_DownloadOMeter.SetRange(0, thePrefs.GetMaxGraphDownloadRate()+4, 0) ;
m_DownloadOMeter.SetRange(0, thePrefs.GetMaxGraphDownloadRate()+4, 1) ;
m_DownloadOMeter.SetRange(0, thePrefs.GetMaxGraphDownloadRate()+4, 2) ;
m_DownloadOMeter.SetYUnits(GetResString(IDS_KBYTESEC)) ;
// Setup upload-scope
GetDlgItem(IDC_SCOPE_U)->GetWindowRect(rect) ;
ScreenToClient(rect) ;
m_UploadOMeter.Create(WS_VISIBLE | WS_CHILD, rect, this) ;
m_UploadOMeter.SetRange(0, thePrefs.GetMaxGraphUploadRate()+4, 0) ;
m_UploadOMeter.SetRange(0, thePrefs.GetMaxGraphUploadRate()+4, 1) ;
m_UploadOMeter.SetRange(0, thePrefs.GetMaxGraphUploadRate()+4, 2) ;
m_UploadOMeter.SetYUnits(GetResString(IDS_KBYTESEC)) ;
// Setup additional graph-scope
GetDlgItem(IDC_STATSSCOPE)->GetWindowRect(rect) ;
ScreenToClient(rect) ;
m_Statistics.Create(WS_VISIBLE | WS_CHILD, rect, this) ;
m_Statistics.SetRanges(0, thePrefs.GetStatsMax()) ;
m_Statistics.autofitYscale=false;
// -khaos--+++> Set the trend ratio of the Active Connections trend in the Connection Statistics scope.
m_Statistics.SetTrendRatio(0, thePrefs.GetStatsConnectionsGraphRatio());
// <-----khaos-
m_Statistics.SetYUnits(_T(""));
m_Statistics.SetXUnits(GetResString(IDS_TIME));
RepaintMeters();
m_Statistics.SetBackgroundColor(thePrefs.GetStatsColor(0)) ;
m_Statistics.SetGridColor(thePrefs.GetStatsColor(1)) ;
m_DownloadOMeter.InvalidateCtrl();
m_UploadOMeter.InvalidateCtrl();
m_Statistics.InvalidateCtrl();
if (thePrefs.GetStatsInterval()==0) GetDlgItem(IDC_STATTREE)->EnableWindow(false);
UpdateData(FALSE);
EnableWindow( TRUE );
m_ilastMaxConnReached = 0;
AddAnchor(IDC_STATTREE,TOP_LEFT, BOTTOM_LEFT );
AddAnchor(IDC_STATIC_CONNSTATS,BOTTOM_LEFT);
AddAnchor(m_Led3[0],BOTTOM_LEFT);
AddAnchor(IDC_STATIC_S0,BOTTOM_LEFT);
AddAnchor(m_Led3[1],BOTTOM_LEFT);
AddAnchor(IDC_STATIC_S2,BOTTOM_LEFT);
AddAnchor(m_Led3[3],BOTTOM_LEFT);
AddAnchor(IDC_STATIC_S1,BOTTOM_LEFT);
AddAnchor(m_Statistics,BOTTOM_LEFT);
AddAnchor(m_DownloadOMeter, TOP_LEFT, CSize(100,50) );
AddAnchor(m_UploadOMeter,CSize(0,50), CSize(100,100) );
AddAnchor(m_Led2[0],CSize(0,50));
AddAnchor(m_Led2[1],CSize(0,50));
AddAnchor(m_Led2[2],CSize(0,50));
AddAnchor(IDC_STATIC_U,CSize(0,50));
AddAnchor(IDC_STATIC_U2,CSize(0,50));
AddAnchor(IDC_TIMEAVG2,CSize(0,50));
AddAnchor(IDC_STATIC_U3,CSize(0,50));
RepaintMeters();
ShowStatistics(true);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -