source: src/advtabs/Peers.cpp @ 259

Revision 259, 2.3 KB checked in by Eoin, 13 years ago (diff)

Overview Tab completely reworking.

Line 
1
2#include "../stdAfx.hpp"
3#include "../HaliteWindow.hpp"
4#include "../HaliteListView.hpp"
5
6#include "../global/logger.hpp"
7
8#include "Peers.hpp"
9
10void PeerListView::uiUpdate(const hal::TorrentDetails& tD)
11{
12        TryUpdateLock<listClass> lock(*this);
13        if (lock) 
14        {               
15                peerDetails_.clear();
16               
17                foreach (const hal::TorrentDetail_ptr torrent, tD.selectedTorrents())
18                {
19                        std::copy(torrent->peerDetails().begin(), torrent->peerDetails().end(), 
20                                std::back_inserter(peerDetails_));
21                }
22               
23                std::sort(peerDetails_.begin(), peerDetails_.end());
24               
25                // Wipe details not present
26                for(int i = 0; i < GetItemCount(); /*nothing here*/)
27                {
28                        boost::array<wchar_t, MAX_PATH> ip_address;
29                        GetItemText(i, 0, ip_address.c_array(), MAX_PATH);
30                       
31                        hal::PeerDetail ip(ip_address.data());
32                        hal::PeerDetails::iterator iter = 
33                                std::lower_bound(peerDetails_.begin(), peerDetails_.end(), ip);
34                       
35                        if (iter == peerDetails_.end() || !((*iter) == ip))
36                        {
37                                DeleteItem(i);
38                        }
39                        else
40                        {
41                                SetItemData(i, std::distance(peerDetails_.begin(), iter));
42                                ++i;
43                        }
44                }
45               
46                // Add additional details
47                for (hal::PeerDetails::iterator i=peerDetails_.begin(), e=peerDetails_.end();
48                        i != e; ++i)
49                {                       
50                        LV_FINDINFO findInfo; 
51                        findInfo.flags = LVFI_STRING;
52                        findInfo.psz = const_cast<LPTSTR>((*i).ipAddress.c_str());
53                       
54                        int itemPos = FindItem(&findInfo, -1);
55                        if (itemPos < 0)
56                                itemPos = AddItem(GetItemCount(), 0, (*i).ipAddress.c_str(), 0);
57                       
58                        SetItemData(itemPos, std::distance(peerDetails_.begin(), i));
59                       
60                        SetItemText(itemPos, 1, (*i).country.c_str());
61                       
62                        SetItemText(itemPos, 2, getColumnAdapter(2)->print(*i).c_str());
63                       
64                        SetItemText(itemPos, 3, getColumnAdapter(3)->print(*i).c_str());
65                       
66                        if ((*i).seed)
67                                SetItemText(itemPos, 4, L"Seed");
68                       
69                        SetItemText(itemPos, 5, (*i).client.c_str());
70                       
71                        SetItemText(itemPos, 6, (*i).status.c_str());
72                }
73               
74                ConditionallyDoAutoSort();
75        }
76}
77
78void AdvPeerDialog::uiUpdate(const hal::TorrentDetails& tD)
79{
80        peerList_.uiUpdate(tD);
81}
82
83LRESULT AdvPeerDialog::OnInitDialog(HWND, LPARAM)
84{       
85        peerList_.SubclassWindow(GetDlgItem(IDC_PEERLIST));
86       
87        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);     
88       
89        return 0;
90}
91
92void AdvPeerDialog::OnClose()
93{
94        if(::IsWindow(m_hWnd)) 
95        {
96                ::DestroyWindow(m_hWnd);
97        }
98}
Note: See TracBrowser for help on using the repository browser.