source: trunk/src/NewTorrentDialog.hpp @ 472

Revision 472, 10.4 KB checked in by Eoin, 12 years ago (diff)

Deleting useless branches.

Line 
1
2//         Copyright Eóin 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 ID_NEWTORRENT_BEGIN                             14000
10#define IDC_NEWTORRENT_SELECT_TEXT              ID_NEWTORRENT_BEGIN+1
11#define IDC_NEWTORRENT_TRACKERS_TEXT    ID_NEWTORRENT_BEGIN+2
12#define IDC_NEWTORRENT_CREATOR_TEXT             ID_NEWTORRENT_BEGIN+3
13#define IDC_NEWTORRENT_CREATOR                  ID_NEWTORRENT_BEGIN+4
14#define IDC_NEWTORRENT_COMMENT_TEXT             ID_NEWTORRENT_BEGIN+5
15#define IDC_NEWTORRENT_COMMENT                  ID_NEWTORRENT_BEGIN+6
16#define IDC_NEWTORRENT_PRIVATE                  ID_NEWTORRENT_BEGIN+7
17#define IDC_NEWT_FILE_BROWSE                    ID_NEWTORRENT_BEGIN+8
18#define IDC_NEWT_DIR_BROWSE                             ID_NEWTORRENT_BEGIN+9
19#define IDC_NEWT_LISTFILES                              ID_NEWTORRENT_BEGIN+10
20#define HAL_FILES_LISTVIEW_ADV                  ID_NEWTORRENT_BEGIN+11
21#define HAL_NEW_PANE_DLG                                ID_NEWTORRENT_BEGIN+12
22#define IDC_NEWT_TRACKERTIER                    ID_NEWTORRENT_BEGIN+13
23#define IDC_NEWTORRENT_PEERS_TEXT               ID_NEWTORRENT_BEGIN+14
24#define IDC_NEWT_LISTPEERS                              ID_NEWTORRENT_BEGIN+15
25#define HAL_SAVE_TEXT                                   ID_NEWTORRENT_BEGIN+16
26#define IDC_NEWT_OUT_BROWSE                             ID_NEWTORRENT_BEGIN+17
27#define IDC_NEWT_OUTFILE_TEXT                   ID_NEWTORRENT_BEGIN+18
28#define HAL_NEWT_SAVING_TORRENT                 ID_NEWTORRENT_BEGIN+19
29#define HAL_NEWT_DIALOG_TITLE                   ID_NEWTORRENT_BEGIN+20
30#define HAL_NEWT_FILE_NAME                              ID_NEWTORRENT_BEGIN+21
31#define HAL_NEWT_FILE_NAME_EDIT                 ID_NEWTORRENT_BEGIN+22
32#define HAL_NEWT_PIECESIZE_TEXT                 ID_NEWTORRENT_BEGIN+23
33#define HAL_NEWT_PIECESIZE                              ID_NEWTORRENT_BEGIN+24
34
35
36#ifndef RC_INVOKED
37
38#include <boost/function.hpp>
39#include "halTorrent.hpp"
40#include "halIni.hpp"
41#include "halEvent.hpp"
42#include "DdxEx.hpp"
43#include "ListViewEdit.hpp"
44#include "HaliteSortListViewCtrl.hpp"
45#include "NewTorrentTrackerLV.hpp"
46#include "NewTorrentPeersLV.hpp"
47
48typedef boost::function<void (bool)> enable_save;
49
50class FilesListViewCtrl :
51        public CHaliteSortListViewCtrl<FilesListViewCtrl>,
52        public hal::IniBase<FilesListViewCtrl>,
53        private boost::noncopyable
54{
55
56        typedef hal::IniBase<FilesListViewCtrl> iniClass;
57        typedef CHaliteSortListViewCtrl<FilesListViewCtrl> listClass;
58
59        friend class listClass;
60       
61public:
62        enum { 
63                LISTVIEW_ID_MENU = 0,
64                LISTVIEW_ID_COLUMNNAMES = HAL_FILES_LISTVIEW_ADV,
65                LISTVIEW_ID_COLUMNWIDTHS = 0
66        };
67       
68        FilesListViewCtrl() :
69                iniClass("listviews/new_files", "NewFilesListView")
70        {
71                std::vector<wstring> names;     
72                wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
73
74                // "Tracker;Tier"
75                boost::split(names, column_names, boost::is_any_of(L";"));
76               
77                array<int, 3> widths = {50,287,50};
78                array<int, 3> order = {0,1,2};
79                array<bool, 3> visible = {true,true,true};
80               
81                SetDefaults(names, widths, order, visible, true);
82                Load();
83        }
84
85        BEGIN_MSG_MAP_EX(FilesListViewCtrl)
86                MSG_WM_DESTROY(OnDestroy)
87
88                CHAIN_MSG_MAP(listClass)
89                DEFAULT_REFLECTION_HANDLER()
90        END_MSG_MAP()
91
92        void uiUpdate(const hal::TorrentDetail_ptr pT);
93
94    friend class boost::serialization::access;
95    template<class Archive>
96    void serialize(Archive& ar, const unsigned int version)
97    {
98                ar & boost::serialization::make_nvp("listview", boost::serialization::base_object<listClass>(*this));
99    }
100
101private:
102        void OnAttach();
103        void OnDestroy();
104        void saveSettings();
105
106        boost::signal<void ()> listEdited_;
107};
108
109typedef FilesListViewCtrl::SelectionManager FilesListViewManager;
110
111class DetailsSheet :
112    public CPropertyPageImpl<DetailsSheet>,
113    public CWinDataExchangeEx<DetailsSheet>,
114        public CAutoSizeWindow<DetailsSheet, false>
115{
116protected:
117        typedef DetailsSheet thisClass;
118        typedef CPropertyPageImpl<thisClass> sheetClass;
119        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
120
121public:
122        DetailsSheet(enable_save enableSave) :
123                EnableSave_(enableSave), 
124                private_(false)
125        {}
126       
127        enum { IDD = IDD_NEWTORRENT };
128
129    BEGIN_MSG_MAP_EX(thisClass)
130                MSG_WM_INITDIALOG(onInitDialog)
131                MSG_WM_DESTROY(OnDestroy)
132
133                COMMAND_ID_HANDLER_EX(IDC_NEWT_OUT_BROWSE, OnOutBrowse)
134
135                CHAIN_MSG_MAP(autosizeClass)
136                CHAIN_MSG_MAP(sheetClass)
137                REFLECT_NOTIFICATIONS()
138    END_MSG_MAP()
139       
140    BEGIN_DDX_MAP(thisClass)
141                DDX_EX_STDWSTRING(IDC_NEWTORRENT_CREATOR, creator_);
142                DDX_EX_STDWSTRING(IDC_NEWTORRENT_COMMENT, comment_);
143                DDX_EX_STDWSTRING(IDC_NEWT_FILE, outFile_);
144                DDX_INT(HAL_NEWT_PIECESIZE, pieceSize_);
145        DDX_CHECK(IDC_NEWTORRENT_PRIVATE, private_)
146    END_DDX_MAP()
147
148        static CWindowMapStruct* GetWindowMap();
149       
150        BOOL PreTranslateMessage(MSG* pMsg)
151        {
152                return this->IsDialogMessage(pMsg);
153        }
154       
155        void OnOutBrowse(UINT, int, HWND hWnd);
156
157        LRESULT onInitDialog(HWND, LPARAM);
158        void OnDestroy() {};
159
160        wpath OutputFile();
161        wstring Creator();
162        int PieceSize();
163        wstring Comment();
164        bool Private();
165       
166private:
167        enable_save EnableSave_;
168
169        wstring creator_;
170        wstring comment_;
171        int pieceSize_;
172        wstring outFile_;
173        bool private_;
174};
175
176class FilesSheet :
177    public CPropertyPageImpl<FilesSheet>,
178        public CAutoSizeWindow<FilesSheet, false>
179{
180protected:
181        typedef FilesSheet thisClass;
182        typedef CPropertyPageImpl<thisClass> sheetClass;
183        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
184
185public: 
186        enum { IDD = IDD_NEWT_FILES };
187
188    BEGIN_MSG_MAP_EX(thisClass)
189                MSG_WM_INITDIALOG(onInitDialog)
190                MSG_WM_DESTROY(OnDestroy)
191
192                COMMAND_ID_HANDLER_EX(IDC_NEWT_FILE_BROWSE, OnFileBrowse)
193                COMMAND_ID_HANDLER_EX(IDC_NEWT_DIR_BROWSE, OnDirBrowse)
194
195                CHAIN_MSG_MAP(autosizeClass)
196                CHAIN_MSG_MAP(sheetClass)
197                REFLECT_NOTIFICATIONS()
198    END_MSG_MAP()
199       
200        LRESULT onInitDialog(HWND, LPARAM)
201        {       
202                filesList_.Attach(GetDlgItem(IDC_NEWT_LISTFILES));     
203
204                return 0;
205        }
206
207        void OnDestroy() {}
208
209        static CWindowMapStruct* GetWindowMap();
210
211        void OnFileBrowse(UINT, int, HWND hWnd);
212        void OnDirBrowse(UINT, int, HWND hWnd);
213
214        wpath FileFullPath() const;
215        hal::file_size_pairs_t FileSizePairs() const;
216       
217        BOOL PreTranslateMessage(MSG* pMsg)
218        {
219                return this->IsDialogMessage(pMsg);
220        }
221
222private:
223        void UpdateFileList();
224
225        FilesListViewCtrl filesList_;
226       
227        wpath fileRoot_;
228        std::vector<wpath> files_;
229};
230
231class TrackerSheet :
232    public CPropertyPageImpl<TrackerSheet>,
233        public CAutoSizeWindow<TrackerSheet, false>
234{
235protected:
236        typedef TrackerSheet thisClass;
237        typedef CPropertyPageImpl<thisClass> sheetClass;
238        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
239
240public: 
241        enum { IDD = IDD_NEWT_TRACKERS };
242
243    BEGIN_MSG_MAP_EX(thisClass)
244                MSG_WM_INITDIALOG(onInitDialog)
245                MSG_WM_DESTROY(OnDestroy)
246
247                CHAIN_MSG_MAP(autosizeClass)
248                CHAIN_MSG_MAP(sheetClass)
249                REFLECT_NOTIFICATIONS()
250    END_MSG_MAP()
251
252        static CWindowMapStruct* GetWindowMap();
253       
254        BOOL PreTranslateMessage(MSG* pMsg)
255        {
256                return this->IsDialogMessage(pMsg);
257        }
258       
259        LRESULT onInitDialog(HWND, LPARAM)
260        {       
261                trackerList_.Attach(GetDlgItem(IDC_NEWT_LISTTRACKERS)); 
262
263                return 0;
264        }
265
266        void OnDestroy() {}
267
268        hal::tracker_details_t Trackers() const;
269       
270private:
271        NewTorrent_TrackerListViewCtrl trackerList_;
272};
273
274class PeersSheet :
275    public CPropertyPageImpl<PeersSheet>,
276        public CAutoSizeWindow<PeersSheet, false>
277{
278protected:
279        typedef PeersSheet thisClass;
280        typedef CPropertyPageImpl<thisClass> sheetClass;
281        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
282
283public: 
284        enum { IDD = IDD_NEWT_PEERS };
285
286    BEGIN_MSG_MAP_EX(thisClass)
287                MSG_WM_INITDIALOG(onInitDialog)
288                MSG_WM_DESTROY(OnDestroy)
289
290                CHAIN_MSG_MAP(autosizeClass)
291                CHAIN_MSG_MAP(sheetClass)
292                REFLECT_NOTIFICATIONS()
293    END_MSG_MAP()
294
295        static CWindowMapStruct* GetWindowMap();
296       
297        BOOL PreTranslateMessage(MSG* pMsg)
298        {
299                return this->IsDialogMessage(pMsg);
300        }
301
302        LRESULT onInitDialog(HWND, LPARAM)
303        {       
304                peersList_.Attach(GetDlgItem(IDC_NEWT_LISTPEERS));     
305
306                return 0;
307        }
308
309        void OnDestroy() {}
310       
311        hal::dht_node_details_t DhtNodes() const;       
312        hal::web_seed_details_t WebSeeds() const;
313       
314private:
315        NewTorrent_PeersListViewCtrl peersList_;
316};
317
318class NewTorrentDialog :
319        public CPropertySheet,
320        public hal::IniBase<NewTorrentDialog>,
321        public CDialogResize<NewTorrentDialog>
322{
323        typedef NewTorrentDialog thisClass;
324        typedef hal::IniBase<thisClass> iniClass;
325        typedef CDialogResize<thisClass> resizeClass;
326
327public:
328    NewTorrentDialog(LPCTSTR title = (LPCTSTR)NULL,
329                        UINT uStartPage = 0, HWND hWndParent = NULL) :
330        CPropertySheet(title, uStartPage, hWndParent),
331                iniClass("NewTorrentDialog", "Dialog"),
332                inited_(false),
333                rect_(0,0,0,0),
334                fileSheet_(bind(&NewTorrentDialog::EnableSave, this, _1))
335    {
336                Load();
337
338                AddPage(fileSheet_);
339                AddPage(filesSheet_);
340                AddPage(trackerSheet_);
341                AddPage(detailsSheet_);         
342        }
343
344    BEGIN_MSG_MAP_EX(thisClass)
345        MSG_WM_SHOWWINDOW(OnShowWindow)
346                MSG_WM_SIZE(OnSize)
347                MSG_WM_CLOSE(OnClose)   
348                MSG_WM_DESTROY(OnDestroy)
349               
350                COMMAND_ID_HANDLER(0x1, OnSave)
351
352                CHAIN_MSG_MAP(resizeClass)
353        CHAIN_MSG_MAP(CPropertySheet)
354    END_MSG_MAP()
355
356    BEGIN_DLGRESIZE_MAP(thisClass)
357                DLGRESIZE_CONTROL(0x3020, DLSZ_SIZE_X|DLSZ_SIZE_Y)
358
359                DLGRESIZE_CONTROL(0x1, DLSZ_MOVE_X|DLSZ_MOVE_Y)
360                DLGRESIZE_CONTROL(0x2, DLSZ_MOVE_X|DLSZ_MOVE_Y)
361                DLGRESIZE_CONTROL(0x3021, DLSZ_MOVE_X|DLSZ_MOVE_Y)
362        END_DLGRESIZE_MAP()
363
364    void OnShowWindow(BOOL bShow, UINT nStatus);
365
366        void OnSize(UINT, CSize)
367        {
368        SetMsgHandled(false);
369
370                resizeActiveSheet();
371        }
372       
373        void OnClose()
374        {
375                SetMsgHandled(false);
376
377                OnDestroy();
378        }
379
380        void OnDestroy() 
381        {
382                SetMsgHandled(false);
383
384                GetWindowRect(rect_);
385                Save();
386        }
387
388        void EnableSave(bool enable)
389        {
390                ::EnableWindow(GetDlgItem(0x1), enable);
391        }
392       
393        LRESULT OnSave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
394
395        friend class boost::serialization::access;
396    template<class Archive>
397    void serialize(Archive& ar, const unsigned int version)
398        {
399                ar & BOOST_SERIALIZATION_NVP(rect_);
400        }
401
402private:
403        bool inited_;
404        CRect rect_;
405
406        void resizeActiveSheet()
407        {
408        HWND propTabs = GetDlgItem(0x3020);
409
410                RECT rect;
411                ::GetWindowRect(propTabs, &rect);
412
413                ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2);
414                ::SendMessage(propTabs, TCM_ADJUSTRECT, false, (LPARAM)&rect);
415
416                ::MoveWindow(GetActivePage(), rect.left, rect.top,
417            rect.right-rect.left, rect.bottom-rect.top, true);
418        }
419
420        DetailsSheet fileSheet_;
421        FilesSheet filesSheet_;
422        TrackerSheet trackerSheet_;
423        PeersSheet detailsSheet_;
424};
425
426#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.