source: trunk/src/NewTorrentDialog.hpp @ 403

Revision 403, 9.1 KB checked in by Eoin, 12 years ago (diff)

Added command to recheck torrents.

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_PROG_CANCEL                 ID_NEWTORRENT_BEGIN + 2
23//#define IDC_PROG_PROGRESS               ID_NEWTORRENT_BEGIN + 3
24
25#ifndef RC_INVOKED
26
27#include <boost/function.hpp>
28#include "halTorrent.hpp"
29#include "halIni.hpp"
30#include "halEvent.hpp"
31#include "DdxEx.hpp"
32#include "ListViewEdit.hpp"
33#include "HaliteSortListViewCtrl.hpp"
34
35
36class FilesListViewCtrl :
37        public CHaliteSortListViewCtrl<FilesListViewCtrl>,
38        public hal::IniBase<FilesListViewCtrl>,
39        private boost::noncopyable
40{
41
42        typedef hal::IniBase<FilesListViewCtrl> iniClass;
43        typedef CHaliteSortListViewCtrl<FilesListViewCtrl> listClass;
44
45        friend class listClass;
46       
47public:
48        enum { 
49                LISTVIEW_ID_MENU = 0,
50                LISTVIEW_ID_COLUMNNAMES = HAL_FILES_LISTVIEW_ADV,
51                LISTVIEW_ID_COLUMNWIDTHS = 0
52        };
53       
54        FilesListViewCtrl() :
55                listClass(true,false,false),
56                iniClass("listviews/new_files", "NewFilesListView")
57        {
58                std::vector<wstring> names;     
59                wstring column_names = hal::app().res_wstr(LISTVIEW_ID_COLUMNNAMES);
60
61                // "Tracker;Tier"
62                boost::split(names, column_names, boost::is_any_of(L";"));
63               
64                array<int, 3> widths = {50,287,50};
65                array<int, 3> order = {0,1,2};
66                array<bool, 3> visible = {true,true,true};
67               
68                SetDefaults(names, widths, order, visible, true);
69                Load();
70        }
71
72        BEGIN_MSG_MAP_EX(FilesListViewCtrl)
73                MSG_WM_DESTROY(OnDestroy)
74
75/*              COMMAND_ID_HANDLER(ID_TLVM_NEW, OnNew)
76                COMMAND_ID_HANDLER(ID_TLVM_EDIT, OnEdit)
77                COMMAND_ID_HANDLER(ID_TLVM_DELETE, OnDelete)
78                COMMAND_ID_HANDLER(ID_TLVM_PRIMARY, OnPrimary)
79
80                REFLECTED_NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDoubleClick)
81*/
82                CHAIN_MSG_MAP(listClass)
83                DEFAULT_REFLECTION_HANDLER()
84        END_MSG_MAP()
85
86        void uiUpdate(const hal::TorrentDetail_ptr pT);
87//      void enterNewTracker();
88//      void saveSettings();
89
90    friend class boost::serialization::access;
91    template<class Archive>
92    void serialize(Archive& ar, const unsigned int version)
93    {
94                ar & boost::serialization::make_nvp("listview", boost::serialization::base_object<listClass>(*this));
95    }
96
97private:
98        void OnAttach();
99        void OnDestroy();
100        void saveSettings();
101
102        boost::signal<void ()> listEdited_;
103};
104
105typedef FilesListViewCtrl::SelectionManager FilesListViewManager;
106
107class FileSheet :
108    public CPropertyPageImpl<FileSheet>,
109    public CWinDataExchangeEx<FileSheet>,
110        public CAutoSizeWindow<FileSheet, false>
111{
112protected:
113        typedef FileSheet thisClass;
114        typedef CPropertyPageImpl<thisClass> sheetClass;
115        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
116
117public:
118        FileSheet()
119        {}
120
121        ~FileSheet()
122        {}
123       
124        enum { IDD = IDD_NEWTORRENT };
125
126    BEGIN_MSG_MAP_EX(thisClass)
127                MSG_WM_INITDIALOG(onInitDialog)
128                MSG_WM_DESTROY(OnDestroy)
129
130                COMMAND_ID_HANDLER_EX(IDC_NEWT_FILE_BROWSE, OnFileBrowse)
131                COMMAND_ID_HANDLER_EX(IDC_NEWT_DIR_BROWSE, OnDirBrowse)
132
133                CHAIN_MSG_MAP(autosizeClass)
134                CHAIN_MSG_MAP(sheetClass)
135                REFLECT_NOTIFICATIONS()
136    END_MSG_MAP()
137       
138    BEGIN_DDX_MAP(thisClass)
139                DDX_EX_STDWSTRING(IDC_NEWTORRENT_CREATOR, creator_);
140                DDX_EX_STDWSTRING(IDC_NEWTORRENT_COMMENT, comment_);
141        DDX_CHECK(IDC_NEWTORRENT_PRIVATE, private_)
142    END_DDX_MAP()
143
144        static CWindowMapStruct* GetWindowMap();
145       
146        BOOL PreTranslateMessage(MSG* pMsg)
147        {
148                return this->IsDialogMessage(pMsg);
149        }
150       
151        void OnFileBrowse(UINT, int, HWND hWnd);
152        void OnDirBrowse(UINT, int, HWND hWnd);
153        LRESULT onInitDialog(HWND, LPARAM);
154        void OnDestroy() {};
155       
156private:
157        FilesListViewCtrl filesList_;
158       
159        wpath fileRoot_;
160        std::vector<wpath> files_;
161
162        wstring creator_;
163        wstring comment_;
164        bool private_;
165
166};
167
168class TrackerSheet :
169    public CPropertyPageImpl<TrackerSheet>,
170        public CAutoSizeWindow<TrackerSheet, false>
171{
172protected:
173        typedef TrackerSheet thisClass;
174        typedef CPropertyPageImpl<thisClass> sheetClass;
175        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
176
177public: 
178        enum { IDD = IDD_NEWT_TRACKERS };
179
180    BEGIN_MSG_MAP_EX(thisClass)
181                MSG_WM_INITDIALOG(onInitDialog)
182                MSG_WM_DESTROY(OnDestroy)
183
184//              COMMAND_ID_HANDLER_EX(IDC_NEWT_ADDTRACKER, OnFileBrowse)
185//              COMMAND_ID_HANDLER_EX(IDC_NEWT_DIR_BROWSE, OnDirBrowse)
186
187                REFLECT_NOTIFICATIONS()
188                CHAIN_MSG_MAP(autosizeClass)
189                CHAIN_MSG_MAP(sheetClass)
190    END_MSG_MAP()
191
192        static CWindowMapStruct* GetWindowMap();
193       
194        BOOL PreTranslateMessage(MSG* pMsg)
195        {
196                return this->IsDialogMessage(pMsg);
197        }
198       
199        LRESULT onInitDialog(HWND, LPARAM)
200        {       
201                editList_.SubclassWindow(GetDlgItem(IDC_NEWT_LISTTRACKERS));   
202
203                editList_.AddColumn(L"Col 1", 0);
204                editList_.AddColumn(L"Col 2", 1);
205
206                int itemPos = editList_.AddItem(0, 0, L"Yoke 1", 0);
207                editList_.SetItemText(itemPos, 1, L"Thingy 2");
208
209                itemPos = editList_.AddItem(0, 0, L"Stuff 3", 0);
210                editList_.SetItemText(itemPos, 1, L"Empty 4");
211
212                return 0;
213        }
214
215        void OnDestroy() {}
216       
217private:
218        WTLx::CEditListViewCtrl editList_;
219};
220
221class DetailsSheet :
222    public CPropertyPageImpl<DetailsSheet>,
223        public CAutoSizeWindow<DetailsSheet, false>
224{
225protected:
226        typedef DetailsSheet thisClass;
227        typedef CPropertyPageImpl<thisClass> sheetClass;
228        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
229
230public: 
231        enum { IDD = IDD_NEWT_DETAILS };
232
233    BEGIN_MSG_MAP_EX(thisClass)
234                MSG_WM_DESTROY(OnDestroy)
235
236                CHAIN_MSG_MAP(autosizeClass)
237                CHAIN_MSG_MAP(sheetClass)
238                REFLECT_NOTIFICATIONS()
239    END_MSG_MAP()
240
241        static CWindowMapStruct* GetWindowMap();
242       
243        BOOL PreTranslateMessage(MSG* pMsg)
244        {
245                return this->IsDialogMessage(pMsg);
246        }
247       
248        void OnFileBrowse(UINT, int, HWND hWnd) {}
249        void OnDestroy() {}
250       
251private:
252};
253
254class NewTorrentDialog :
255        public CPropertySheet,
256        public hal::IniBase<NewTorrentDialog>,
257        public CDialogResize<NewTorrentDialog>
258{
259        typedef NewTorrentDialog thisClass;
260        typedef hal::IniBase<thisClass> iniClass;
261        typedef CDialogResize<thisClass> resizeClass;
262
263public:
264    NewTorrentDialog(LPCTSTR title = (LPCTSTR)NULL,
265                        UINT uStartPage = 0, HWND hWndParent = NULL) :
266        CPropertySheet(title, uStartPage, hWndParent),
267                iniClass("NewTorrentDialog", "Dialog"),
268                m_bCentered(false),
269                rect_(50,50,400,500)
270    {
271                AddPage(fileSheet);
272                AddPage(trackerSheet);
273                AddPage(detailsSheet);         
274        }
275
276    BEGIN_MSG_MAP_EX(thisClass)
277        MSG_WM_SHOWWINDOW(OnShowWindow)
278                MSG_WM_SIZE(OnSize)
279                MSG_WM_DESTROY(OnDestroy)
280
281                CHAIN_MSG_MAP(resizeClass)
282        CHAIN_MSG_MAP(CPropertySheet)
283    END_MSG_MAP()
284
285    BEGIN_DLGRESIZE_MAP(thisClass)
286                DLGRESIZE_CONTROL(0x3020, DLSZ_SIZE_X|DLSZ_SIZE_Y)
287
288                DLGRESIZE_CONTROL(0x1, DLSZ_MOVE_X|DLSZ_MOVE_Y)
289                DLGRESIZE_CONTROL(0x2, DLSZ_MOVE_X|DLSZ_MOVE_Y)
290                DLGRESIZE_CONTROL(0x3021, DLSZ_MOVE_X|DLSZ_MOVE_Y)
291        END_DLGRESIZE_MAP()
292
293        LRESULT OnInitDialog(HWND, LPARAM);
294        void OnDestroy() {}
295
296        void OnSize(UINT, CSize)
297        {
298        SetMsgHandled(false);
299
300                GetWindowRect(rect_);
301                resizeActiveSheet();
302        }
303
304    void OnShowWindow(BOOL bShow, UINT nStatus)
305    {
306                hal::event().post(shared_ptr<hal::EventDetail>(
307                        new hal::EventMsg(L"NewTorrentDialog::OnShowWindow()")));       
308
309        SetMsgHandled(false);
310
311        if (bShow == TRUE)
312        {
313            CMenuHandle pSysMenu = GetSystemMenu(FALSE);
314
315                if (pSysMenu != NULL)
316                pSysMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, SC_SIZE, L"&Size");
317
318            ModifyStyle(0, WS_THICKFRAME, 0);
319            Center();
320
321            resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
322        }
323
324                resizeActiveSheet();
325    }
326
327    void Center(void)
328    {
329        if (!m_bCentered)
330        {
331            CenterWindow();
332            m_bCentered = true;
333        }
334    }
335
336        friend class boost::serialization::access;
337    template<class Archive>
338    void serialize(Archive& ar, const unsigned int version)
339        {
340                ar & BOOST_SERIALIZATION_NVP(rect_);
341        }
342
343private:
344    bool m_bCentered;
345        CRect rect_;
346
347        void resizeActiveSheet()
348        {
349        HWND propTabs = GetDlgItem(0x3020);
350
351                RECT rect;
352                ::GetWindowRect(propTabs, &rect);
353
354                ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2);
355                ::SendMessage(propTabs, TCM_ADJUSTRECT, false, (LPARAM)&rect);
356
357                ::MoveWindow(GetActivePage(), rect.left, rect.top,
358            rect.right-rect.left, rect.bottom-rect.top, true);
359        }
360
361        FileSheet fileSheet;
362        TrackerSheet trackerSheet;
363        DetailsSheet detailsSheet;
364
365};
366
367
368#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.