source: src/HaliteListView.hpp @ 252

Revision 252, 5.6 KB checked in by Eoin, 13 years ago (diff)
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        public 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->seeds(); }             
82                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->peers()); }         
83        };
84       
85        struct Seeds : public ColAdapter_t
86        {
87                virtual bool less(tD& l, tD& r) { return l->distributedCopies() < r->distributedCopies(); }             
88                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->seeds()); }         
89        };
90       
91        struct ETA : public ColAdapter_t
92        {
93                virtual bool less(tD& l, tD& r) { return l->estimatedTimeLeft() < r->estimatedTimeLeft(); }             
94                virtual std::wstring print(tD& t) 
95                { 
96                        if (!t->estimatedTimeLeft().is_special())
97                        {
98                                return hal::from_utf8(
99                                        boost::posix_time::to_simple_string(t->estimatedTimeLeft()));
100                        }
101                        else
102                        {
103                                return L"∞";           
104                        }
105                }               
106        };
107       
108        struct UpdateTrackerIn : public ColAdapter_t
109        {
110                virtual bool less(tD& l, tD& r) { return l->updateTrackerIn() < r->updateTrackerIn(); }         
111                virtual std::wstring print(tD& t) 
112                { 
113                        if (!t->updateTrackerIn().is_special())
114                        {
115                                return hal::from_utf8(
116                                        boost::posix_time::to_simple_string(t->updateTrackerIn()));
117                        }
118                        else
119                        {
120                                return L"∞";           
121                        }
122                }               
123        };
124       
125        struct Ratio : public ColAdapter_t
126        {
127                virtual bool less(tD& l, tD& r) { return l->ratio() < r->ratio(); }             
128                virtual std::wstring print(tD& t) { return lexical_cast<wstring>(t->ratio()); }         
129        };
130       
131        struct DistributedCopies : public ColAdapter_t
132        {
133                virtual bool less(tD& l, tD& r) { return l->distributedCopies() < r->distributedCopies(); }             
134                virtual std::wstring print(tD& t) 
135                { 
136                        float copies = t->distributedCopies();
137                       
138                        if (copies < 0)
139                                return L"Seeding"; 
140                        else
141                                return lexical_cast<wstring>(copies);           
142                }               
143        };
144       
145        };
146
147public:
148        enum { 
149                LISTVIEW_ID_MENU = IDR_LISTVIEW_MENU,
150                LISTVIEW_ID_COLUMNNAMES = HAL_LISTVIEW_COLUMNS,
151                LISTVIEW_ID_COLUMNWIDTHS = HAL_LISTVIEW_DEFAULTS
152        };
153
154        HaliteListViewCtrl(HaliteWindow& HalWindow);
155
156        BEGIN_MSG_MAP_EX(HaliteListViewCtrl)
157                MSG_WM_SHOWWINDOW(OnShowWindow)
158                MSG_WM_DESTROY(OnDestroy)
159
160                COMMAND_ID_HANDLER(ID__LVM_PAUSE, OnPause)
161                COMMAND_ID_HANDLER(ID_LVM_STOP, OnStop)
162                COMMAND_ID_HANDLER(ID_LVM_RESUME, OnResume)
163                COMMAND_ID_HANDLER(ID_LVM_REMOVE_T, OnRemove)
164                COMMAND_ID_HANDLER(ID_LVM_REMOVE_TD, OnRemoveWipeFiles)
165
166                CHAIN_MSG_MAP(listClass)
167                DEFAULT_REFLECTION_HANDLER()
168        END_MSG_MAP()
169
170        void OnShowWindow(UINT, INT);
171        void OnDestroy();
172        void saveSettings();
173        void uiUpdate(const hal::TorrentDetails& allTorrents); 
174
175        LRESULT OnPause(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
176        LRESULT OnStop(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
177        LRESULT OnResume(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
178        LRESULT OnRemoveFocused(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
179        LRESULT OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
180        LRESULT OnRemoveWipeFiles(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
181
182    friend class boost::serialization::access;
183    template<class Archive>
184    void serialize(Archive& ar, const unsigned int version)
185    {
186                ar & boost::serialization::make_nvp("listview", boost::serialization::base_object<listClass>(*this));
187    }
188       
189        tD CustomItemConversion(LVCompareParam* param, int iSortCol);
190
191private:
192        void OnAttach();
193        void OnDetach();
194       
195        enum { NumberOfColumns_s = 12 };
196       
197        HaliteWindow& halWindow_;
198};
199
200typedef HaliteListViewCtrl::SelectionManager ListViewManager;
Note: See TracBrowser for help on using the repository browser.