source: trunk/src/ConfigOptions.hpp @ 542

Revision 542, 72.5 KB checked in by Eoin, 11 years ago (diff)

Updating HaliteWindow? serialization.

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_CONFIG_BEGIN                         12000
10#define HAL_SECURITY_IPF_GB             ID_CONFIG_BEGIN + 1
11#define HAL_SECURITY_PE_GB                      ID_CONFIG_BEGIN + 2
12#define HAL_SECURITY_CP_GB                      ID_CONFIG_BEGIN + 3
13#define HAL_SECURITY_EL_GB                      ID_CONFIG_BEGIN + 4
14#define HAL_SECURITY_OUTGOING           ID_CONFIG_BEGIN + 5
15#define HAL_SECURITY_INCOMING           ID_CONFIG_BEGIN + 6
16#define HAL_SECURITY_ENABLED            ID_CONFIG_BEGIN + 7
17#define HAL_SECURITY_FORCED                     ID_CONFIG_BEGIN + 8
18#define HAL_SECURITY_DISABLED           ID_CONFIG_BEGIN + 9
19#define HAL_BITT_OPENPORT                       ID_CONFIG_BEGIN + 10
20#define HAL_BITT_GDHT                           ID_CONFIG_BEGIN + 11
21#define HAL_BITT_DHT_NOTE                       ID_CONFIG_BEGIN + 12
22#define HAL_BITT_GSETTINGS                      ID_CONFIG_BEGIN + 13
23#define HAL_BITT_SELECT_TEXT            ID_CONFIG_BEGIN + 14
24#define HAL_CONFIGT_TOTALMAX            ID_CONFIG_BEGIN + 15
25#define HAL_CONFIGT_TOTALUP                     ID_CONFIG_BEGIN + 16
26#define HAL_CONFIGT_DOWNRATE            ID_CONFIG_BEGIN + 17
27#define HAL_CONFIGT_UPRATE                      ID_CONFIG_BEGIN + 18
28#define HAL_CONFIGT_TORMAX                      ID_CONFIG_BEGIN + 19
29#define HAL_CONFIGT_TORUP                       ID_CONFIG_BEGIN + 20
30#define HAL_CONFIGT_TORDOWNRATE         ID_CONFIG_BEGIN + 21
31#define HAL_CONFIGT_TORUPRATE           ID_CONFIG_BEGIN + 22
32#define HAL_CONFIGT_GLOBAL_TEXT         ID_CONFIG_BEGIN + 23
33#define HAL_CONFIGT_TOR_TEXT            ID_CONFIG_BEGIN + 24
34#define HAL_CONFIGT_DEF_FOLDER          ID_CONFIG_BEGIN + 25
35#define HAL_CONFIGT_GLOBALG             ID_CONFIG_BEGIN + 26
36#define HAL_CONFIGT_TORRENTG            ID_CONFIG_BEGIN + 27
37#define HAL_CONFIGT_TDOWNRATE           ID_CONFIG_BEGIN + 28
38#define HAL_GENERAL_GROUP                       ID_CONFIG_BEGIN + 29
39#define HAL_GENERAL_LANG                        ID_CONFIG_BEGIN + 30
40#define HAL_GENERAL_CLOSETRAY           ID_CONFIG_BEGIN + 31
41#define HAL_GENERAL_CONFIRMCLOSE        ID_CONFIG_BEGIN + 32
42#define HAL_ABOUT_GROUP                 ID_CONFIG_BEGIN + 33
43#define HAL_ABOUT_VERSION               ID_CONFIG_BEGIN + 34
44#define HAL_BITT_GPORTFORWARDING        ID_CONFIG_BEGIN + 35
45#define HAL_BITT_GPORTFORWARD_NONE      ID_CONFIG_BEGIN + 36
46#define HAL_BITT_GPORTFORWARD_UPNG      ID_CONFIG_BEGIN + 37
47#define HAL_BIT_GPORTFORWARD_NATPMP     ID_CONFIG_BEGIN + 38
48#define HAL_BITT_GPORTFORWARD_TEST      ID_CONFIG_BEGIN + 39
49#define HAL_BITT_GPORTFORWARD_LIST      ID_CONFIG_BEGIN + 40
50#define HAL_BC_MOVETO_FOLDER            ID_CONFIG_BEGIN + 41
51#define HAL_BC_MOVETO_BROWSE            ID_CONFIG_BEGIN + 42
52#define HAL_BC_MOVETO_TEXT                      ID_CONFIG_BEGIN + 43
53#define HAL_BC_MOVETO_CHECK                     ID_CONFIG_BEGIN + 44
54#define HAL_BC_DHT_EXT                          ID_CONFIG_BEGIN + 45
55#define HAL_BC_METADATADHT_EXT          ID_CONFIG_BEGIN + 46
56#define HAL_BC_uT_METADATA_EXT          ID_CONFIG_BEGIN + 47
57#define HAL_BC_uT_PEEER_EX_EXT          ID_CONFIG_BEGIN + 48
58#define HAL_BC_SMART_BAN_PLUGIN_EXT     ID_CONFIG_BEGIN + 49
59#define HAL_BC_EXT_GROUP                        ID_CONFIG_BEGIN + 50
60
61#define HAL_CGLOBAL_QUEUEG                      ID_CONFIG_BEGIN + 51
62#define HAL_CGLOBAL_ACTDOWNT            ID_CONFIG_BEGIN + 52
63#define HAL_CGLOBAL_ACTDOWN                     ID_CONFIG_BEGIN + 53
64#define HAL_CGLOBAL_ACTSEEDT            ID_CONFIG_BEGIN + 54
65#define HAL_CGLOBAL_ACTSEED                     ID_CONFIG_BEGIN + 55
66#define HAL_CGLOBAL_DISCOUNTSLOW        ID_CONFIG_BEGIN + 56
67#define HAL_CGLOBAL_ACTSEEDHARDT        ID_CONFIG_BEGIN + 57
68#define HAL_CGLOBAL_ACTSEEDHARD         ID_CONFIG_BEGIN + 58
69#define HAL_CGLOBAL_SEEDINGG            ID_CONFIG_BEGIN + 59
70#define HAL_CGLOBAL_SHARERATIOT         ID_CONFIG_BEGIN + 60
71#define HAL_CGLOBAL_SHARERATIO          ID_CONFIG_BEGIN + 61
72#define HAL_CGLOBAL_SHARERATIOTIMET     ID_CONFIG_BEGIN + 62
73#define HAL_CGLOBAL_SHARERATIOTIME      ID_CONFIG_BEGIN + 63
74#define HAL_CGLOBAL_SHARETIMET          ID_CONFIG_BEGIN + 64
75#define HAL_CGLOBAL_SHARETIME           ID_CONFIG_BEGIN + 65
76
77#ifndef RC_INVOKED
78
79#include "stdAfx.hpp"
80
81#include "Halite.hpp"
82#include "halConfig.hpp"
83#include "HaliteWindow.hpp"
84#include "HaliteEditCtrl.hpp"
85
86#include "DdxEx.hpp"
87#include "CSSFileDialog.hpp"
88#include "AtlAutosizeDlg.h"
89
90class GeneralOptions :
91    public WTL::CPropertyPageImpl<GeneralOptions>,
92        public ATL::CAutoSizeWindow<GeneralOptions, false>,
93    public WTL::CWinDataExchange<GeneralOptions>
94{
95        typedef GeneralOptions thisClass;
96        typedef WTL::CPropertyPageImpl<thisClass> propPageClass;
97        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
98       
99public:
100    enum { IDD = HAL_CONFIGGENERAL };
101
102        GeneralOptions(HaliteWindow* haliteWindow) :
103                haliteWindow_(haliteWindow)
104        {}
105
106        ~GeneralOptions()
107        {}
108
109    BEGIN_MSG_MAP_EX(GeneralOptions)
110                MSG_WM_INITDIALOG(OnInitDialog)
111        CHAIN_MSG_MAP(CPropertyPageImpl<GeneralOptions>)
112        CHAIN_MSG_MAP(autosizeClass)
113    END_MSG_MAP()
114
115    BEGIN_DDX_MAP(GeneralOptions)
116        DDX_CHECK(HAL_GENERAL_ONEINST, halite().oneInst)
117        DDX_CHECK(HAL_GENERAL_TRAY, haliteWindow_->use_tray)
118        DDX_CHECK(HAL_GENERAL_ADVGUI, haliteWindow_->advancedUI)
119        DDX_CHECK(HAL_GENERAL_CLOSETRAY, haliteWindow_->closeToTray)
120        DDX_CHECK(HAL_GENERAL_CONFIRMCLOSE, haliteWindow_->confirmClose)
121    END_DDX_MAP()
122
123#define GENERAL_CONFIG_LAYOUT \
124        WMB_HEAD(WMB_COLNOMAX(_exp)), \
125                WMB_ROW(_gap,   _d), \
126                WMB_ROW(_auto,  HAL_GENERAL_ONEINST), \
127                WMB_ROW(_auto,  HAL_GENERAL_ADVGUI), \
128                WMB_ROW(_auto,  HAL_GENERAL_TRAY), \
129                WMB_ROW(_auto,  HAL_GENERAL_CLOSETRAY), \
130                WMB_ROW(_auto,  HAL_GENERAL_CONFIRMCLOSE), \
131        WMB_END()
132
133#define GENERAL_LANGUAGE_LAYOUT \
134        WMB_HEAD(WMB_COLNOMAX(_exp)), \
135                WMB_ROW(_auto,  HAL_GENERAL_LANG), \
136                WMB_ROW(_auto,  HAL_LANGLIST), \
137        WMB_END()
138
139        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
140                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)),
141                        WMB_ROW(_gap|3, HAL_GENERAL_GROUP, _r, _r, _r), 
142                        WMB_ROW(_auto,  _d, GENERAL_CONFIG_LAYOUT, GENERAL_LANGUAGE_LAYOUT), 
143                        WMB_ROW(_gap,   _d),
144                WMB_END()
145        END_WINDOW_MAP()       
146
147    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam);
148
149    int OnApply()
150        {       
151                hal::event_log.post(shared_ptr<hal::EventDetail>(
152                        new hal::EventMsg(L"Applying general options.", hal::event_logger::info)));
153
154                size_t length = lang_list_.GetTextLen(lang_list_.GetCurSel());
155                boost::scoped_array<wchar_t> buffer(new wchar_t[length+1]);
156               
157                lang_list_.GetText(lang_list_.GetCurSel(), buffer.get());
158                std::wstring language(buffer.get(), length);
159
160                if (language == L"English")
161                {
162                        halite().dll_ = L"";
163                        hal::app().res_revert();
164                }
165                else
166                {
167                        halite().dll_ = lang_map_[language].external_file_string();
168                        hal::app().res_set_dll(lang_map_[language].external_file_string());
169                }
170               
171                return DoDataExchange(true);
172        }
173
174private:
175        WTL::CListBox lang_list_;
176        std::map<wstring, wpath> lang_map_;
177        HaliteWindow* haliteWindow_;
178};
179
180class BitTorrentOptions :
181    public WTL::CPropertyPageImpl<BitTorrentOptions>,
182        public ATL::CAutoSizeWindow<BitTorrentOptions, false>,
183    public CWinDataExchangeEx<BitTorrentOptions>
184{
185        typedef BitTorrentOptions thisClass;
186        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
187       
188public:
189    enum { IDD = HAL_CONFIGBIT };
190
191        BitTorrentOptions()
192        {}
193
194    BEGIN_MSG_MAP_EX(thisClass)
195        MSG_WM_INITDIALOG(OnInitDialog)
196               
197        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
198        CHAIN_MSG_MAP(autosizeClass)
199    END_MSG_MAP()
200
201    BEGIN_DDX_MAP(thisClass)
202    END_DDX_MAP()
203
204#define BITT_EXT_LAYOUT \
205                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
206                WMB_ROW(_gap|3, HAL_BC_EXT_GROUP, _r, _r), \
207                WMB_ROW(_auto,  _d, HAL_BC_METADATADHT_EXT), \
208                WMB_ROW(_auto,  _d, HAL_BC_uT_METADATA_EXT), \
209                WMB_ROW(_auto,  _d, HAL_BC_uT_PEEER_EX_EXT), \
210                WMB_ROW(_auto,  _d, HAL_BC_SMART_BAN_PLUGIN_EXT), \
211                WMB_ROW(_gap,   _d), \
212        WMB_END()
213
214        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
215                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)),
216                        WMB_ROW(_auto,  BITT_EXT_LAYOUT, _r, _r), 
217                        WMB_ROW(_gap,   _d),
218                WMB_END()
219        END_WINDOW_MAP()
220
221    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
222        {                       
223                BOOL retval = DoDataExchange(false);
224
225                autosizeClass::CtrlsArrange();
226                return retval;
227        }
228
229    int OnApply()
230        {
231                hal::event_log.post(shared_ptr<hal::EventDetail>(
232                        new hal::EventMsg(L"Applying bittorrent options.", hal::event_logger::info)));
233
234
235                return DoDataExchange(true);
236        }
237
238
239private:
240//      WTL::CHyperLink helpLink;
241//      WTL::CHyperLink whyHalfConn;
242};
243
244class PortOptions :
245    public WTL::CPropertyPageImpl<PortOptions>,
246        public ATL::CAutoSizeWindow<PortOptions, false>,
247    public CWinDataExchangeEx<PortOptions>
248{
249        typedef PortOptions thisClass;
250        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
251       
252public:
253    enum { IDD = HAL_CONFIGPORTS };
254
255        PortOptions()
256        {}
257
258    BEGIN_MSG_MAP_EX(thisClass)
259        MSG_WM_INITDIALOG(OnInitDialog)
260                COMMAND_ID_HANDLER_EX(HAL_BC_PORTCHECK, onPortCheck)
261                COMMAND_ID_HANDLER_EX(HAL_BC_HALFCONN_CHECK, onHalfCheck)
262                COMMAND_ID_HANDLER_EX(HAL_BC_DHT, onDHTCheck)
263               
264        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
265        CHAIN_MSG_MAP(autosizeClass)
266    END_MSG_MAP()
267
268    BEGIN_DDX_MAP(thisClass)
269        DDX_CHECK(HAL_BC_PORTCHECK, hal::config().use_port_range_)
270        DDX_INT(HAL_BC_PORTFROM, hal::config().port_range_.first)
271        DDX_INT(HAL_BC_PORTTO, hal::config().port_range_.second)               
272        DDX_CHECK(HAL_BC_HALFCONN_CHECK, hal::config().half_connections_)
273        DDX_EX_INT_POSITIVE(HAL_BC_HALFCONN_NUM, hal::config().half_connections_limit_)
274        DDX_CHECK(HAL_BC_DHT, hal::config().enable_dht_)
275        DDX_INT(HAL_BC_DHTPORT, hal::config().dht_settings_.service_port)
276        DDX_CHECK(HAL_BITT_GPORTFORWARD_UPNG, hal::config().mapping_upnp_)
277        DDX_CHECK(HAL_BIT_GPORTFORWARD_NATPMP, hal::config().mapping_nat_pmp_)
278    END_DDX_MAP()
279       
280#define BITT_GS_LAYOUT \
281        WMB_HEAD(WMB_COLNOMAX(_exp|250), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
282                WMB_ROW(_auto,  HAL_BITT_SELECT_TEXT, _r, _r, _r), \
283                WMB_ROW(_auto,  HAL_BITT_OPENPORT, HAL_BC_PORTFROM, HAL_BC_PORTCHECK, HAL_BC_PORTTO), \
284                WMB_ROW(_auto,  HAL_BC_HALFCONN_CHECK, _r, HAL_BC_HALFCONN_NUM), \
285        WMB_END()
286
287#define BITT_DHT_LAYOUT \
288        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
289                WMB_ROW(_auto,  HAL_BC_DHT, HAL_BITT_DHT_NOTE, _r), \
290                WMB_ROW(_auto,  HAL_BC_DHT_EXT, HAL_BC_DHTPORT_S, HAL_BC_DHTPORT), \
291        WMB_END()
292
293#define BITT_FOR_LAYOUT \
294        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp|50), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
295                WMB_ROW(_gap|3, HAL_BITT_GPORTFORWARDING, _r, _r, _r),\
296                WMB_ROW(_auto,  _d, HAL_BITT_GPORTFORWARD_UPNG, HAL_BITT_GPORTFORWARD_TEST), \
297                WMB_ROW(_auto,  _d, HAL_BIT_GPORTFORWARD_NATPMP, _r), \
298                WMB_ROW(_gap,   _d), \
299        WMB_END()
300
301        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
302                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)),
303                        WMB_ROW(_gap|3, HAL_BITT_GSETTINGS, _r, _r), 
304                        WMB_ROW(_auto,  _d, BITT_GS_LAYOUT),
305                        WMB_ROW(_gap,   _d),
306                        WMB_ROW(_gap|3, HAL_BITT_GDHT, _r, _r,  HAL_BITT_GDHT, _r, _r),
307                        WMB_ROW(_auto,  _d, BITT_DHT_LAYOUT), 
308                        WMB_ROW(_gap,   _d),
309                        WMB_ROW(_auto,  BITT_FOR_LAYOUT, _r, _r), 
310                        WMB_ROW(_gap,   _d),
311                WMB_END()
312        END_WINDOW_MAP()
313
314    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
315        {       
316//              helpLink.SubclassWindow(GetDlgItem(HAL_BC_EXT_GROUP));
317//              helpLink.SetHyperLink(L"http://www.binarynotions.com/");
318               
319//              whyHalfConn.SubclassWindow(GetDlgItem(HAL_BC_CON_WHY));
320//              whyHalfConn.SetHyperLink(L"http://www.binarynotions.com/");
321               
322                BOOL retval = DoDataExchange(false);
323
324                onHalfCheck(0, 0, GetDlgItem(HAL_BC_HALFCONN_CHECK));
325                onPortCheck(0, 0, GetDlgItem(HAL_BC_PORTCHECK));
326                onDHTCheck(0, 0, GetDlgItem(HAL_BC_DHT));
327
328                autosizeClass::CtrlsArrange();
329                return retval;
330        }
331
332    int OnApply()
333        {
334                hal::event_log.post(shared_ptr<hal::EventDetail>(
335                        new hal::EventMsg(L"Applying bittorrent options.", hal::event_logger::info)));
336
337                onPortCheck(0, 0, GetDlgItem(HAL_BC_PORTCHECK));
338
339                return DoDataExchange(true);
340        }
341
342        void onDHTCheck(UINT, int, HWND hWnd)
343        {
344                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
345
346                if (result == BST_CHECKED)
347                {
348                        ::EnableWindow(GetDlgItem(HAL_BC_DHTPORT), true);
349                        ::EnableWindow(GetDlgItem(HAL_BC_DHTPORT_S), true);
350                }
351                else
352                {
353                        ::EnableWindow(GetDlgItem(HAL_BC_DHTPORT), false);
354                        ::EnableWindow(GetDlgItem(HAL_BC_DHTPORT_S), false);
355                }
356        }
357
358        void onPortCheck(UINT, int, HWND hWnd)
359        {
360                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
361
362                if (result == BST_CHECKED)
363                {
364                        ::EnableWindow(GetDlgItem(HAL_BC_PORTTO), true);
365                }
366                else
367                {
368                        ::EnableWindow(GetDlgItem(HAL_BC_PORTTO), false);
369                        boost::array<wchar_t, MAX_PATH> buffer;
370                        GetDlgItemText(HAL_BC_PORTFROM, buffer.elems, MAX_PATH);
371                        SetDlgItemText(HAL_BC_PORTTO, buffer.elems);
372                }
373        }
374
375        void onHalfCheck(UINT, int, HWND hWnd)
376        {
377                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
378
379                if (result == BST_CHECKED)
380                {
381                        ::EnableWindow(GetDlgItem(HAL_BC_HALFCONN_NUM), true);
382                }
383                else
384                {
385                        ::EnableWindow(GetDlgItem(HAL_BC_HALFCONN_NUM), false);
386                        SetDlgItemText(HAL_BC_HALFCONN_NUM, L"");
387                }
388        }
389
390private:
391//      WTL::CHyperLink helpLink;
392//      WTL::CHyperLink whyHalfConn;
393};
394
395class ProxyOptions :
396    public WTL::CPropertyPageImpl<ProxyOptions>,
397    public CWinDataExchangeEx<ProxyOptions>
398{
399public:
400    enum { IDD = HAL_CONFIGPROXY };
401
402        ProxyOptions()
403        {}
404
405        ~ProxyOptions()
406        {}
407
408    BEGIN_MSG_MAP_EX(ProxyOptions)
409        MSG_WM_INITDIALOG(OnInitDialog)
410                COMMAND_ID_HANDLER_EX(HAL_BC_PROXYCHECK, onProxyCheck)
411        CHAIN_MSG_MAP(CPropertyPageImpl<ProxyOptions>)
412    END_MSG_MAP()
413
414    BEGIN_DDX_MAP(ProxyOptions)
415       
416    END_DDX_MAP()
417
418    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
419        {
420                BOOL retval =  DoDataExchange(false);
421
422                onProxyCheck(0, 0, GetDlgItem(HAL_BC_PROXYCHECK));
423
424                return retval;
425        }
426
427    int OnApply()
428        {
429                hal::event_log.post(shared_ptr<hal::EventDetail>(
430                        new hal::EventMsg(L"Applying proxy options.", hal::event_logger::info)));
431
432                return DoDataExchange(true);
433        }
434
435        void onPortCheck(UINT, int, HWND hWnd)
436        {
437                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
438
439                if (result == BST_CHECKED)
440                {
441                        ::EnableWindow(GetDlgItem(HAL_BC_PORTTO), true);
442                }
443                else
444                {
445                        ::EnableWindow(GetDlgItem(HAL_BC_PORTTO), false);
446                        boost::array<wchar_t, MAX_PATH> buffer;
447                        GetDlgItemText(HAL_BC_PORTFROM, buffer.elems, MAX_PATH);
448                        SetDlgItemText(HAL_BC_PORTTO, buffer.elems);
449                }
450        }
451
452        void onProxyCheck(UINT, int, HWND hWnd)
453        {
454                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
455
456                if (result == BST_CHECKED)
457                {
458                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYIP), true);
459                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPORT), true);
460                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYUSER), true);
461                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPASS), true);
462                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYIP_S), true);
463                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPORT_S), true);
464                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYUSER_S), true);
465                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPASS_S), true);
466                }
467                else
468                {
469                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYIP), false);
470                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPORT), false);
471                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYUSER), false);
472                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPASS), false);
473                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYIP_S), false);
474                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPORT_S), false);
475                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYUSER_S), false);
476                        ::EnableWindow(GetDlgItem(HAL_BC_PROXYPASS_S), false);
477                }
478        }
479};
480
481class SecurityOptions :
482    public WTL::CPropertyPageImpl<SecurityOptions>,
483        public ATL::CAutoSizeWindow<SecurityOptions, false>,
484    public CWinDataExchangeEx<SecurityOptions>
485{
486        typedef SecurityOptions thisClass;
487        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
488       
489public:
490    enum { IDD = HAL_CONFIGSECURITY };
491
492    BEGIN_MSG_MAP_EX(thisClass)
493        MSG_WM_INITDIALOG(OnInitDialog)
494               
495                COMMAND_ID_HANDLER_EX(HAL_BC_FILTERLOAD, onFilterImport)
496                COMMAND_ID_HANDLER_EX(HAL_BC_FILTERCLEAR, onFilterClear)
497                COMMAND_ID_HANDLER_EX(HAL_BC_FILTERCHECK, onFilterCheck)
498               
499                COMMAND_ID_HANDLER_EX(HAL_SC_ENABLE_PE, onPeCheck)
500               
501        CHAIN_MSG_MAP(autosizeClass)
502        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
503//              MSG_WM_SIZE(OnSize)
504    END_MSG_MAP()
505
506    BEGIN_DDX_MAP(thisClass)
507        DDX_CHECK(HAL_BC_FILTERCHECK, hal::config().enableIPFilter)
508        DDX_CHECK(HAL_SC_ENABLE_PE, hal::config().enable_pe_)
509        DDX_RADIO(HAL_SC_PE_ENC_PLAIN, hal::config().pe_settings_.encrypt_level)
510        DDX_CHECK(HAL_SC_PE_ENC_RC4_PERFER, hal::config().pe_settings_.prefer_rc4)
511        DDX_RADIO(HAL_SC_PE_CP_IN_FORCED, hal::config().pe_settings_.conn_in_policy)
512        DDX_RADIO(HAL_SC_PE_CP_OUT_FORCED, hal::config().pe_settings_.conn_out_policy)
513    END_DDX_MAP()
514       
515/*      void OnSize(UINT type, CSize)
516        {
517               
518                SetMsgHandled(false);
519        }
520*/
521#define SECURITY_IPF_LAYOUT \
522        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
523                WMB_ROW(_auto,  HAL_BC_FILTERCHECK,     HAL_BC_FILTERCLEAR, HAL_BC_FILTERLOAD), \
524        WMB_END()
525
526#define SECURITY_ENCODING_LAYOUT \
527        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
528                WMB_ROW(_auto,  HAL_SC_ENABLE_PE,       _r,_r,_r), \
529                WMB_ROW(_gap|3, HAL_SECURITY_EL_GB,     _r,_r,_r), \
530                WMB_ROW(_auto,  _d,     HAL_SC_PE_ENC_PLAIN, _r), \
531                WMB_ROW(_auto,  _d,     HAL_SC_PE_ENC_RC4, _r), \
532                WMB_ROW(_auto,  _d,     HAL_SC_PE_ENC_BOTH, HAL_SC_PE_ENC_RC4_PERFER), \
533                WMB_ROW(_gap,   _d), \
534        WMB_END()
535
536#define SECURITY_CONNECTION_LAYOUT \
537        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
538                WMB_ROW(_gap|4, HAL_SECURITY_CP_GB,     _r, _r, _r, _r, _r), \
539                WMB_ROW(_auto,  _d,     HAL_SECURITY_INCOMING, _r, HAL_SECURITY_OUTGOING, _r), \
540                WMB_ROW(_auto,  _d,     HAL_SC_PE_CP_IN_FORCED, HAL_SECURITY_FORCED, _r, HAL_SC_PE_CP_OUT_FORCED), \
541                WMB_ROW(_auto,  _d,     HAL_SC_PE_CP_IN_ENABLED, HAL_SECURITY_ENABLED, _r, HAL_SC_PE_CP_OUT_ENABLED), \
542                WMB_ROW(_auto,  _d,     HAL_SC_PE_CP_IN_DISABLED, HAL_SECURITY_DISABLED, _r, HAL_SC_PE_CP_OUT_DISABLED), \
543                WMB_ROW(_gap,   _d), \
544        WMB_END()
545       
546#define SECURITY_PE_LAYOUT \
547        WMB_HEAD(WMB_COLNOMAX(_exp|150), WMB_COLNOMAX(_exp)), \
548                WMB_ROW(_auto,  SECURITY_ENCODING_LAYOUT, SECURITY_CONNECTION_LAYOUT), \
549        WMB_END()
550
551        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
552                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), 
553                        WMB_ROW(_gap|3, HAL_SECURITY_IPF_GB, _r, _r), 
554                        WMB_ROW(_auto,  _d, SECURITY_IPF_LAYOUT), 
555                        WMB_ROW(_gap,   _d), 
556                        WMB_ROW(_gap|3, HAL_SECURITY_PE_GB, _r, _r), 
557                        WMB_ROW(_auto,  _d, SECURITY_PE_LAYOUT),
558                        WMB_ROW(_gap,   _d),
559                WMB_END()
560        END_WINDOW_MAP()       
561
562    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
563        {
564        //      helpLink.SubclassWindow(GetDlgItem(HAL_SC_HELP_LINK));
565        //      helpLink.SetHyperLink(L"http://www.binarynotions.com/");
566
567                BOOL retval =  DoDataExchange(false);
568
569                onFilterCheck(0, 0, GetDlgItem(HAL_BC_FILTERCHECK));
570                onPeCheck(0, 0, GetDlgItem(HAL_SC_ENABLE_PE));
571
572                autosizeClass::CtrlsArrange();
573                return retval;
574        }
575
576    int OnApply()
577        {
578                hal::event_log.post(shared_ptr<hal::EventDetail>(
579                        new hal::EventMsg(L"Applying security options.", hal::event_logger::info)));
580
581                return DoDataExchange(true);
582        }
583
584        void onFilterCheck(UINT, int, HWND hWnd)
585        {
586                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
587
588                if (result == BST_CHECKED)
589                {
590                        ::EnableWindow(GetDlgItem(HAL_BC_FILTERCLEAR), true);
591                        ::EnableWindow(GetDlgItem(HAL_BC_FILTERLOAD), true);
592                }
593                else
594                {
595                        ::EnableWindow(GetDlgItem(HAL_BC_FILTERCLEAR), false);
596                        ::EnableWindow(GetDlgItem(HAL_BC_FILTERLOAD), false);
597                }
598        }
599
600        void onPeCheck(UINT, int, HWND hWnd)
601        {
602                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
603
604                if (result == BST_CHECKED)
605                {
606                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_BOTH), true);
607                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_RC4), true);
608                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_PLAIN), true);
609                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_RC4_PERFER), true);
610                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_FORCED), true);
611                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_DISABLED), true);
612                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_ENABLED), true);
613                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_DISABLED), true);
614                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_ENABLED), true);
615                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_FORCED), true);
616                }
617                else
618                {
619                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_BOTH), false);
620                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_RC4), false);
621                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_PLAIN), false);
622                        ::EnableWindow(GetDlgItem(HAL_SC_PE_ENC_RC4_PERFER), false);
623                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_FORCED), false);
624                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_DISABLED), false);
625                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_IN_ENABLED), false);
626                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_DISABLED), false);
627                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_ENABLED), false);
628                        ::EnableWindow(GetDlgItem(HAL_SC_PE_CP_OUT_FORCED), false);
629                }
630        }
631
632        void onFilterClear(UINT, int, HWND hWnd)
633        {
634                hal::bittorrent().clear_ip_filter();
635        }
636
637        void onFilterImport(UINT, int, HWND hWnd);
638
639private:
640        WTL::CHyperLink helpLink;
641};
642
643class GlobalOptions :
644    public WTL::CPropertyPageImpl<GlobalOptions>,
645        public ATL::CAutoSizeWindow<GlobalOptions, false>,
646    public CWinDataExchangeEx<GlobalOptions>
647{
648        typedef GlobalOptions thisClass;
649        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
650public:
651    enum { IDD = HAL_CONFIGGLOBAL };
652       
653        GlobalOptions() :
654                total_connections_(0, false, false),
655                upload_connections_(0, false, false),
656                download_rate_(0, false, false),
657                upload_rate_(0, false, false)
658        {}
659
660    BEGIN_MSG_MAP_EX(thisClass)
661        MSG_WM_INITDIALOG(OnInitDialog)
662
663        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
664        CHAIN_MSG_MAP(autosizeClass)
665           REFLECT_NOTIFICATIONS()
666    END_MSG_MAP()
667       
668#define CONFIGT_GLOBAL_LAYOUT \
669        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|30), WMB_COLNOMAX(_eq|0), WMB_COLNOMAX(_eq|1)), \
670                WMB_ROW(_auto,  HAL_CONFIGT_GLOBAL_TEXT, _r, _r, _r), \
671                WMB_ROW(_auto,  HAL_CONFIGT_TOTALMAX, HAL_BC_MAXCONN, HAL_CONFIGT_DOWNRATE, HAL_BC_DOWNRATE), \
672                WMB_ROW(_auto,  HAL_CONFIGT_TOTALUP, HAL_BC_MAXUP, HAL_CONFIGT_UPRATE, HAL_BC_UPRATE), \
673        WMB_END()
674
675#define CONFIGT_ACTIVE_LAYOUT \
676        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|70)), \
677                WMB_ROW(_gap|3), \
678                WMB_ROW(_auto, HAL_CGLOBAL_ACTDOWNT, HAL_CGLOBAL_ACTDOWN), \
679                WMB_ROW(_auto, HAL_CGLOBAL_ACTSEEDT, HAL_CGLOBAL_ACTSEED), \
680                WMB_ROW(_auto, HAL_CGLOBAL_ACTSEEDHARDT, HAL_CGLOBAL_ACTSEEDHARD), \
681        WMB_END()
682
683#define CONFIGT_SEEDING_LAYOUT \
684        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|70), WMB_COL(_gap)), \
685                WMB_ROW(_gap|3, HAL_CGLOBAL_SEEDINGG, _r, _r, _r), \
686                WMB_ROW(_auto,  _d, HAL_CGLOBAL_SHARERATIOT, HAL_CGLOBAL_SHARERATIO), \
687                WMB_ROW(_auto,  _d, HAL_CGLOBAL_SHARERATIOTIMET, HAL_CGLOBAL_SHARERATIOTIME), \
688                WMB_ROW(_auto,  _d, HAL_CGLOBAL_SHARETIMET, HAL_CGLOBAL_SHARETIME), \
689                WMB_ROW(_gap,   _d), \
690        WMB_END()
691
692#define CONFIGT_QUEUE_LAYOUT \
693        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COL(_gap), WMB_COLNOMAX(_exp)), \
694                WMB_ROW(_auto, CONFIGT_ACTIVE_LAYOUT, 0,  CONFIGT_SEEDING_LAYOUT), \
695                WMB_ROW(_auto, HAL_CGLOBAL_DISCOUNTSLOW, _r, _r), \
696        WMB_END()
697
698        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
699                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), 
700                        WMB_ROW(_gap|3, HAL_CONFIGT_GLOBALG, _r, _r), 
701                        WMB_ROW(_auto,  _d, CONFIGT_GLOBAL_LAYOUT), 
702                        WMB_ROW(_gap,   _d),
703                        WMB_ROW(_gap|3, HAL_CGLOBAL_QUEUEG, _r, _r), 
704                        WMB_ROW(_auto,  _d, CONFIGT_QUEUE_LAYOUT), 
705                        WMB_ROW(_gap,   _d),
706                WMB_END()
707        END_WINDOW_MAP()
708
709    BEGIN_DDX_MAP(thisClass)
710        DDX_CHECK(HAL_CGLOBAL_DISCOUNTSLOW, hal::config().queue_settings_.dont_count_slow_torrents);
711    END_DDX_MAP()       
712
713    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam)
714        {
715                total_connections_.Attach(GetDlgItem(HAL_BC_MAXCONN));
716                upload_connections_.Attach(GetDlgItem(HAL_BC_MAXUP));
717                download_rate_.Attach(GetDlgItem(HAL_BC_DOWNRATE));
718                upload_rate_.Attach(GetDlgItem(HAL_BC_UPRATE));
719
720                total_connections_ = hal::config().globals_.total;
721                upload_connections_ = hal::config().globals_.uploads;
722                download_rate_ = hal::config().globals_.download_rate;
723                upload_rate_ = hal::config().globals_.upload_rate;
724
725                active_downloads_.Attach(GetDlgItem(HAL_CGLOBAL_ACTDOWN));
726                active_seeds_.Attach(GetDlgItem(HAL_CGLOBAL_ACTSEED));
727                seeds_hard_limit_.Attach(GetDlgItem(HAL_CGLOBAL_ACTSEEDHARD));
728
729                seed_ratio_limit_.Attach(GetDlgItem(HAL_CGLOBAL_SHARERATIO));
730                seed_ratio_time_limit_.Attach(GetDlgItem(HAL_CGLOBAL_SHARERATIOTIME));
731                seed_time_limit_.Attach(GetDlgItem(HAL_CGLOBAL_SHARETIME));             
732       
733                active_downloads_ = hal::config().queue_settings_.active_downloads;
734                active_seeds_ = hal::config().queue_settings_.active_seeds;
735                seeds_hard_limit_ = hal::config().queue_settings_.seeds_hard_limit;
736                seed_ratio_limit_ = hal::config().queue_settings_.seed_ratio_limit;
737                seed_ratio_time_limit_ = hal::config().queue_settings_.seed_ratio_time_limit;
738                seed_time_limit_ = hal::config().queue_settings_.seed_time_limit;
739
740                BOOL retval =  DoDataExchange(false);
741
742                autosizeClass::CtrlsArrange();
743                return retval;
744        }
745
746    int OnApply()
747        {
748                hal::event_log.post(shared_ptr<hal::EventDetail>(
749                        new hal::EventMsg(L"Applying torrent options.", hal::event_logger::info)));
750
751                hal::config().globals_.total = total_connections_;
752                hal::config().globals_.uploads = upload_connections_;
753                hal::config().globals_.download_rate = download_rate_;
754                hal::config().globals_.upload_rate = upload_rate_;
755       
756                hal::config().queue_settings_.active_downloads = active_downloads_;
757                hal::config().queue_settings_.active_seeds = active_seeds_;
758                hal::config().queue_settings_.seeds_hard_limit = seeds_hard_limit_;
759                hal::config().queue_settings_.seed_ratio_limit = seed_ratio_limit_;
760                hal::config().queue_settings_.seed_ratio_time_limit = seed_ratio_time_limit_;
761                hal::config().queue_settings_.seed_time_limit = seed_time_limit_;
762               
763                return DoDataExchange(true);
764        }
765       
766private:
767        CHaliteEditCtrl<int> total_connections_;
768        CHaliteEditCtrl<int> upload_connections_;
769        CHaliteEditCtrl<float> download_rate_;
770        CHaliteEditCtrl<float> upload_rate_;
771
772        CHaliteEditCtrl<int> active_downloads_;
773        CHaliteEditCtrl<int> active_seeds_;
774        CHaliteEditCtrl<int> seeds_hard_limit_;
775        CHaliteEditCtrl<float> seed_ratio_limit_;
776        CHaliteEditCtrl<float> seed_ratio_time_limit_;
777        CHaliteEditCtrl<int> seed_time_limit_;
778};
779
780class TorrentsOptions :
781    public WTL::CPropertyPageImpl<TorrentsOptions>,
782        public ATL::CAutoSizeWindow<TorrentsOptions, false>,
783    public CWinDataExchangeEx<TorrentsOptions>
784{
785        typedef TorrentsOptions thisClass;
786        typedef ATL::CAutoSizeWindow<thisClass, false> autosizeClass;
787public:
788    enum { IDD = HAL_CONFIGTORRENT };
789       
790        TorrentsOptions() :
791                tTotalConnections_(0, false, false),
792                tUploadConnections_(0, false, false),
793                tDownloadRate_(0, false, false),
794                tUploadRate_(0, false, false)
795        {}
796
797    BEGIN_MSG_MAP_EX(TorrentsOptions)
798        MSG_WM_INITDIALOG(OnInitDialog)
799
800                COMMAND_ID_HANDLER_EX(HAL_BC_SAVEBROWSE, onFolderBrowse)
801                COMMAND_ID_HANDLER_EX(HAL_BC_MOVETO_BROWSE, onMoveToFolderBrowse)
802                COMMAND_ID_HANDLER_EX(HAL_BC_MOVETO_CHECK, onMoveToCheck)
803
804        CHAIN_MSG_MAP(CPropertyPageImpl<TorrentsOptions>)
805        CHAIN_MSG_MAP(autosizeClass)
806           REFLECT_NOTIFICATIONS()
807    END_MSG_MAP()
808
809#define CONFIGT_TORRENT_LAYOUT \
810        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|30), WMB_COLNOMAX(_eq|0), WMB_COLNOMAX(_eq|1)), \
811                WMB_ROW(_auto,  HAL_CONFIGT_TOR_TEXT, _r, _r, _r), \
812                WMB_ROW(_auto,  HAL_CONFIGT_TORMAX, HAL_BC_TMAXCONN, HAL_CONFIGT_TDOWNRATE, HAL_BC_TDOWNRATE), \
813                WMB_ROW(_auto,  HAL_CONFIGT_TORUP, HAL_BC_TMAXUP, HAL_CONFIGT_TORUPRATE, HAL_BC_TUPRATE), \
814        WMB_END()
815
816#define CONFIGT_TORRENT_FOLDER_MOVETO_LAYOUT \
817        WMB_HEAD(WMB_COL(_auto), WMB_COLNOMAX(_exp|50)), \
818                WMB_ROW(_auto,  HAL_BC_MOVETO_CHECK, HAL_BC_MOVETO_TEXT), \
819        WMB_END()
820
821#define CONFIGT_TORRENT_FOLDER_LAYOUT \
822        WMB_HEAD( WMB_COLNOMAX(_exp|50), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_auto)), \
823                WMB_ROW(_auto,  HAL_CONFIGT_DEF_FOLDER, HAL_BC_SAVEFOLDER, HAL_BC_SAVEBROWSE), \
824                WMB_ROW(_auto,  CONFIGT_TORRENT_FOLDER_MOVETO_LAYOUT, HAL_BC_MOVETO_FOLDER, HAL_BC_MOVETO_BROWSE), \
825                WMB_ROW(_auto, 0, HAL_BC_PROMPTSAVE, _r), \
826        WMB_END()
827
828        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
829                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), 
830                        WMB_ROW(_gap|3, HAL_CONFIGT_TORRENTG, _r, _r),
831                        WMB_ROW(_auto,  _d, CONFIGT_TORRENT_LAYOUT),
832                        WMB_ROW(_gap,   _d),
833                        WMB_ROW(_auto,  CONFIGT_TORRENT_FOLDER_LAYOUT, _r, _r), 
834                WMB_END()
835        END_WINDOW_MAP()
836
837    BEGIN_DDX_MAP(TorrentsOptions)
838/*      DDX_EX_INT_POSITIVE_LIMIT(HAL_BC_MAXCONN, hal::config().maxConnections, 2, true)
839        DDX_EX_INT_POSITIVE_LIMIT(HAL_BC_MAXUP, hal::config().maxUploads, 2, true)
840        DDX_EX_FLOAT_POSITIVE(HAL_BC_DOWNRATE, hal::config().downRate)
841        DDX_EX_FLOAT_POSITIVE(HAL_BC_UPRATE, hal::config().upRate)
842
843        DDX_EX_INT_POSITIVE_LIMIT(HAL_BC_TMAXCONN, hal::config().torrentMaxConnections, 2, true)
844        DDX_EX_INT_POSITIVE_LIMIT(HAL_BC_TMAXUP, hal::config().torrentMaxUploads, 2, true)
845        DDX_EX_FLOAT_POSITIVE(HAL_BC_TDOWNRATE, hal::config().torrentDownRate)
846        DDX_EX_FLOAT_POSITIVE(HAL_BC_TUPRATE, hal::config().torrentUpRate)
847*/
848                DDX_EX_STDWSTRING(HAL_BC_SAVEFOLDER, hal::config().default_save_folder_);
849                DDX_EX_STDWSTRING(HAL_BC_MOVETO_FOLDER, hal::config().default_move_folder_);
850        DDX_CHECK(HAL_BC_MOVETO_CHECK, hal::config().use_move_to_);
851        DDX_CHECK(HAL_BC_PROMPTSAVE, hal::config().save_prompt_);
852    END_DDX_MAP()       
853
854    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam)
855        {
856                tTotalConnections_.Attach(GetDlgItem(HAL_BC_TMAXCONN));
857                tUploadConnections_.Attach(GetDlgItem(HAL_BC_TMAXUP));
858                tDownloadRate_.Attach(GetDlgItem(HAL_BC_TDOWNRATE));
859                tUploadRate_.Attach(GetDlgItem(HAL_BC_TUPRATE));
860       
861                tTotalConnections_ = hal::config().torrent_defaults_.total;
862                tUploadConnections_ = hal::config().torrent_defaults_.uploads;
863                tDownloadRate_ = hal::config().torrent_defaults_.download_rate;
864                tUploadRate_ = hal::config().torrent_defaults_.upload_rate;
865       
866                BOOL retval =  DoDataExchange(false);
867                onMoveToCheck(0, 0, GetDlgItem(HAL_BC_MOVETO_CHECK));
868
869                autosizeClass::CtrlsArrange();
870                return retval;
871        }
872
873        void onFolderBrowse(UINT, int, HWND hWnd)
874        {               
875                wstring folderSelect = hal::app().res_wstr(HAL_FOLDER_SELECT);
876
877                WTL::CFolderDialog fldDlg (NULL, folderSelect.c_str(),
878                        BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE);
879
880                if (IDOK == fldDlg.DoModal())
881                        SetDlgItemText(HAL_BC_SAVEFOLDER, fldDlg.m_szFolderPath);
882        }
883
884        void onMoveToFolderBrowse(UINT, int, HWND hWnd)
885        {               
886                wstring folderSelect = hal::app().res_wstr(HAL_FOLDER_SELECT);
887
888                WTL::CFolderDialog fldDlg (NULL, folderSelect.c_str(),
889                        BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE);
890
891                if (IDOK == fldDlg.DoModal())
892                        SetDlgItemText(HAL_BC_MOVETO_FOLDER, fldDlg.m_szFolderPath);
893        }
894
895        void onMoveToCheck(UINT, int, HWND hWnd)
896        {
897                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
898
899                if (result == BST_CHECKED)
900                {
901                        ::EnableWindow(GetDlgItem(HAL_BC_MOVETO_FOLDER), true);
902                        ::EnableWindow(GetDlgItem(HAL_BC_MOVETO_BROWSE), true);
903                }
904                else
905                {
906                        ::EnableWindow(GetDlgItem(HAL_BC_MOVETO_FOLDER), false);
907                        ::EnableWindow(GetDlgItem(HAL_BC_MOVETO_BROWSE), false);
908                }               
909        }
910
911    int OnApply()
912        {
913                hal::event_log.post(shared_ptr<hal::EventDetail>(
914                        new hal::EventMsg(L"Applying torrent options.", hal::event_logger::info)));
915
916                hal::config().torrent_defaults_.total = tTotalConnections_;
917                hal::config().torrent_defaults_.uploads = tUploadConnections_;
918                hal::config().torrent_defaults_.download_rate = tDownloadRate_;
919                hal::config().torrent_defaults_.upload_rate = tUploadRate_;
920               
921                return DoDataExchange(true);
922        }
923       
924private:       
925        CHaliteEditCtrl<int> tTotalConnections_;
926        CHaliteEditCtrl<int> tUploadConnections_;
927        CHaliteEditCtrl<float> tDownloadRate_;
928        CHaliteEditCtrl<float> tUploadRate_;
929};
930
931class RemoteOptions :
932    public WTL::CPropertyPageImpl<RemoteOptions>,
933    public WTL::CWinDataExchange<RemoteOptions>
934{
935public:
936    enum { IDD = HAL_CONFIGREMOTE };
937
938        RemoteOptions()
939        {}
940
941        ~RemoteOptions()
942        {}
943
944    BEGIN_MSG_MAP_EX(RemoteOptions)
945                MSG_WM_INITDIALOG(OnInitDialog)
946        CHAIN_MSG_MAP(CPropertyPageImpl<RemoteOptions>)
947    END_MSG_MAP()
948
949    BEGIN_DDX_MAP(RemoteOptions)
950//      DDX_CHECK(HAL_REMOTECTRL, INI().remoteConfig().isEnabled)
951//      DDX_INT(HAL_REMOTEPORT, INI().remoteConfig().port)
952    END_DDX_MAP()
953
954    BOOL OnInitDialog ( HWND hwndFocus, LPARAM lParam )
955        {
956                return DoDataExchange(false);
957        }
958
959    int OnApply()
960        {
961                hal::event_log.post(shared_ptr<hal::EventDetail>(
962                        new hal::EventMsg(L"Applying remote options.", hal::event_logger::info)));
963
964                return DoDataExchange(true);
965        }
966};
967
968class AboutOptions :
969    public WTL::CPropertyPageImpl<AboutOptions>,
970        public WTL::CDialogResize<AboutOptions>
971{
972        typedef AboutOptions thisClass;
973        typedef WTL::CDialogResize<thisClass> resizeClass;
974
975public:
976    enum { IDD = HAL_ABOUT };
977
978    BEGIN_MSG_MAP_EX(thisClass)
979                MSG_WM_INITDIALOG(OnInitDialog)
980                CHAIN_MSG_MAP(resizeClass)
981        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
982    END_MSG_MAP()
983
984    BEGIN_DLGRESIZE_MAP(thisClass)
985                DLGRESIZE_CONTROL(HAL_RICHEDITABOUT, DLSZ_SIZE_X|DLSZ_SIZE_Y)
986                DLGRESIZE_CONTROL(HAL_ABOUT_VERSION, DLSZ_MOVE_X|DLSZ_MOVE_Y)
987        END_DLGRESIZE_MAP()
988
989    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
990        {
991                richEdit_.Attach(GetDlgItem(HAL_RICHEDITABOUT));
992
993                std::pair<void*, size_t> res = hal::app().res_find_lock(HAL_ABOUT_TEXT, HALITE_RTF_RES_TYPE);
994
995                string rtf(static_cast<char*>(res.first), res.second);
996                wstring wrtf = hal::from_utf8_safe(rtf);
997
998                richEdit_.SendMessage(WM_SETTEXT, 0, (LPARAM)wrtf.c_str());
999                richEdit_.SetSelNone();
1000//              richEdit_.SetEventMask(ENM_REQUESTRESIZE);
1001
1002        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
1003
1004                return true;
1005        }
1006
1007private:
1008
1009        WTL::CRichEditCtrl richEdit_;
1010        RECT richRect_;
1011};
1012
1013class ConfigOptionsProp :
1014        public WTL::CPropertySheet,
1015        public WTL::CDialogResize<ConfigOptionsProp>
1016{
1017        typedef ConfigOptionsProp thisClass;
1018        typedef WTL::CDialogResize<thisClass> resizeClass;
1019
1020public:
1021    ConfigOptionsProp(HaliteWindow* haliteWindow, LPCTSTR title = (LPCTSTR)NULL,
1022                UINT uStartPage = 0, HWND hWndParent = NULL) :
1023        CPropertySheet(title, uStartPage, hWndParent),
1024                m_bCentered(false),
1025                generalOptions(haliteWindow)
1026    {
1027                AddPage(generalOptions);
1028                AddPage(bitTorrentOptions);
1029                AddPage(portOptions);
1030                AddPage(globalOptions);
1031                AddPage(securityOptions);
1032                AddPage(torrentsOptions);
1033        //      AddPage(remoteControlOptions);
1034                AddPage(aboutOptions);
1035    }
1036
1037    BEGIN_MSG_MAP_EX(ConfigOptionsProp)
1038        MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow)
1039                MSG_WM_SIZE(OnSize)
1040                CHAIN_MSG_MAP(resizeClass)
1041        CHAIN_MSG_MAP(CPropertySheet)
1042    END_MSG_MAP()
1043
1044    BEGIN_DLGRESIZE_MAP(thisClass)
1045                DLGRESIZE_CONTROL(0x3020, DLSZ_SIZE_X|DLSZ_SIZE_Y)
1046
1047                DLGRESIZE_CONTROL(0x1, DLSZ_MOVE_X|DLSZ_MOVE_Y)
1048                DLGRESIZE_CONTROL(0x2, DLSZ_MOVE_X|DLSZ_MOVE_Y)
1049                DLGRESIZE_CONTROL(0x3021, DLSZ_MOVE_X|DLSZ_MOVE_Y)
1050        END_DLGRESIZE_MAP()
1051
1052        void OnSize(UINT, WTL::CSize)
1053        {
1054        SetMsgHandled(false);
1055
1056        HWND propTabs = GetDlgItem(0x3020);
1057
1058                RECT rect;
1059                ::GetWindowRect(propTabs, &rect);
1060
1061                ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2);
1062                ::SendMessage(propTabs, TCM_ADJUSTRECT, false, (LPARAM)&rect);
1063
1064                ::MoveWindow(GetActivePage(), rect.left, rect.top,
1065            rect.right-rect.left, rect.bottom-rect.top, true);
1066        }
1067
1068    LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
1069    {
1070        if (wParam == TRUE)
1071        {
1072            WTL::CMenuHandle pSysMenu = GetSystemMenu(FALSE);
1073
1074                if (pSysMenu != NULL)
1075                pSysMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, SC_SIZE, L"&Size");
1076
1077            ModifyStyle(0, WS_THICKFRAME, 0);
1078            Center();
1079
1080            resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
1081        }
1082               
1083                bHandled = FALSE;
1084               
1085        return 0;
1086    }
1087
1088    void Center(void)
1089    {
1090        if (!m_bCentered)
1091        {
1092            CenterWindow();
1093            m_bCentered = true;
1094        }
1095    }
1096
1097private:
1098    bool m_bCentered;
1099
1100        GeneralOptions generalOptions;
1101        BitTorrentOptions bitTorrentOptions;
1102        PortOptions portOptions;
1103        GlobalOptions globalOptions;
1104        SecurityOptions securityOptions;
1105        TorrentsOptions torrentsOptions;
1106        RemoteOptions remoteControlOptions;
1107        AboutOptions aboutOptions;
1108};
1109
1110#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.