00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "Downloads_Bittorrent_Peers.h"
00009
00010 #ifdef _DEBUG
00011 #define new DEBUG_NEW
00012 #undef THIS_FILE
00013 static char THIS_FILE[] = __FILE__;
00014 #endif
00015
00016 CDownloads_Bittorrent_Peers::CDownloads_Bittorrent_Peers()
00017 {
00018 m_bDldChanged = false;
00019 }
00020
00021 CDownloads_Bittorrent_Peers::~CDownloads_Bittorrent_Peers()
00022 {
00023 }
00024
00025 BEGIN_MESSAGE_MAP(CDownloads_Bittorrent_Peers, CListCtrl)
00026
00027 ON_WM_SHOWWINDOW()
00028 ON_COMMAND(ID_UPDATE, OnCmdUpdate)
00029
00030 END_MESSAGE_MAP()
00031
00032 BOOL CDownloads_Bittorrent_Peers::Create(CWnd *pwndParent)
00033 {
00034 CRect rc (0, 0, 50, 50);
00035
00036 if (FALSE == CListCtrl::Create (WS_CHILD | LVS_REPORT | LVS_SINGLESEL | LVS_NOSORTHEADER,
00037 rc, pwndParent, 0x1fa1))
00038 return FALSE;
00039
00040 SetExtendedStyle (LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);
00041
00042 InsertColumn (0, "", LVCFMT_LEFT, 50);
00043 InsertColumn (1, "", LVCFMT_LEFT, 50);
00044 InsertColumn (2, "", LVCFMT_LEFT, 150);
00045 InsertColumn (3, "", LVCFMT_LEFT, 150);
00046
00047 return TRUE;
00048 }
00049
00050 void CDownloads_Bittorrent_Peers::set_ActiveDownload(vmsDownloadSmartPtr dld)
00051 {
00052 m_dld = dld;
00053 if (dld == NULL)
00054 return;
00055 m_bDldChanged = true;
00056 UpdateStat ();
00057 }
00058
00059 void CDownloads_Bittorrent_Peers::UpdateStat()
00060 {
00061 if (IsWindowVisible () == FALSE)
00062 return;
00063
00064 vmsBtDownloadPeerInfoList *p;
00065 p = m_dld->pMgr->GetBtDownloadMgr ()->get_PeerInfoList ();
00066 if (p == NULL)
00067 {
00068 DeleteAllItems ();
00069 return;
00070 }
00071
00072 if (p->UpdateList () || m_bDldChanged)
00073 {
00074 m_bDldChanged = false;
00075 DeleteAllItems ();
00076
00077 for (int i = 0; i < p->get_PeerCount (); i++)
00078 {
00079 vmsBtDownloadPeerInfo *peer = p->get_Peer (i);
00080
00081 char sz [100];
00082 peer->get_Ip (sz);
00083 InsertItem (i, sz);
00084
00085 peer->get_Client (sz);
00086 SetItemText (i, 1, sz);
00087 }
00088
00089 if (p->get_PeerCount ())
00090 {
00091 SetColumnWidth (0, LVSCW_AUTOSIZE);
00092 SetColumnWidth (1, LVSCW_AUTOSIZE);
00093 for (int i = 0; i < 2; i++)
00094 {
00095 if (GetColumnWidth (i) < 50)
00096 SetColumnWidth (i, 50);
00097 }
00098 }
00099 }
00100
00101 UpdatePeersDetails ();
00102 }
00103
00104 void CDownloads_Bittorrent_Peers::UpdatePeersDetails()
00105 {
00106 vmsBtDownloadPeerInfoList *p;
00107 p = m_dld->pMgr->GetBtDownloadMgr ()->get_PeerInfoList ();
00108 if (p == NULL)
00109 return;
00110
00111 if (GetItemCount () != p->get_PeerCount ())
00112 return;
00113
00114 for (int i = 0; i < p->get_PeerCount (); i++)
00115 {
00116 vmsBtDownloadPeerInfo *peer = p->get_Peer (i);
00117
00118 CString str;
00119
00120 str.Format ("%s, %s/%s", BytesToString (peer->get_BytesDownloaded ()),
00121 BytesToString (peer->get_DownloadSpeed ()), LS (L_S));
00122 SetItemText (i, 2, str);
00123
00124 str.Format ("%s, %s/%s", BytesToString (peer->get_BytesUploaded ()),
00125 BytesToString (peer->get_UploadSpeed ()), LS (L_S));
00126 SetItemText (i, 3, str);
00127 }
00128 }
00129
00130 void CDownloads_Bittorrent_Peers::OnShowWindow(BOOL bShow, UINT nStatus)
00131 {
00132 CListCtrl::OnShowWindow(bShow, nStatus);
00133 PostMessage (WM_COMMAND, ID_UPDATE);
00134 }
00135
00136 void CDownloads_Bittorrent_Peers::OnCmdUpdate()
00137 {
00138 UpdateStat ();
00139 }
00140
00141 void CDownloads_Bittorrent_Peers::ApplyLanguage()
00142 {
00143 HDITEM item;
00144 item.mask = HDI_TEXT;
00145
00146 item.pszText = (LPSTR) "IP";
00147 GetHeaderCtrl ()->SetItem (0, &item);
00148
00149 item.pszText = (LPSTR) LS (L_CLIENT);
00150 GetHeaderCtrl ()->SetItem (1, &item);
00151
00152 item.pszText = (LPSTR) LS (L_DOWNLOADED);
00153 GetHeaderCtrl ()->SetItem (2, &item);
00154
00155 item.pszText = (LPSTR) LS (L_UPLOADED);
00156 GetHeaderCtrl ()->SetItem (3, &item);
00157 }