source: trunk/src/HaliteDialog.hpp @ 445

Revision 445, 11.9 KB checked in by Eoin, 12 years ago (diff)

The preview snapshot.

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 IDC_NAME_STATIC                 15012
10#define IDC_TRACKER_STATIC              15013
11#define IDC_STATUS_STATIC               15014
12#define IDC_TIME_STATIC                 15015
13#define IDC_COMPLETED_STATIC            15016
14
15#ifndef RC_INVOKED
16
17#include "stdAfx.hpp"
18#include "DdxEx.hpp"
19#include "HaliteSortListViewCtrl.hpp"
20#include "HaliteDialogBase.hpp"
21#include "HaliteEditCtrl.hpp"
22#include "halIni.hpp"
23
24#include "halTorrent.hpp"
25#include "halEvent.hpp"
26
27class ui_signal;
28
29class HaliteDialog :
30        public CDialogImpl<HaliteDialog>,
31        public CAutoSizeWindow<HaliteDialog, false>,
32        public CWinDataExchangeEx<HaliteDialog>,
33        public CHaliteDialogBase<HaliteDialog>,
34        private boost::noncopyable
35{       
36        typedef HaliteDialog thisClass;
37        typedef CDialogImpl<thisClass> baseClass;
38        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
39        typedef CHaliteDialogBase<thisClass> dialogBaseClass;
40               
41        class DialogListView :
42                public CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail>,
43                public hal::IniBase<DialogListView>,
44                private boost::noncopyable
45        {
46        protected:
47                typedef HaliteDialog::DialogListView thisClass;
48                typedef hal::IniBase<thisClass> iniClass;
49                typedef CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail> listClass;
50                typedef const hal::PeerDetail pD;
51       
52                friend class listClass;
53               
54                struct ColumnAdapters
55                {
56               
57                typedef listClass::ColumnAdapter ColAdapter_t;
58               
59                struct SpeedDown : public ColAdapter_t
60                {
61                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.first, r.speed.first); }         
62                        virtual std::wstring print(pD& p) 
63                        {
64                                return (wformat(L"%1$.2fkb/s") % (p.speed.first/1024)).str(); 
65                        }               
66                };
67               
68                struct SpeedUp : public ColAdapter_t
69                {
70                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.second, r.speed.second); }               
71                        virtual std::wstring print(pD& p) 
72                        {
73                                return (wformat(L"%1$.2fkb/s") % (p.speed.second/1024)).str(); 
74                        }               
75                };
76               
77                };
78       
79        public: 
80                enum { 
81                        LISTVIEW_ID_MENU = 0,
82                        LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_COS,
83                        LISTVIEW_ID_COLUMNWIDTHS = HAL_DIALOGPEER_LISTVIEW_COS_DEFAULTS
84                };
85       
86                BEGIN_MSG_MAP_EX(thisClass)
87                        MSG_WM_DESTROY(OnDestroy)
88                        CHAIN_MSG_MAP(listClass)
89                        DEFAULT_REFLECTION_HANDLER()
90                END_MSG_MAP()
91       
92                DialogListView() :
93                        iniClass("listviews/dialog", "DialogPeersList"),
94                        listClass(true,false,false)
95                {                                       
96                        std::vector<wstring> names;     
97                        wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
98
99                        // "Peer;Country;Download;Upload;Type;Client"
100                        boost::split(names, column_names, boost::is_any_of(L";"));
101                       
102                        array<int, 6> widths = {100,20,70,70,70,100};
103                        array<int, 6> order = {0,1,2,3,4,5};
104                        array<bool, 6> visible = {true,true,true,true,true,true};
105                       
106                        SetDefaults(names, widths, order, visible);
107                        Load();
108                }
109               
110                void saveSettings()
111                {
112                        GetListViewDetails();
113                        save();
114                }
115               
116                bool SubclassWindow(HWND hwnd)
117                {
118                        if(!parentClass::SubclassWindow(hwnd))
119                                return false;
120                               
121                        SetExtendedListViewStyle(WS_EX_CLIENTEDGE|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP|LVS_EX_DOUBLEBUFFER);
122                        SetSortListViewExtendedStyle(SORTLV_USESHELLBITMAPS, SORTLV_USESHELLBITMAPS);
123                       
124                        ApplyDetails();
125                       
126                        SetColumnSortType(2, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedDown());
127                        SetColumnSortType(3, LVCOLSORT_CUSTOM, new ColumnAdapters::SpeedUp());
128                               
129                        return true;
130                }
131               
132                void OnDestroy()
133                {
134                        saveSettings();
135                }
136               
137                friend class boost::serialization::access;
138                template<class Archive>
139                void serialize(Archive& ar, const unsigned int version)
140                {
141                        ar & boost::serialization::make_nvp("listview", 
142                                boost::serialization::base_object<listClass>(*this));
143                }
144               
145                pD CustomItemConversion(LVCompareParam* param, int iSortCol)
146                {                       
147                        return peerDetails_[param->dwItemData];
148                }               
149               
150                void uiUpdate(const hal::TorrentDetails& tD);
151               
152        private:
153                hal::PeerDetails peerDetails_;
154        };
155       
156public:
157        enum { IDD = IDD_HALITEDLG };
158
159        HaliteDialog(HaliteWindow& HalWindow);
160        BOOL PreTranslateMessage(MSG* pMsg)     { return this->IsDialogMessage(pMsg); }
161
162        void saveStatus();
163
164        BEGIN_MSG_MAP_EX(thisClass)
165                MSG_WM_INITDIALOG(OnInitDialog)
166                MSG_WM_CLOSE(OnClose)
167                MESSAGE_HANDLER_EX(WM_USER_HAL_EDITCHANGED, OnHalEditChanged)
168               
169                if(uMsg == WM_FORWARDMSG)
170                        if(PreTranslateMessage((LPMSG)lParam)) return TRUE;
171
172                COMMAND_ID_HANDLER_EX(BTNPAUSE, OnPause)
173                COMMAND_ID_HANDLER_EX(BTNREANNOUNCE, OnReannounce)
174                COMMAND_ID_HANDLER_EX(BTNREMOVE, OnRemove)
175
176                CHAIN_MSG_MAP(dialogBaseClass)
177                CHAIN_MSG_MAP(autosizeClass)
178                REFLECT_NOTIFICATIONS()
179        END_MSG_MAP()
180
181        BEGIN_DDX_MAP(thisClass)
182    //    DDX_INT(IDC_EDITNCD, totalConnections_)
183    //    DDX_EX_INT_POSITIVE_LIMIT(IDC_EDITNCU, NoConnUp, 2, true)
184    //    DDX_EX_INT_FLOAT_LIMIT(IDC_EDITTLD, TranLimitDown, 1, false)
185    //    DDX_EX_INT_FLOAT_LIMIT(IDC_EDITTLU, TranLimitUp, 1, false)
186    END_DDX_MAP()
187
188        static CWindowMapStruct* GetWindowMap();
189       
190        void uiUpdate(const hal::TorrentDetails& allTorrents); 
191        void focusChanged(const hal::TorrentDetail_ptr pT);
192       
193protected:
194        LRESULT OnInitDialog(HWND, LPARAM);
195        void OnClose();
196
197        void OnPause(UINT, int, HWND);
198        void OnReannounce(UINT, int, HWND);
199        void OnRemove(UINT, int, HWND);
200
201        LRESULT OnEditKillFocus(UINT uCode, int nCtrlID, HWND hwndCtrl);
202        LRESULT OnCltColor(HDC hDC, HWND hWnd); 
203        LRESULT OnHalEditChanged(UINT uMsg, WPARAM wParam, LPARAM lParam);
204
205private:
206        CButton m_btn_start;
207        DialogListView m_list;
208        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.