source: src/advtabs/Peers.hpp @ 268

Revision 268, 4.4 KB checked in by Eoin, 12 years ago (diff)

Added copyright eventually.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2007.
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 "../global/string_conv.hpp"
11
12#include "../DdxEx.hpp"
13#include "../Halite.hpp"
14
15#include "../HaliteTabPage.hpp"
16#include "../HaliteDialogBase.hpp"
17#include "../HaliteListManager.hpp"
18
19class PeerListView :
20        public CHaliteSortListViewCtrl<PeerListView, const hal::PeerDetail>,
21        public CHaliteIni<PeerListView>,
22        private boost::noncopyable
23{
24protected:
25        typedef PeerListView thisClass;
26        typedef CHaliteIni<thisClass> iniClass;
27        typedef CHaliteSortListViewCtrl<thisClass, const hal::PeerDetail> listClass;
28        typedef const hal::PeerDetail pD;
29
30        friend class listClass;
31       
32        struct ColumnAdapters
33        {
34       
35        typedef listClass::ColumnAdapter ColAdapter_t;
36       
37        struct SpeedDown : public ColAdapter_t
38        {
39                virtual bool less(pD& l, pD& r) { return l.speed.first < r.speed.first; }               
40                virtual std::wstring print(pD& p) 
41                {
42                        return (wformat(L"%1$.2fkb/s") % (p.speed.first/1024)).str(); 
43                }               
44        };
45       
46        struct SpeedUp : public ColAdapter_t
47        {
48                virtual bool less(pD& l, pD& r) { return l.speed.second < r.speed.second; }             
49                virtual std::wstring print(pD& p) 
50                {
51                        return (wformat(L"%1$.2fkb/s") % (p.speed.second/1024)).str(); 
52                }               
53        };
54       
55        };
56
57public: 
58        enum { 
59                LISTVIEW_ID_MENU = 0,
60                LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_ADV,
61                LISTVIEW_ID_COLUMNWIDTHS = 0
62        };
63       
64        BEGIN_MSG_MAP_EX(thisClass)
65                MSG_WM_DESTROY(OnDestroy)
66
67                CHAIN_MSG_MAP(listClass)
68                DEFAULT_REFLECTION_HANDLER()
69        END_MSG_MAP()
70
71        thisClass() :
72                iniClass("listviews/advPeers", "PeerListView"),
73                listClass(true,false,false)
74        {                                       
75                std::vector<wstring> names;     
76                wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
77
78                // "Peer;Country;Download;Upload;Type;Client,Status"
79                boost::split(names, column_names, boost::is_any_of(L";"));
80               
81                array<int, 7> widths = {100,20,70,70,70,100,200};
82                array<int, 7> order = {0,1,2,3,4,5,6};
83                array<bool, 7> visible = {true,true,true,true,true,true,true};
84               
85                SetDefaults(names, widths, order, visible, true);
86                Load();
87        }
88       
89        void saveSettings()
90        {
91                GetListViewDetails();
92                save();
93        }
94       
95        bool SubclassWindow(HWND hwnd)
96        {
97                if(!listClass::SubclassWindow(hwnd))
98                        return false;
99                                       
100                ApplyDetails();
101               
102                SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown());
103                SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp());
104               
105                return true;
106        }
107       
108        void OnDestroy()
109        {
110                saveSettings();
111        }
112       
113        friend class boost::serialization::access;
114        template<class Archive>
115        void serialize(Archive& ar, const unsigned int version)
116        {
117                ar & boost::serialization::make_nvp("listview", 
118                        boost::serialization::base_object<listClass>(*this));
119        }
120       
121        pD CustomItemConversion(LVCompareParam* param, int iSortCol)
122        {                       
123                return peerDetails_[param->dwItemData];
124        }               
125       
126        int CustomItemComparision(pD left, pD right, int iSortCol)
127        {
128                ColumnAdapter* pCA = getColumnAdapter(iSortCol);
129               
130                if (pCA)
131                        return (pCA->less(left, right)) ? 1 : -1;
132                else 
133                        return 0;
134        }
135       
136        void uiUpdate(const hal::TorrentDetails& tD);
137       
138private:
139        hal::PeerDetails peerDetails_;
140};
141
142class AdvPeerDialog :
143        public CHalTabPageImpl<AdvPeerDialog>,
144        public CHaliteDialogBase<AdvPeerDialog>,
145        public CDialogResize<AdvPeerDialog>
146{
147protected:
148        typedef AdvPeerDialog thisClass;
149        typedef CHalTabPageImpl<thisClass> baseClass;
150        typedef CDialogResize<thisClass> resizeClass;
151        typedef CHaliteDialogBase<AdvPeerDialog> dialogBaseClass;
152
153public:
154        enum { IDD = IDD_ADVPEER };
155
156        AdvPeerDialog(HaliteWindow& halWindow) :
157                dialogBaseClass(halWindow)
158        {}
159
160        BOOL PreTranslateMessage(MSG* pMsg)
161        {
162                return this->IsDialogMessage(pMsg);
163        }
164
165        BEGIN_MSG_MAP_EX(thisClass)
166                MSG_WM_INITDIALOG(OnInitDialog)
167                MSG_WM_CLOSE(OnClose)
168       
169                if (uMsg == WM_FORWARDMSG)
170                        if (PreTranslateMessage((LPMSG)lParam)) return TRUE;
171
172                CHAIN_MSG_MAP(resizeClass)
173                CHAIN_MSG_MAP(baseClass)
174                REFLECT_NOTIFICATIONS()
175        END_MSG_MAP()
176
177        BEGIN_DLGRESIZE_MAP(thisClass)
178                DLGRESIZE_CONTROL(IDC_PEERLIST, DLSZ_SIZE_X|DLSZ_SIZE_Y)
179        END_DLGRESIZE_MAP()
180
181        LRESULT OnInitDialog(HWND, LPARAM);
182        void OnClose();
183       
184        void uiUpdate(const hal::TorrentDetails& tD);
185
186protected:
187        PeerListView peerList_;
188};
Note: See TracBrowser for help on using the repository browser.