source: src/advtabs/Peers.hpp @ 345

Revision 345, 4.2 KB checked in by Eoin, 12 years ago (diff)

Minor renaming and attempts to decouple GUI from Torrents.

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 hal::IniBase<PeerListView>,
22        private boost::noncopyable
23{
24protected:
25        typedef PeerListView thisClass;
26        typedef hal::IniBase<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 int compare(pD& l, pD& r)       { return hal::compare(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 int compare(pD& l, pD& r)       { return hal::compare(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        void uiUpdate(const hal::TorrentDetails& tD);
127       
128private:
129        hal::PeerDetails peerDetails_;
130};
131
132class AdvPeerDialog :
133        public CHalTabPageImpl<AdvPeerDialog>,
134        public CHaliteDialogBase<AdvPeerDialog>,
135        public CDialogResize<AdvPeerDialog>
136{
137protected:
138        typedef AdvPeerDialog thisClass;
139        typedef CHalTabPageImpl<thisClass> baseClass;
140        typedef CDialogResize<thisClass> resizeClass;
141        typedef CHaliteDialogBase<AdvPeerDialog> dialogBaseClass;
142
143public:
144        enum { IDD = IDD_ADVPEER };
145
146        AdvPeerDialog(HaliteWindow& halWindow) :
147                dialogBaseClass(halWindow)
148        {}
149
150        BOOL PreTranslateMessage(MSG* pMsg)
151        {
152                return this->IsDialogMessage(pMsg);
153        }
154
155        BEGIN_MSG_MAP_EX(thisClass)
156                MSG_WM_INITDIALOG(OnInitDialog)
157                MSG_WM_CLOSE(OnClose)
158       
159                if (uMsg == WM_FORWARDMSG)
160                        if (PreTranslateMessage((LPMSG)lParam)) return TRUE;
161
162                CHAIN_MSG_MAP(resizeClass)
163                CHAIN_MSG_MAP(baseClass)
164                REFLECT_NOTIFICATIONS()
165        END_MSG_MAP()
166
167        BEGIN_DLGRESIZE_MAP(thisClass)
168                DLGRESIZE_CONTROL(IDC_PEERLIST, DLSZ_SIZE_X|DLSZ_SIZE_Y)
169        END_DLGRESIZE_MAP()
170
171        LRESULT OnInitDialog(HWND, LPARAM);
172        void OnClose();
173       
174        void uiUpdate(const hal::TorrentDetails& tD);
175
176protected:
177        PeerListView peerList_;
178};
Note: See TracBrowser for help on using the repository browser.