source: src/HaliteListView.hpp @ 265

Revision 265, 5.7 KB checked in by Eoin, 13 years ago (diff)

Overview layout finalized for next snapshot.

Line 
1
2#pragma once
3
4#include "stdAfx.hpp"
5#include "global/string_conv.hpp"
6
7#include <boost/array.hpp>
8#include <boost/signals.hpp>
9#include <boost/serialization/vector.hpp>
10
11#include "HaliteIni.hpp"
12#include "HaliteListViewCtrl.hpp"
13#include "HaliteSortListViewCtrl.hpp"
14
15class HaliteWindow;
16
17class HaliteListViewCtrl :
18        public CHaliteSortListViewCtrl<HaliteListViewCtrl, const hal::TorrentDetail_ptr>,
19        private CHaliteIni<HaliteListViewCtrl>,
20        private boost::noncopyable
21{
22protected:
23        typedef CHaliteIni<HaliteListViewCtrl> iniClass;
24        typedef CHaliteSortListViewCtrl<HaliteListViewCtrl, const hal::TorrentDetail_ptr> listClass;
25        typedef const hal::TorrentDetail_ptr tD;
26
27        friend class listClass;
28       
29        struct ColumnAdapters
30        {
31       
32        typedef listClass::ColumnAdapter ColAdapter_t;
33       
34        struct Filename : public ColAdapter_t
35        {       
36                virtual bool less(tD& l, tD& r) { return l->filename() < r->filename(); }               
37                virtual std::wstring print(tD& t) { return t->filename(); }             
38        };
39       
40        struct State : public ColAdapter_t
41        {       
42                virtual bool less(tD& l, tD& r) { return l->state() < r->state(); }             
43                virtual std::wstring print(tD& t) { return t->state(); }               
44        };
45       
46        struct Tracker : public ColAdapter_t
47        {
48                virtual bool less(tD& l, tD& r) { return l->currentTracker() < r->currentTracker(); }           
49                virtual std::wstring print(tD& t) { return t->currentTracker(); }               
50        };
51       
52        struct SpeedDown : public ColAdapter_t
53        {
54                virtual bool less(tD& l, tD& r) { return l->speed().first < r->speed().first; }         
55                virtual std::wstring print(tD& t) 
56                {
57                        return (wformat(L"%1$.2fkb/s") % (t->speed().first/1024)).str(); 
58                }               
59        };
60       
61        struct SpeedUp : public ColAdapter_t
62        {
63                virtual bool less(tD& l, tD& r) { return l->speed().second < r->speed().second; }               
64                virtual std::wstring print(tD& t) 
65                {
66                        return (wformat(L"%1$.2fkb/s") % (t->speed().second/1024)).str(); 
67                }               
68        };
69
70        struct Completion : public ColAdapter_t
71        {
72                virtual bool less(tD& l, tD& r) { return l->completion() < r->completion(); }           
73                virtual std::wstring print(tD& t) 
74                {
75                        return (wformat(L"%1$.2f%%") % (t->completion()*100)).str(); 
76                }               
77        };
78
79        struct Peers : public ColAdapter_t
80        {
81                virtual bool less(tD& l, tD& r) { return l->peers() < r->peers(); }             
82                virtual std::wstring print(tD& t) 
83                {
84                        return (wformat(L"%1% (%2%)") % t->peers() % t->peersConnected()).str(); 
85                }
86        };
87       
88        struct Seeds : public ColAdapter_t
89        {
90                virtual bool less(tD& l, tD& r) { return l->seeds() < r->seeds(); }                             
91                virtual std::wstring print(tD& t) 
92                {
93                        return (wformat(L"%1% (%2%)") % t->seeds() % t->seedsConnected()).str(); 
94                }       
95        };
96       
97        struct ETA : public ColAdapter_t
98        {
99                virtual bool less(tD& l, tD& r) { return l->estimatedTimeLeft() < r->estimatedTimeLeft(); }             
100                virtual std::wstring print(tD& t) 
101                { 
102                        if (!t->estimatedTimeLeft().is_special())
103                        {
104                                return hal::from_utf8(
105                                        boost::posix_time::to_simple_string(t->estimatedTimeLeft()));
106                        }
107                        else
108                        {
109                                return L"∞";           
110                        }
111                }               
112        };
113       
114        struct UpdateTrackerIn : public ColAdapter_t
115        {
116                virtual bool less(tD& l, tD& r) { return l->updateTrackerIn() < r->updateTrackerIn(); }         
117                virtual std::wstring print(tD& t) 
118                { 
119                        if (!t->updateTrackerIn().is_special())
120                        {
121                                return hal::from_utf8(
122                                        boost::posix_time::to_simple_string(t->updateTrackerIn()));
123                        }
124                        else
125                        {
126                                return L"∞";           
127                        }
128                }               
129        };
130       
131        struct Ratio : public ColAdapter_t
132        {
133                virtual bool less(tD& l, tD& r) { return l->ratio() < r->ratio(); }             
134                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->ratio()); }         
135        };
136       
137        struct DistributedCopies : public ColAdapter_t
138        {
139                virtual bool less(tD& l, tD& r) { return l->distributedCopies() < r->distributedCopies(); }             
140                virtual std::wstring print(tD& t) 
141                { 
142                        float copies = t->distributedCopies();
143                       
144                        if (copies < 0)
145                                return L"Seeding"; 
146                        else
147                                return (wformat(L"%1$.2f") % copies).str();             
148                }               
149        };
150       
151        };
152
153public:
154        enum { 
155                LISTVIEW_ID_MENU = IDR_LISTVIEW_MENU,
156                LISTVIEW_ID_COLUMNNAMES = HAL_LISTVIEW_COLUMNS,
157                LISTVIEW_ID_COLUMNWIDTHS = HAL_LISTVIEW_DEFAULTS
158        };
159
160        HaliteListViewCtrl(HaliteWindow& HalWindow);
161
162        BEGIN_MSG_MAP_EX(HaliteListViewCtrl)
163                MSG_WM_SHOWWINDOW(OnShowWindow)
164                MSG_WM_DESTROY(OnDestroy)
165
166                COMMAND_ID_HANDLER(ID__LVM_PAUSE, OnPause)
167                COMMAND_ID_HANDLER(ID_LVM_STOP, OnStop)
168                COMMAND_ID_HANDLER(ID_LVM_RESUME, OnResume)
169                COMMAND_ID_HANDLER(ID_LVM_REMOVE_T, OnRemove)
170                COMMAND_ID_HANDLER(ID_LVM_REMOVE_TD, OnRemoveWipeFiles)
171
172                CHAIN_MSG_MAP(listClass)
173                DEFAULT_REFLECTION_HANDLER()
174        END_MSG_MAP()
175
176        void OnShowWindow(UINT, INT);
177        void OnDestroy();
178        void saveSettings();
179        void uiUpdate(const hal::TorrentDetails& allTorrents); 
180
181        LRESULT OnPause(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
182        LRESULT OnStop(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
183        LRESULT OnResume(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
184        LRESULT OnRemoveFocused(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
185        LRESULT OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
186        LRESULT OnRemoveWipeFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
187
188    friend class boost::serialization::access;
189    template<class Archive>
190    void serialize(Archive& ar, const unsigned int version)
191    {
192                ar & boost::serialization::make_nvp("listview", boost::serialization::base_object<listClass>(*this));
193    }
194       
195        tD CustomItemConversion(LVCompareParam* param, int iSortCol);
196
197private:
198        void OnAttach();
199        void OnDetach();
200       
201        enum { NumberOfColumns_s = 12 };
202       
203        HaliteWindow& halWindow_;
204};
205
206typedef HaliteListViewCtrl::SelectionManager ListViewManager;
Note: See TracBrowser for help on using the repository browser.