source: trunk/src/AddTorrentDialog.hpp @ 614

Revision 614, 9.1 KB checked in by Eoin, 11 years ago (diff)

ListView? grouping works. But a lacking on the API side means it's incompatible with sorting!

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 ID_ADD_TORRENT_BEGIN            11000
10#define HAL_ADJUST_DLG_HOLDER           ID_ADD_TORRENT_BEGIN + 1
11#define HAL_ADDT_ALLOC_COMBO            ID_ADD_TORRENT_BEGIN + 2
12#define HAL_ADDT_CHECK_MANAGED          ID_ADD_TORRENT_BEGIN + 3
13#define HAL_ADDT_ALLOC_MODE                     ID_ADD_TORRENT_BEGIN + 4
14
15
16#ifndef RC_INVOKED
17
18#include <boost/function.hpp>
19#include "HaliteListViewDlg.hpp"
20#include "halTorrent.hpp"
21
22class AddTorrentDialog :
23        public ATL::CDialogImpl<AddTorrentDialog>,
24        public ATL::CAutoSizeWindow<AddTorrentDialog, true>,
25    public CWinDataExchangeEx<AddTorrentDialog>,
26        private hal::IniBase<AddTorrentDialog>
27{
28protected:
29        typedef AddTorrentDialog thisClass;
30        typedef ATL::CDialogImpl<thisClass> baseClass;
31        typedef ATL::CAutoSizeWindow<thisClass, true> autosizeClass;
32        typedef hal::IniBase<thisClass> iniClass;
33
34        typedef std::map<wstring, hal::bit::allocations> wstr2alloc_map;
35
36public:
37        AddTorrentDialog(wstring& d, wstring& m, bool& u, bool& p, bool& man, hal::bit::allocations& a_t) :       
38                iniClass("AddTorrentDialog", "settings"),
39                rect_(0,0,0,0),
40                adjustDlg_(d, m, u),
41                startPaused_(p),
42                managed_(man),
43                allocation_type_(a_t)
44        { 
45                load_from_ini(); 
46        }
47
48        ~AddTorrentDialog() 
49        { 
50                save_to_ini(); 
51        }       
52
53        enum { IDD = HAL_ADD_TORRENT };
54
55    BEGIN_MSG_MAP_EX(thisClass)
56        MSG_WM_INITDIALOG(OnInitDialog)
57
58                COMMAND_ID_HANDLER_EX(IDCANCEL, OnCancel)
59                COMMAND_ID_HANDLER_EX(IDOK, OnOk)
60               
61        CHAIN_MSG_MAP(autosizeClass)
62    END_MSG_MAP()
63       
64    BEGIN_DDX_MAP(thisClass)
65        DDX_CHECK(HAL_ADDT_CHECK_MANAGED, managed_)
66        DDX_CHECK(HAL_CHECK_PAUSED, startPaused_)
67                DDX_EX_STDWSTRING(HAL_ADDT_ALLOC_COMBO, allocation_type_name_)
68    END_DDX_MAP()       
69
70#define ADD_BUTTONS_LAYOUT \
71        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COL(_auto), WMB_COL(_auto)), \
72                WMB_ROW(_auto,  0, IDOK, IDCANCEL), \
73        WMB_END()
74
75#define ALLOC_MODE_LAYOUT \
76        WMB_HEAD(WMB_COLNOMAX(_exp|33), WMB_COLNOMAX(_exp)), \
77                WMB_ROW(_auto,  HAL_ADDT_ALLOC_MODE, HAL_ADDT_ALLOC_COMBO), \
78        WMB_END()
79
80        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
81                WMB_HEAD(WMB_COLNOMAX(_exp)),
82                        WMB_ROW(_exp,   HAL_ADJUST_DLG), 
83                        WMB_ROW(_gap,   _d),
84                        WMB_ROW(_auto,  ALLOC_MODE_LAYOUT), 
85                        WMB_ROW(_auto,  HAL_ADDT_CHECK_MANAGED), 
86                        WMB_ROW(_auto,  HAL_CHECK_PAUSED), 
87                        WMB_ROW(_auto,  HAL_ADDT_NOTE_TEXT), 
88                        WMB_ROW(_gap,   _d),
89                        WMB_ROW(_auto,  ADD_BUTTONS_LAYOUT), 
90                WMB_END()
91        END_WINDOW_MAP()       
92
93        LRESULT OnInitDialog(HWND hwndFocus, LPARAM lParam)
94        {
95                if (rect_.left == rect_.right)
96                {
97                        CenterWindow();
98                        GetWindowRect(rect_);
99                }
100                else 
101                {
102                        MoveWindow(rect_.left, rect_.top, rect_.right-rect_.left, rect_.bottom-rect_.top, false);               
103                }
104
105                adjustDlg_.Create(*this);
106                adjustDlg_.ShowWindow(SW_SHOW);
107                adjustDlg_.SetDlgCtrlID(HAL_ADJUST_DLG);
108
109                CtrlsInitialize();
110                CtrlsArrange();
111
112                allocation_type_map_[L"Full Allocation"] = hal::bit::full_allocation;
113                allocation_type_map_[L"Compact Allocation"] = hal::bit::compact_allocation;
114                allocation_type_map_[L"Sparse Allocation"] = hal::bit::sparse_allocation;
115
116                allocation_type_name_ = L"Sparse Allocation";
117
118                foreach (wstr2alloc_map::value_type i, allocation_type_map_)
119                {
120                        ::SendMessage(GetDlgItem(HAL_ADDT_ALLOC_COMBO), CB_ADDSTRING, 0, (LPARAM)i.first.c_str());
121                }
122                ::SendMessage(GetDlgItem(HAL_ADDT_ALLOC_COMBO), CB_SELECTSTRING, 0, (LPARAM)L"Sparse");
123               
124                BOOL retval =  DoAllDataxchange(false);
125                return retval;
126        }
127
128        BOOL PreTranslateMessage(MSG* pMsg)
129        {
130                return this->IsDialogMessage(pMsg);
131        }
132       
133        void OnCancel(UINT, int, HWND hWnd)
134        {
135                GetWindowRect(rect_);
136                EndDialog(IDCANCEL);
137        }
138       
139        void OnOk(UINT, int, HWND hWnd)
140        {
141                DoAllDataxchange(true);
142
143                allocation_type_ = allocation_type_map_[allocation_type_name_];
144
145                GetWindowRect(rect_);
146                EndDialog(IDOK);
147        }
148
149    friend class boost::serialization::access;
150    template<class Archive>
151    void serialize(Archive& ar, const unsigned int version)
152        {
153                ar & boost::serialization::make_nvp("rect", rect_);
154        }
155
156private:
157        BOOL DoAllDataxchange(bool direction)
158        {
159                adjustDlg_.DoDataExchange(direction);
160                return DoDataExchange(direction);
161        }
162
163        HaliteSaveAndMoveToDlg adjustDlg_;
164
165        WTL::CRect rect_;
166        bool& startPaused_;
167        bool& managed_;
168        hal::bit::allocations& allocation_type_;
169
170        wstring allocation_type_name_;
171        wstr2alloc_map allocation_type_map_;
172};
173
174#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.