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!

RevLine 
[324]1
2//         Copyright Eoin O'Callaghan 2006 - 2008.
[370]3// Distributed under the Boost Software License, Version 1.0.
[324]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
[403]17
18#include <boost/function.hpp>
[437]19#include "HaliteListViewDlg.hpp"
[403]20#include "halTorrent.hpp"
[614]21
[612]22class AddTorrentDialog :
[614]23        public ATL::CDialogImpl<AddTorrentDialog>,
24        public ATL::CAutoSizeWindow<AddTorrentDialog, true>,
25    public CWinDataExchangeEx<AddTorrentDialog>,
26        private hal::IniBase<AddTorrentDialog>
[403]27{
28protected:
[614]29        typedef AddTorrentDialog thisClass;
30        typedef ATL::CDialogImpl<thisClass> baseClass;
[403]31        typedef ATL::CAutoSizeWindow<thisClass, true> autosizeClass;
32        typedef hal::IniBase<thisClass> iniClass;
33
34        typedef std::map<wstring, hal::bit::allocations> wstr2alloc_map;
[324]35
36public:
[436]37        AddTorrentDialog(wstring& d, wstring& m, bool& u, bool& p, bool& man, hal::bit::allocations& a_t) :       
38                iniClass("AddTorrentDialog", "settings"),
[324]39                rect_(0,0,0,0),
40                adjustDlg_(d, m, u),
41                startPaused_(p),
42                managed_(man),
43                allocation_type_(a_t)
44        { 
[493]45                load_from_ini(); 
[324]46        }
[493]47
[403]48        ~AddTorrentDialog() 
[436]49        { 
[324]50                save_to_ini(); 
[436]51        }       
52
[324]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)
[493]59                COMMAND_ID_HANDLER_EX(IDOK, OnOk)
[324]60               
[493]61        CHAIN_MSG_MAP(autosizeClass)
[403]62    END_MSG_MAP()
[436]63       
64    BEGIN_DDX_MAP(thisClass)
[324]65        DDX_CHECK(HAL_ADDT_CHECK_MANAGED, managed_)
66        DDX_CHECK(HAL_CHECK_PAUSED, startPaused_)
[612]67                DDX_EX_STDWSTRING(HAL_ADDT_ALLOC_COMBO, allocation_type_name_)
68    END_DDX_MAP()       
69
70#define ADD_BUTTONS_LAYOUT \
[324]71        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COL(_auto), WMB_COL(_auto)), \
72                WMB_ROW(_auto,  0, IDOK, IDCANCEL), \
[614]73        WMB_END()
[324]74
[436]75#define ALLOC_MODE_LAYOUT \
[324]76        WMB_HEAD(WMB_COLNOMAX(_exp|33), WMB_COLNOMAX(_exp)), \
[436]77                WMB_ROW(_auto,  HAL_ADDT_ALLOC_MODE, HAL_ADDT_ALLOC_COMBO), \
[403]78        WMB_END()
[436]79
[403]80        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
[324]81                WMB_HEAD(WMB_COLNOMAX(_exp)),
82                        WMB_ROW(_exp,   HAL_ADJUST_DLG), 
[614]83                        WMB_ROW(_gap,   _d),
[324]84                        WMB_ROW(_auto,  ALLOC_MODE_LAYOUT), 
[612]85                        WMB_ROW(_auto,  HAL_ADDT_CHECK_MANAGED), 
86                        WMB_ROW(_auto,  HAL_CHECK_PAUSED), 
[491]87                        WMB_ROW(_auto,  HAL_ADDT_NOTE_TEXT), 
[324]88                        WMB_ROW(_gap,   _d),
[491]89                        WMB_ROW(_auto,  ADD_BUTTONS_LAYOUT), 
90                WMB_END()
91        END_WINDOW_MAP()       
92
[436]93        LRESULT OnInitDialog(HWND hwndFocus, LPARAM lParam)
[324]94        {
[437]95                if (rect_.left == rect_.right)
[436]96                {
[491]97                        CenterWindow();
[437]98                        GetWindowRect(rect_);
[491]99                }
100                else 
101                {
102                        MoveWindow(rect_.left, rect_.top, rect_.right-rect_.left, rect_.bottom-rect_.top, false);               
[436]103                }
104
[495]105                adjustDlg_.Create(*this);
[324]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;
[403]113                allocation_type_map_[L"Compact Allocation"] = hal::bit::compact_allocation;
114                allocation_type_map_[L"Sparse Allocation"] = hal::bit::sparse_allocation;
[324]115
116                allocation_type_name_ = L"Sparse Allocation";
117
118                foreach (wstr2alloc_map::value_type i, allocation_type_map_)
[403]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");
[324]123               
124                BOOL retval =  DoAllDataxchange(false);
125                return retval;
126        }
127
128        BOOL PreTranslateMessage(MSG* pMsg)
[614]129        {
[324]130                return this->IsDialogMessage(pMsg);
[495]131        }
[324]132       
[614]133        void OnCancel(UINT, int, HWND hWnd)
[612]134        {
[324]135                GetWindowRect(rect_);
136                EndDialog(IDCANCEL);
[403]137        }
[324]138       
[403]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
[614]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        {
[403]159                adjustDlg_.DoDataExchange(direction);
160                return DoDataExchange(direction);
161        }
162
[436]163        HaliteSaveAndMoveToDlg adjustDlg_;
[403]164
165        WTL::CRect rect_;
166        bool& startPaused_;
[614]167        bool& managed_;
[403]168        hal::bit::allocations& allocation_type_;
[614]169
170        wstring allocation_type_name_;
[495]171        wstr2alloc_map allocation_type_map_;
[403]172};
[495]173
[403]174#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.