source: trunk/src/advtabs/Peers.hpp @ 659

Revision 659, 3.8 KB checked in by Eoin, 11 years ago (diff)

Peer list sorting fixed and so more naming conventions consistency work.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
3// Distributed under the Boost Software License, Version 1.0.
4//    (See accompanying file LICENSE_1_0.txt or copy at
5//          http://www.boost.org/LICENSE_1_0.txt)
6
7#pragma once
8
9#include "stdAfx.hpp"
10#include "Halite.hpp"
11
12#include "DdxEx.hpp"
13#include "global/string_conv.hpp"
14
15#include "../HaliteTabPage.hpp"
16#include "../HaliteDialogBase.hpp"
17#include "../HaliteListManager.hpp"
18
19class PeerListView :
20        public CHaliteSortListViewCtrl<PeerListView>,
21        public hal::IniBase<PeerListView>,
22        private boost::noncopyable
23{
24protected:
25        typedef PeerListView thisClass;
26        typedef hal::IniBase<thisClass> iniClass;
27        typedef CHaliteSortListViewCtrl<thisClass> listClass;
28
29        friend class listClass;
30       
31public: 
32        enum { 
33                LISTVIEW_ID_MENU = 0,
34                LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_ADV,
35                LISTVIEW_ID_COLUMNWIDTHS = 0
36        };
37       
38        BEGIN_MSG_MAP_EX(thisClass)
39                MSG_WM_DESTROY(OnDestroy)
40                REFLECTED_NOTIFY_CODE_HANDLER(SLVN_SORTCHANGED, OnSortChanged)
41
42                CHAIN_MSG_MAP(listClass)
43                DEFAULT_REFLECTION_HANDLER()
44        END_MSG_MAP()
45
46        PeerListView(HaliteWindow& halWindow) :
47                iniClass("listviews/advPeers", "PeerListView"),
48                halite_window_(halWindow)
49        {}
50       
51        void saveSettings()
52        {
53                GetListViewDetails();
54                save_to_ini();
55        }
56       
57        bool SubclassWindow(HWND hwnd)
58        {
59                if(!listClass::SubclassWindow(hwnd))
60                        return false;
61
62                InitialSetup(); 
63               
64                std::vector<wstring> names;     
65                wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
66
67                // "Peer;Country;Download;Upload;Type;Client,Status"
68                boost::split(names, column_names, boost::is_any_of(L";"));
69               
70                array<int, 7> widths = {100,20,70,70,70,100,200};
71                array<int, 7> order = {0,1,2,3,4,5,6};
72                array<bool, 7> visible = {true,true,true,true,true,true,true};
73
74                for (int i=0, e=7; i < e; ++i)
75                {
76                        AddColumn(names[i].c_str(), i, visible[i], widths[i]);
77                }       
78                                       
79                load_from_ini();               
80               
81                SetColumnSortType(2, hal::peer_detail::speed_down_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);           
82                SetColumnSortType(3, hal::peer_detail::speed_up_e + (WTL::LVCOLSORT_LAST+1+hal::peer_detail::ip_address_e), NULL);
83               
84                return true;
85        }
86       
87        void OnDestroy()
88        {
89                saveSettings();
90        }
91
92        LRESULT OnSortChanged(int, LPNMHDR pnmh, BOOL&);
93       
94        friend class boost::serialization::access;
95        template<class Archive>
96        void serialize(Archive& ar, const unsigned int version)
97        {
98                ar & boost::serialization::make_nvp("listview", 
99                        boost::serialization::base_object<listClass>(*this));
100        }
101
102        void uiUpdate(const hal::torrent_details_manager& tD);
103       
104private:
105        hal::peer_details_vec peer_details_;
106        HaliteWindow& halite_window_;
107};
108
109class AdvPeerDialog :
110        public CHalTabPageImpl<AdvPeerDialog>,
111        public CHaliteDialogBase<AdvPeerDialog>,
112        public WTL::CDialogResize<AdvPeerDialog>
113{
114protected:
115        typedef AdvPeerDialog thisClass;
116        typedef CHalTabPageImpl<thisClass> baseClass;
117        typedef WTL::CDialogResize<thisClass> resizeClass;
118        typedef CHaliteDialogBase<AdvPeerDialog> dialogBaseClass;
119
120public:
121        enum { IDD = HAL_ADVPEER };
122
123        AdvPeerDialog(HaliteWindow& halWindow) :
124                dialogBaseClass(halWindow),
125                peerList_(halWindow)
126        {}
127
128        BOOL PreTranslateMessage(MSG* pMsg)
129        {
130                return this->IsDialogMessage(pMsg);
131        }
132
133        BEGIN_MSG_MAP_EX(thisClass)
134                MSG_WM_INITDIALOG(OnInitDialog)
135                MSG_WM_CLOSE(OnClose)
136       
137                if (uMsg == WM_FORWARDMSG)
138                        if (PreTranslateMessage((LPMSG)lParam)) return TRUE;
139
140                CHAIN_MSG_MAP(dialogBaseClass)
141                CHAIN_MSG_MAP(resizeClass)
142                CHAIN_MSG_MAP(baseClass)
143                REFLECT_NOTIFICATIONS()
144        END_MSG_MAP()
145
146        BEGIN_DLGRESIZE_MAP(thisClass)
147                DLGRESIZE_CONTROL(HAL_PEERLIST, DLSZ_SIZE_X|DLSZ_SIZE_Y)
148        END_DLGRESIZE_MAP()
149
150        LRESULT OnInitDialog(HWND, LPARAM);
151        void OnClose();
152        void uiUpdate(const hal::torrent_details_manager& tD);
153
154protected:
155        PeerListView peerList_;
156};
Note: See TracBrowser for help on using the repository browser.