source: src/HaliteDialog.hpp @ 268

Revision 268, 6.7 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 "DdxEx.hpp"
11#include "HaliteSortListViewCtrl.hpp"
12#include "HaliteDialogBase.hpp"
13#include "HaliteIni.hpp"
14
15#include "halTorrent.hpp"
16#include "halEvent.hpp"
17
18class ui_signal;
19
20class HaliteDialog :
21        public CDialogImpl<HaliteDialog>,
22        public CDialogResize<HaliteDialog>,
23        public CWinDataExchangeEx<HaliteDialog>,
24        public CHaliteDialogBase<HaliteDialog>,
25        private boost::noncopyable
26{       
27
28        typedef HaliteDialog thisClass;
29        typedef CDialogImpl<HaliteDialog> baseClass;
30        typedef CDialogResize<HaliteDialog> resizeClass;
31        typedef CHaliteDialogBase<HaliteDialog> dialogBaseClass;
32               
33        class DialogListView :
34                public CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail>,
35                public CHaliteIni<DialogListView>,
36                private boost::noncopyable
37        {
38        protected:
39                typedef HaliteDialog::DialogListView thisClass;
40                typedef CHaliteIni<thisClass> iniClass;
41                typedef CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail> listClass;
42                typedef const hal::PeerDetail pD;
43       
44                friend class listClass;
45               
46                struct ColumnAdapters
47                {
48               
49                typedef listClass::ColumnAdapter ColAdapter_t;
50               
51                struct SpeedDown : public ColAdapter_t
52                {
53                        virtual bool less(pD& l, pD& r) { return l.speed.first < r.speed.first; }               
54                        virtual std::wstring print(pD& p) 
55                        {
56                                return (wformat(L"%1$.2fkb/s") % (p.speed.first/1024)).str(); 
57                        }               
58                };
59               
60                struct SpeedUp : public ColAdapter_t
61                {
62                        virtual bool less(pD& l, pD& r) { return l.speed.second < r.speed.second; }             
63                        virtual std::wstring print(pD& p) 
64                        {
65                                return (wformat(L"%1$.2fkb/s") % (p.speed.second/1024)).str(); 
66                        }               
67                };
68               
69                };
70       
71        public: 
72                enum { 
73                        LISTVIEW_ID_MENU = 0,
74                        LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_COS,
75                        LISTVIEW_ID_COLUMNWIDTHS = HAL_DIALOGPEER_LISTVIEW_COS_DEFAULTS
76                };
77       
78                BEGIN_MSG_MAP_EX(thisClass)
79                        MSG_WM_DESTROY(OnDestroy)
80       
81                        CHAIN_MSG_MAP(listClass)
82                        DEFAULT_REFLECTION_HANDLER()
83                END_MSG_MAP()
84       
85                DialogListView() :
86                        iniClass("listviews/dialog", "DialogPeersList"),
87                        listClass(true,false,false)
88                {                                       
89                        std::vector<wstring> names;     
90                        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
91
92                        // "Peer;Country;Download;Upload;Type;Client"
93                        boost::split(names, column_names, boost::is_any_of(L";"));
94                       
95                        array<int, 6> widths = {100,20,70,70,70,100};
96                        array<int, 6> order = {0,1,2,3,4,5};
97                        array<bool, 6> visible = {true,true,true,true,true,true};
98                       
99                        SetDefaults(names, widths, order, visible);
100                        Load();
101                }
102               
103                void saveSettings()
104                {
105                        GetListViewDetails();
106                        save();
107                }
108               
109                bool SubclassWindow(HWND hwnd)
110                {
111                        if(!parentClass::SubclassWindow(hwnd))
112                                return false;
113                               
114                        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER);
115                        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS);
116                       
117                        ApplyDetails();
118                       
119                        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown());
120                        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp());
121                               
122                        return true;
123                }
124               
125                void OnDestroy()
126                {
127                        saveSettings();
128                }
129               
130                friend class boost::serialization::access;
131                template<class Archive>
132                void serialize(Archive& ar, const unsigned int version)
133                {
134                        ar & boost::serialization::make_nvp("listview", 
135                                boost::serialization::base_object<listClass>(*this));
136                }
137               
138                pD CustomItemConversion(LVCompareParam* param, int iSortCol)
139                {                       
140                        return peerDetails_[param->dwItemData];
141                }               
142               
143                int CustomItemComparision(pD left, pD right, int iSortCol)
144                {
145                        ColumnAdapter* pCA = getColumnAdapter(iSortCol);
146                       
147                        if (pCA)
148                                return (pCA->less(left, right)) ? 1 : -1;
149                        else 
150                                return 0;
151                }
152               
153                void uiUpdate(const hal::TorrentDetails& tD);
154               
155        private:
156                hal::PeerDetails peerDetails_;
157        };
158       
159public:
160        enum { IDD = IDD_HALITEDLG };
161
162        HaliteDialog(HaliteWindow& HalWindow);
163        BOOL PreTranslateMessage(MSG* pMsg)     { return this->IsDialogMessage(pMsg); }
164
165        void saveStatus();
166
167        BEGIN_MSG_MAP_EX(thisClass)
168                MSG_WM_INITDIALOG(OnInitDialog)
169                MSG_WM_CLOSE(OnClose)
170                COMMAND_RANGE_CODE_HANDLER_EX(IDC_EDITTLU, IDC_EDITNCU, EN_KILLFOCUS, OnEditKillFocus)
171
172                if(uMsg == WM_FORWARDMSG)
173                        if(PreTranslateMessage((LPMSG)lParam)) return TRUE;
174
175                COMMAND_ID_HANDLER_EX(BTNPAUSE, OnPause)
176                COMMAND_ID_HANDLER_EX(BTNREANNOUNCE, OnReannounce)
177                COMMAND_ID_HANDLER_EX(BTNREMOVE, OnRemove)
178
179        //      MSG_WM_CTLCOLORSTATIC(OnCltColor)
180
181                CHAIN_MSG_MAP(resizeClass)
182                REFLECT_NOTIFICATIONS()
183        END_MSG_MAP()
184
185        BEGIN_DDX_MAP(thisClass)
186        DDX_EX_INT_POSITIVE_LIMIT(IDC_EDITNCD, NoConnDown, 2, true)
187        DDX_EX_INT_POSITIVE_LIMIT(IDC_EDITNCU, NoConnUp, 2, true)
188        DDX_EX_INT_FLOAT_LIMIT(IDC_EDITTLD, TranLimitDown, 5, true)
189        DDX_EX_INT_FLOAT_LIMIT(IDC_EDITTLU, TranLimitUp, 5, true)
190    END_DDX_MAP()
191
192        BEGIN_DLGRESIZE_MAP(thisClass)
193                DLGRESIZE_CONTROL(BTNPAUSE, (DLSZ_MOVE_X))
194                DLGRESIZE_CONTROL(BTNREANNOUNCE, (DLSZ_MOVE_X))
195                DLGRESIZE_CONTROL(BTNREMOVE, (DLSZ_MOVE_X))
196
197                DLGRESIZE_CONTROL(IDC_TL, (DLSZ_MOVE_X))
198                DLGRESIZE_CONTROL(IDC_NC, (DLSZ_MOVE_X))
199                DLGRESIZE_CONTROL(IDC_TLD, (DLSZ_MOVE_X))
200                DLGRESIZE_CONTROL(IDC_TLU, (DLSZ_MOVE_X))
201                DLGRESIZE_CONTROL(IDC_NCU, (DLSZ_MOVE_X))
202                DLGRESIZE_CONTROL(IDC_NCD, (DLSZ_MOVE_X))
203
204                DLGRESIZE_CONTROL(IDC_EDITNCD, (DLSZ_MOVE_X))
205                DLGRESIZE_CONTROL(IDC_EDITTLD, (DLSZ_MOVE_X))
206                DLGRESIZE_CONTROL(IDC_EDITTLU, (DLSZ_MOVE_X))
207                DLGRESIZE_CONTROL(IDC_EDITNCU, (DLSZ_MOVE_X))
208
209                DLGRESIZE_CONTROL(TORRENTPROG, (DLSZ_SIZE_X))
210
211                DLGRESIZE_CONTROL(IDC_NAME, (DLSZ_SIZE_X))
212                DLGRESIZE_CONTROL(IDC_TRACKER, (DLSZ_SIZE_X))
213                DLGRESIZE_CONTROL(IDC_STATUS, (DLSZ_SIZE_X))
214                DLGRESIZE_CONTROL(IDC_COMPLETE, (DLSZ_SIZE_X))
215
216                DLGRESIZE_CONTROL(LISTPEERS, (DLSZ_SIZE_X | DLSZ_SIZE_Y))
217                DLGRESIZE_CONTROL(IDC_DETAILS_GROUP, (DLSZ_SIZE_X | DLSZ_SIZE_Y))
218        END_DLGRESIZE_MAP()
219       
220        void uiUpdate(const hal::TorrentDetails& allTorrents); 
221        void focusChanged(string& torrent_name);
222       
223protected:
224        LRESULT OnInitDialog(HWND, LPARAM);
225        void OnClose();
226
227        void OnPause(UINT, int, HWND);
228        void OnReannounce(UINT, int, HWND);
229        void OnRemove(UINT, int, HWND);
230
231        LRESULT OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl);
232        LRESULT OnCltColor(HDC hDC, HWND hWnd);
233
234private:
235        CButton m_btn_start;
236        DialogListView m_list;
237        CContainedWindow m_wndNCD;
238        CProgressBarCtrl m_prog;
239       
240        string current_torrent_name_;
241
242        int NoConnDown, NoConnUp;
243        float TranLimitDown, TranLimitUp;
244};
Note: See TracBrowser for help on using the repository browser.