source: trunk/src/AddTorrentDialog.hpp @ 612

Revision 612, 8.6 KB checked in by Eoin, 12 years ago (diff)

Allocation mode combobox.

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