source: trunk/src/HaliteDialog.hpp @ 659

Revision 659, 11.4 KB checked in by Eoin, 11 years ago (diff)

Peer list sorting fixed and so more naming conventions consistency work.

Line 
1
2//         Copyright Eoin O'Callaghan 2006 - 2008.
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#define HAL_NAME_STATIC                 15012
10#define HAL_TRACKER_STATIC              15013
11#define HAL_STATUS_STATIC               15014
12#define HAL_TIME_STATIC                 15015
13#define HAL_COMPLETED_STATIC            15016
14
15#ifndef RC_INVOKED
16
17#include "stdAfx.hpp"
18#include "Aero.h"
19
20#include "DdxEx.hpp"
21#include "HaliteSortListViewCtrl.hpp"
22#include "HaliteDialogBase.hpp"
23#include "HaliteEditCtrl.hpp"
24#include "halIni.hpp"
25
26#include "halTorrent.hpp"
27#include "halEvent.hpp"
28
29class ui_signal;
30
31class HaliteDialog :
32        public WTL::CAeroDialogImpl<HaliteDialog>,
33        public ATL::CAutoSizeWindow<HaliteDialog, false>,
34        public CWinDataExchangeEx<HaliteDialog>,
35        public CHaliteDialogBase<HaliteDialog>,
36        private boost::noncopyable
37{       
38        typedef HaliteDialog thisClass;
39        typedef WTL::CAeroDialogImpl<thisClass> baseClass;
40        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
41        typedef CHaliteDialogBase<thisClass> dialogBaseClass;
42               
43        class DialogListView :
44                public CHaliteSortListViewCtrl<DialogListView, const hal::peer_detail>,
45                public hal::IniBase<DialogListView>,
46                private boost::noncopyable
47        {
48        protected:
49                typedef HaliteDialog::DialogListView thisClass;
50                typedef hal::IniBase<thisClass> iniClass;
51                typedef CHaliteSortListViewCtrl<DialogListView, const hal::peer_detail> listClass;
52                typedef const hal::peer_detail pD;
53       
54                friend class listClass;
55               
56                struct ColumnAdapters
57                {
58               
59                typedef listClass::ColumnAdapter ColAdapter_t;
60               
61                struct SpeedDown : public ColAdapter_t
62                {
63                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.first, r.speed.first); }         
64                        virtual std::wstring print(pD& p) 
65                        {
66                                return (hal::wform(L"%1$.2fkb/s") % (p.speed.first/1024)).str(); 
67                        }               
68                };
69               
70                struct SpeedUp : public ColAdapter_t
71                {
72                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.second, r.speed.second); }               
73                        virtual std::wstring print(pD& p) 
74                        {
75                                return (hal::wform(L"%1$.2fkb/s") % (p.speed.second/1024)).str(); 
76                        }               
77                };
78               
79                };
80       
81        public: 
82                enum { 
83                        LISTVIEW_ID_MENU = 0,
84                        LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_COS,
85                        LISTVIEW_ID_COLUMNWIDTHS = HAL_DIALOGPEER_LISTVIEW_COS_DEFAULTS
86                };
87       
88                BEGIN_MSG_MAP_EX(thisClass)
89                        MSG_WM_DESTROY(OnDestroy)
90                        CHAIN_MSG_MAP(listClass)
91                        DEFAULT_REFLECTION_HANDLER()
92                END_MSG_MAP()
93       
94                DialogListView() :
95                        iniClass("listviews/dialog", "DialogPeersList")
96                {}
97               
98                void saveSettings()
99                {
100                        GetListViewDetails();
101                        save_to_ini();
102                }
103               
104                bool SubclassWindow(HWND hwnd)
105                {
106                        if(!parentClass::SubclassWindow(hwnd))
107                                return false;
108                               
109                        WTL::CMenuHandle menu;
110                        BOOL menu_created = menu.LoadMenu(LISTVIEW_ID_MENU);
111                        InitialSetup(menu);     
112
113                        std::vector<wstring> names;     
114                        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
115
116                        // "Peer;Country;Download;Upload;Type;Client"
117                        boost::split(names, column_names, boost::is_any_of(L";"));
118                       
119                        array<int, 6> widths = {100,20,70,70,70,100};
120                        array<int, 6> order = {0,1,2,3,4,5};
121                        array<bool, 6> visible = {true,true,true,true,true,true};
122
123                        for (int i=0, e=6; i < e; ++i)
124                        {
125                                AddColumn(names[i].c_str(), i, visible[i], widths[i]);
126                        }       
127                       
128                        load_from_ini();
129                       
130                        SetColumnSortType(2, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown());
131                        SetColumnSortType(3, WTL::LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp());
132                               
133                        return true;
134                }
135               
136                void OnDestroy()
137                {
138                        saveSettings();
139                }
140               
141                friend class boost::serialization::access;
142                template<class Archive>
143                void serialize(Archive& ar, const unsigned int version)
144                {
145                        ar & boost::serialization::make_nvp("listview", 
146                                boost::serialization::base_object<listClass>(*this));
147                }
148               
149/*              pD CustomItemConversion(LVCompareParam* param, int iSortCol)
150                {                       
151                        return peer_details_[param->dwItemData];
152                }               */
153               
154                void uiUpdate(const hal::torrent_details_manager& tD);
155               
156        private:
157                hal::peer_details_vec peer_details_;
158        };
159       
160public:
161        enum { IDD = HAL_HALITEDLG };
162
163        HaliteDialog(HaliteWindow& HalWindow);
164        BOOL PreTranslateMessage(MSG* pMsg)     { return this->IsDialogMessage(pMsg); }
165
166        void saveStatus();
167
168        BEGIN_MSG_MAP_EX(thisClass)
169                MSG_WM_INITDIALOG(OnInitDialog)
170                MSG_WM_CLOSE(OnClose)
171                MESSAGE_HANDLER_EX(WM_USER_HAL_EDITCHANGED, OnHalEditChanged)
172               
173                if(uMsg == WM_FORWARDMSG)
174                        if(PreTranslateMessage((LPMSG)lParam)) return TRUE;
175
176                COMMAND_ID_HANDLER_EX(BTNPAUSE, OnPause)
177                COMMAND_ID_HANDLER_EX(BTNREANNOUNCE, OnReannounce)
178                COMMAND_ID_HANDLER_EX(BTNREMOVE, OnRemove)
179
180                CHAIN_MSG_MAP(baseClass)
181                CHAIN_MSG_MAP(dialogBaseClass)
182                CHAIN_MSG_MAP(autosizeClass)
183                REFLECT_NOTIFICATIONS()
184        END_MSG_MAP()
185
186        BEGIN_DDX_MAP(thisClass)
187    END_DDX_MAP()
188
189        static CWindowMapStruct* GetWindowMap();
190       
191        void uiUpdate(const hal::torrent_details_manager& allTorrents); 
192        void focusChanged(const hal::torrent_details_ptr pT);
193       
194protected:
195        LRESULT OnInitDialog(HWND, LPARAM);
196        void OnClose();
197
198        void OnPause(UINT, int, HWND);
199        void OnReannounce(UINT, int, HWND);
200        void OnRemove(UINT, int, HWND);
201
202        LRESULT OnCltColor(HDC hDC, HWND hWnd); 
203        LRESULT OnHalEditChanged(UINT uMsg, WPARAM wParam, LPARAM lParam);
204
205private:
206        WTL::CButton m_btn_start;
207        DialogListView m_list;
208        WTL::CProgressBarCtrl m_prog;
209       
210        CHaliteEditCtrl<int> totalConnections_;
211        CHaliteEditCtrl<int> uploadConnections_;
212        CHaliteEditCtrl<float> downloadRate_;
213        CHaliteEditCtrl<float> uploadRate_;
214       
215        string current_torrent_name_;
216};
217
218#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.