source: src/HaliteDialog.hpp @ 345

Revision 345, 11.6 KB checked in by Eoin, 12 years ago (diff)

Minor renaming and attempts to decouple GUI from Torrents.

Line 
1
2//         Copyright Eの 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#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 "HaliteIni.hpp"
22
23#include "halTorrent.hpp"
24#include "halEvent.hpp"
25
26class ui_signal;
27
28class HaliteDialog :
29        public CDialogImpl<HaliteDialog>,
30        public CAutoSizeWindow<HaliteDialog, false>,
31        public CWinDataExchangeEx<HaliteDialog>,
32        public CHaliteDialogBase<HaliteDialog>,
33        private boost::noncopyable
34{       
35        typedef HaliteDialog thisClass;
36        typedef CDialogImpl<thisClass> baseClass;
37        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
38        typedef CHaliteDialogBase<thisClass> dialogBaseClass;
39               
40        class DialogListView :
41                public CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail>,
42                public hal::IniBase<DialogListView>,
43                private boost::noncopyable
44        {
45        protected:
46                typedef HaliteDialog::DialogListView thisClass;
47                typedef hal::IniBase<thisClass> iniClass;
48                typedef CHaliteSortListViewCtrl<DialogListView, const hal::PeerDetail> listClass;
49                typedef const hal::PeerDetail pD;
50       
51                friend class listClass;
52               
53                struct ColumnAdapters
54                {
55               
56                typedef listClass::ColumnAdapter ColAdapter_t;
57               
58                struct SpeedDown : public ColAdapter_t
59                {
60                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.first, r.speed.first); }         
61                        virtual std::wstring print(pD& p) 
62                        {
63                                return (wformat(L"%1$.2fkb/s") % (p.speed.first/1024)).str(); 
64                        }               
65                };
66               
67                struct SpeedUp : public ColAdapter_t
68                {
69                        virtual int compare(pD& l, pD& r)       { return hal::compare(l.speed.second, r.speed.second); }               
70                        virtual std::wstring print(pD& p) 
71                        {
72                                return (wformat(L"%1$.2fkb/s") % (p.speed.second/1024)).str(); 
73                        }               
74                };
75               
76                };
77       
78        public: 
79                enum { 
80                        LISTVIEW_ID_MENU = 0,
81                        LISTVIEW_ID_COLUMNNAMES = HAL_DIALOGPEER_LISTVIEW_COS,
82                        LISTVIEW_ID_COLUMNWIDTHS = HAL_DIALOGPEER_LISTVIEW_COS_DEFAULTS
83                };
84       
85                BEGIN_MSG_MAP_EX(thisClass)
86                        MSG_WM_DESTROY(OnDestroy)
87       
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               
168                COMMAND_RANGE_CODE_HANDLER_EX(IDC_EDITTLU, IDC_EDITNCU, EN_KILLFOCUS, OnEditKillFocus)
169
170                if(uMsg == WM_FORWARDMSG)
171                        if(PreTranslateMessage((LPMSG)lParam)) return TRUE;
172
173                COMMAND_ID_HANDLER_EX(BTNPAUSE, OnPause)
174                COMMAND_ID_HANDLER_EX(BTNREANNOUNCE, OnReannounce)
175                COMMAND_ID_HANDLER_EX(BTNREMOVE, OnRemove)
176
177                CHAIN_MSG_MAP(autosizeClass)
178                REFLECT_NOTIFICATIONS()
179        END_MSG_MAP()
180
181        BEGIN_DDX_MAP(thisClass)
182        DDX_EX_INT_POSITIVE_LIMIT(IDC_EDITNCD, NoConnDown, 2, true)
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       
204
205private:
206        CButton m_btn_start;
207        DialogListView m_list;
208        CContainedWindow m_wndNCD;
209        CProgressBarCtrl m_prog;
210       
211        string current_torrent_name_;
212
213        int NoConnDown, NoConnUp;
214        float TranLimitDown, TranLimitUp;
215};
216
217#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.