source: trunk/src/ConfigOptions.hpp @ 390

Revision 390, 55.5 KB checked in by Eoin, 13 years ago (diff)

Adding some WTL:: namespace prefixes.

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 IDC_SECURITY_IPF_GB             ID_CONFIG_BEGIN + 1
11#define IDC_SECURITY_PE_GB                      ID_CONFIG_BEGIN + 2
12#define IDC_SECURITY_CP_GB                      ID_CONFIG_BEGIN + 3
13#define IDC_SECURITY_EL_GB                      ID_CONFIG_BEGIN + 4
14#define IDC_SECURITY_OUTGOING           ID_CONFIG_BEGIN + 5
15#define IDC_SECURITY_INCOMING           ID_CONFIG_BEGIN + 6
16#define IDC_SECURITY_ENABLED            ID_CONFIG_BEGIN + 7
17#define IDC_SECURITY_FORCED                     ID_CONFIG_BEGIN + 8
18#define IDC_SECURITY_DISABLED           ID_CONFIG_BEGIN + 9
19#define IDC_BITT_OPENPORT                       ID_CONFIG_BEGIN + 10
20#define IDC_BITT_GDHT                           ID_CONFIG_BEGIN + 11
21#define IDC_BITT_DHT_NOTE                       ID_CONFIG_BEGIN + 12
22#define IDC_BITT_GSETTINGS                      ID_CONFIG_BEGIN + 13
23#define IDC_BITT_SELECT_TEXT            ID_CONFIG_BEGIN + 14
24#define IDC_CONFIGT_TOTALMAX            ID_CONFIG_BEGIN + 15
25#define IDC_CONFIGT_TOTALUP                     ID_CONFIG_BEGIN + 16
26#define IDC_CONFIGT_DOWNRATE            ID_CONFIG_BEGIN + 17
27#define IDC_CONFIGT_UPRATE                      ID_CONFIG_BEGIN + 18
28#define IDC_CONFIGT_TORMAX                      ID_CONFIG_BEGIN + 19
29#define IDC_CONFIGT_TORUP                       ID_CONFIG_BEGIN + 20
30#define IDC_CONFIGT_TORDOWNRATE         ID_CONFIG_BEGIN + 21
31#define IDC_CONFIGT_TORUPRATE           ID_CONFIG_BEGIN + 22
32#define IDC_CONFIGT_GLOBAL_TEXT         ID_CONFIG_BEGIN + 23
33#define IDC_CONFIGT_TOR_TEXT            ID_CONFIG_BEGIN + 24
34#define IDC_CONFIGT_DEF_FOLDER          ID_CONFIG_BEGIN + 25
35#define IDC_CONFIGT_GLOBALG             ID_CONFIG_BEGIN + 26
36#define IDC_CONFIGT_TORRENTG            ID_CONFIG_BEGIN + 27
37#define IDC_CONFIGT_TDOWNRATE           ID_CONFIG_BEGIN + 28
38#define IDC_GENERAL_GROUP                       ID_CONFIG_BEGIN + 29
39#define IDC_GENERAL_LANG                        ID_CONFIG_BEGIN + 30
40#define IDC_GENERAL_CLOSETRAY           ID_CONFIG_BEGIN + 31
41#define IDC_GENERAL_CONFIRMCLOSE        ID_CONFIG_BEGIN + 32
42#define IDC_ABOUT_GROUP                 ID_CONFIG_BEGIN + 33
43#define IDC_ABOUT_VERSION               ID_CONFIG_BEGIN + 34
44#define IDC_BITT_GPORTFORWARDING        ID_CONFIG_BEGIN + 35
45#define IDC_BITT_GPORTFORWARD_NONE      ID_CONFIG_BEGIN + 36
46#define IDC_BITT_GPORTFORWARD_UPNG      ID_CONFIG_BEGIN + 37
47#define IDC_BIT_GPORTFORWARD_NATPMP     ID_CONFIG_BEGIN + 38
48#define IDC_BITT_GPORTFORWARD_TEST      ID_CONFIG_BEGIN + 39
49#define IDC_BITT_GPORTFORWARD_LIST      ID_CONFIG_BEGIN + 40
50
51#ifndef RC_INVOKED
52
53#include "stdAfx.hpp"
54
55#include "Halite.hpp"
56#include "halConfig.hpp"
57#include "HaliteWindow.hpp"
58#include "HaliteEditCtrl.hpp"
59#include "DdxEx.hpp"
60#include "CSSFileDialog.hpp"
61
62class GeneralOptions :
63    public WTL::CPropertyPageImpl<GeneralOptions>,
64        public CAutoSizeWindow<GeneralOptions, false>,
65    public WTL::CWinDataExchange<GeneralOptions>
66{
67        typedef GeneralOptions thisClass;
68        typedef WTL::CPropertyPageImpl<thisClass> propPageClass;
69        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
70       
71public:
72    enum { IDD = IDD_CONFIGGENERAL };
73
74        GeneralOptions(HaliteWindow* haliteWindow) :
75                haliteWindow_(haliteWindow)
76        {}
77
78        ~GeneralOptions()
79        {}
80
81    BEGIN_MSG_MAP_EX(GeneralOptions)
82                MSG_WM_INITDIALOG(OnInitDialog)
83        CHAIN_MSG_MAP(CPropertyPageImpl<GeneralOptions>)
84        CHAIN_MSG_MAP(autosizeClass)
85    END_MSG_MAP()
86
87    BEGIN_DDX_MAP(GeneralOptions)
88        DDX_CHECK(IDC_GENERAL_ONEINST, halite().oneInst)
89        DDX_CHECK(IDC_GENERAL_TRAY, haliteWindow_->use_tray)
90        DDX_CHECK(IDC_GENERAL_ADVGUI, haliteWindow_->advancedUI)
91        DDX_CHECK(IDC_GENERAL_CLOSETRAY, haliteWindow_->closeToTray)
92        DDX_CHECK(IDC_GENERAL_CONFIRMCLOSE, haliteWindow_->confirmClose)
93    END_DDX_MAP()
94
95#define GENERAL_CONFIG_LAYOUT \
96        WMB_HEAD(WMB_COLNOMAX(_exp)), \
97                WMB_ROW(_gap,   _d), \
98                WMB_ROW(_auto,  IDC_GENERAL_ONEINST), \
99                WMB_ROW(_auto,  IDC_GENERAL_ADVGUI), \
100                WMB_ROW(_auto,  IDC_GENERAL_TRAY), \
101                WMB_ROW(_auto,  IDC_GENERAL_CLOSETRAY), \
102                WMB_ROW(_auto,  IDC_GENERAL_CONFIRMCLOSE), \
103        WMB_END()
104
105#define GENERAL_LANGUAGE_LAYOUT \
106        WMB_HEAD(WMB_COLNOMAX(_exp)), \
107                WMB_ROW(_auto,  IDC_GENERAL_LANG), \
108                WMB_ROW(_auto,  IDC_LANGLIST), \
109        WMB_END()
110
111        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
112                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)),
113                        WMB_ROW(_gap|3, IDC_GENERAL_GROUP, _r, _r, _r), 
114                        WMB_ROW(_auto,  _d, GENERAL_CONFIG_LAYOUT, GENERAL_LANGUAGE_LAYOUT), 
115                        WMB_ROW(_gap,   _d),
116                WMB_END()
117        END_WINDOW_MAP()       
118
119    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam);
120
121    int OnApply()
122        {       
123                hal::event().post(shared_ptr<hal::EventDetail>(
124                        new hal::EventMsg(L"Applying general options.", hal::Event::info)));
125
126                size_t length = lang_list_.GetTextLen(lang_list_.GetCurSel());
127                boost::scoped_array<wchar_t> buffer(new wchar_t[length+1]);
128               
129                lang_list_.GetText(lang_list_.GetCurSel(), buffer.get());
130                std::wstring language(buffer.get(), length);
131
132                if (language == L"English")
133                {
134                        halite().dll_ = L"";
135                        hal::app().res_revert();
136                }
137                else
138                {
139                        halite().dll_ = lang_map_[language].external_file_string();
140                        hal::app().res_set_dll(lang_map_[language].external_file_string());
141                }
142               
143                return DoDataExchange(true);
144        }
145
146private:
147        WTL::CListBox lang_list_;
148        std::map<wstring, wpath> lang_map_;
149        HaliteWindow* haliteWindow_;
150};
151
152class BitTorrentOptions :
153    public WTL::CPropertyPageImpl<BitTorrentOptions>,
154        public CAutoSizeWindow<BitTorrentOptions, false>,
155    public CWinDataExchangeEx<BitTorrentOptions>
156{
157        typedef BitTorrentOptions thisClass;
158        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
159       
160public:
161    enum { IDD = IDD_CONFIGBIT };
162
163        BitTorrentOptions()
164        {}
165
166        ~BitTorrentOptions()
167        {}
168
169    BEGIN_MSG_MAP_EX(BitTorrentOptions)
170        MSG_WM_INITDIALOG(OnInitDialog)
171                COMMAND_ID_HANDLER_EX(IDC_BC_PORTCHECK, onPortCheck)
172                COMMAND_ID_HANDLER_EX(IDC_BC_HALFCONN_CHECK, onHalfCheck)
173                COMMAND_ID_HANDLER_EX(IDC_BC_DHT, onDHTCheck)
174               
175        CHAIN_MSG_MAP(CPropertyPageImpl<BitTorrentOptions>)
176        CHAIN_MSG_MAP(autosizeClass)
177    END_MSG_MAP()
178
179    BEGIN_DDX_MAP(BitTorrentOptions)
180        DDX_CHECK(IDC_BC_PORTCHECK, hal::config().portRange)
181        DDX_INT(IDC_BC_PORTFROM, hal::config().portFrom)
182        DDX_INT(IDC_BC_PORTTO, hal::config().portTo)           
183        DDX_CHECK(IDC_BC_HALFCONN_CHECK, hal::config().halfConn)
184        DDX_EX_INT_POSITIVE(IDC_BC_HALFCONN_NUM, hal::config().halfConnLimit)
185        DDX_CHECK(IDC_BC_DHT, hal::config().enableDHT)
186        DDX_INT(IDC_BC_DHTPORT, hal::config().dhtServicePort)
187        DDX_RADIO(IDC_BITT_GPORTFORWARD_NONE, hal::config().mappingType)
188    END_DDX_MAP()
189       
190#define BITT_GS_LAYOUT \
191        WMB_HEAD(WMB_COLNOMAX(_exp|250), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
192                WMB_ROW(_auto,  IDC_BITT_SELECT_TEXT, _r, _r, _r), \
193                WMB_ROW(_auto,  IDC_BITT_OPENPORT, IDC_BC_PORTFROM, IDC_BC_PORTCHECK, IDC_BC_PORTTO), \
194                WMB_ROW(_auto,  IDC_BC_HALFCONN_CHECK, _r, IDC_BC_HALFCONN_NUM), \
195        WMB_END()
196
197#define BITT_DHT_LAYOUT \
198        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
199                WMB_ROW(_auto,  IDC_BC_DHT, IDC_BC_DHTPORT_S, IDC_BC_DHTPORT), \
200                WMB_ROW(_auto,  IDC_BITT_DHT_NOTE, _r, _r), \
201        WMB_END()
202
203#define BITT_FOR_LAYOUT \
204        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|50)), \
205                WMB_ROW(_auto,  IDC_BITT_GPORTFORWARD_NONE, _r, IDC_BITT_GPORTFORWARD_TEST), \
206                WMB_ROW(_auto,  IDC_BITT_GPORTFORWARD_UPNG, IDC_BITT_GPORTFORWARD_LIST, _r), \
207                WMB_ROW(_auto,  IDC_BIT_GPORTFORWARD_NATPMP, _d), \
208        WMB_END()
209
210        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
211                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)),
212                        WMB_ROW(_gap|3, IDC_BITT_GSETTINGS, _r, _r), 
213                        WMB_ROW(_auto,  _d, BITT_GS_LAYOUT),
214                        WMB_ROW(_gap,   _d),
215                        WMB_ROW(_gap|3, IDC_BITT_GDHT, _r, _r),
216                        WMB_ROW(_auto,  _d, BITT_DHT_LAYOUT), 
217                        WMB_ROW(_gap,   _d),
218                        WMB_ROW(_gap|3, IDC_BITT_GPORTFORWARDING, _r, _r),
219                        WMB_ROW(_auto,  _d, BITT_FOR_LAYOUT), 
220                        WMB_ROW(_gap,   _d),
221                WMB_END()
222        END_WINDOW_MAP()
223
224    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
225        {       
226        //      helpLink.SubclassWindow(GetDlgItem(IDC_BC_HELP_LINK));
227        //      helpLink.SetHyperLink(L"http://www.binarynotions.com/");
228               
229        //      whyHalfConn.SubclassWindow(GetDlgItem(IDC_BC_CON_WHY));
230        //      whyHalfConn.SetHyperLink(L"http://www.binarynotions.com/");
231               
232                BOOL retval = DoDataExchange(false);
233
234                onHalfCheck(0, 0, GetDlgItem(IDC_BC_HALFCONN_CHECK));
235                onPortCheck(0, 0, GetDlgItem(IDC_BC_PORTCHECK));
236                onDHTCheck(0, 0, GetDlgItem(IDC_BC_DHT));
237
238                autosizeClass::CtrlsArrange();
239                return retval;
240        }
241
242    int OnApply()
243        {
244                hal::event().post(shared_ptr<hal::EventDetail>(
245                        new hal::EventMsg(L"Applying bittorrent options.", hal::Event::info)));
246
247                onPortCheck(0, 0, GetDlgItem(IDC_BC_PORTCHECK));
248
249                return DoDataExchange(true);
250        }
251
252        void onDHTCheck(UINT, int, HWND hWnd)
253        {
254                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
255
256                if (result == BST_CHECKED)
257                {
258                        ::EnableWindow(GetDlgItem(IDC_BC_DHTPORT), true);
259                        ::EnableWindow(GetDlgItem(IDC_BC_DHTPORT_S), true);
260                }
261                else
262                {
263                        ::EnableWindow(GetDlgItem(IDC_BC_DHTPORT), false);
264                        ::EnableWindow(GetDlgItem(IDC_BC_DHTPORT_S), false);
265                }
266        }
267
268        void onPortCheck(UINT, int, HWND hWnd)
269        {
270                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
271
272                if (result == BST_CHECKED)
273                {
274                        ::EnableWindow(GetDlgItem(IDC_BC_PORTTO), true);
275                }
276                else
277                {
278                        ::EnableWindow(GetDlgItem(IDC_BC_PORTTO), false);
279                        boost::array<wchar_t, MAX_PATH> buffer;
280                        GetDlgItemText(IDC_BC_PORTFROM, buffer.elems, MAX_PATH);
281                        SetDlgItemText(IDC_BC_PORTTO, buffer.elems);
282                }
283        }
284
285        void onHalfCheck(UINT, int, HWND hWnd)
286        {
287                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
288
289                if (result == BST_CHECKED)
290                {
291                        ::EnableWindow(GetDlgItem(IDC_BC_HALFCONN_NUM), true);
292                }
293                else
294                {
295                        ::EnableWindow(GetDlgItem(IDC_BC_HALFCONN_NUM), false);
296                        SetDlgItemText(IDC_BC_HALFCONN_NUM, L"");
297                }
298        }
299private:
300        WTL::CHyperLink helpLink;
301        WTL::CHyperLink whyHalfConn;
302};
303
304class ProxyOptions :
305    public WTL::CPropertyPageImpl<ProxyOptions>,
306    public CWinDataExchangeEx<ProxyOptions>
307{
308public:
309    enum { IDD = IDD_CONFIGPROXY };
310
311        ProxyOptions()
312        {}
313
314        ~ProxyOptions()
315        {}
316
317    BEGIN_MSG_MAP_EX(ProxyOptions)
318        MSG_WM_INITDIALOG(OnInitDialog)
319                COMMAND_ID_HANDLER_EX(IDC_BC_PROXYCHECK, onProxyCheck)
320        CHAIN_MSG_MAP(CPropertyPageImpl<ProxyOptions>)
321    END_MSG_MAP()
322
323    BEGIN_DDX_MAP(ProxyOptions)
324       
325    END_DDX_MAP()
326
327    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
328        {
329                BOOL retval =  DoDataExchange(false);
330
331                onProxyCheck(0, 0, GetDlgItem(IDC_BC_PROXYCHECK));
332
333                return retval;
334        }
335
336    int OnApply()
337        {
338                hal::event().post(shared_ptr<hal::EventDetail>(
339                        new hal::EventMsg(L"Applying proxy options.", hal::Event::info)));
340
341                return DoDataExchange(true);
342        }
343
344        void onPortCheck(UINT, int, HWND hWnd)
345        {
346                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
347
348                if (result == BST_CHECKED)
349                {
350                        ::EnableWindow(GetDlgItem(IDC_BC_PORTTO), true);
351                }
352                else
353                {
354                        ::EnableWindow(GetDlgItem(IDC_BC_PORTTO), false);
355                        boost::array<wchar_t, MAX_PATH> buffer;
356                        GetDlgItemText(IDC_BC_PORTFROM, buffer.elems, MAX_PATH);
357                        SetDlgItemText(IDC_BC_PORTTO, buffer.elems);
358                }
359        }
360
361        void onProxyCheck(UINT, int, HWND hWnd)
362        {
363                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
364
365                if (result == BST_CHECKED)
366                {
367                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYIP), true);
368                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPORT), true);
369                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYUSER), true);
370                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPASS), true);
371                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYIP_S), true);
372                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPORT_S), true);
373                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYUSER_S), true);
374                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPASS_S), true);
375                }
376                else
377                {
378                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYIP), false);
379                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPORT), false);
380                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYUSER), false);
381                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPASS), false);
382                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYIP_S), false);
383                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPORT_S), false);
384                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYUSER_S), false);
385                        ::EnableWindow(GetDlgItem(IDC_BC_PROXYPASS_S), false);
386                }
387        }
388};
389
390class SecurityOptions :
391    public WTL::CPropertyPageImpl<SecurityOptions>,
392        public CAutoSizeWindow<SecurityOptions, false>,
393    public CWinDataExchangeEx<SecurityOptions>
394{
395        typedef SecurityOptions thisClass;
396        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
397       
398public:
399    enum { IDD = IDD_CONFIGSECURITY };
400
401    BEGIN_MSG_MAP_EX(thisClass)
402        MSG_WM_INITDIALOG(OnInitDialog)
403               
404                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERLOAD, onFilterImport)
405                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERCLEAR, onFilterClear)
406                COMMAND_ID_HANDLER_EX(IDC_BC_FILTERCHECK, onFilterCheck)
407               
408                COMMAND_ID_HANDLER_EX(IDC_SC_ENABLE_PE, onPeCheck)
409               
410        CHAIN_MSG_MAP(autosizeClass)
411        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
412//              MSG_WM_SIZE(OnSize)
413    END_MSG_MAP()
414
415    BEGIN_DDX_MAP(thisClass)
416        DDX_CHECK(IDC_BC_FILTERCHECK, hal::config().enableIPFilter)
417        DDX_CHECK(IDC_SC_ENABLE_PE, hal::config().enablePe)
418        DDX_RADIO(IDC_SC_PE_ENC_PLAIN, hal::config().peEncLevel)
419        DDX_CHECK(IDC_SC_PE_ENC_RC4_PERFER, hal::config().pePerferRc4)
420        DDX_RADIO(IDC_SC_PE_CP_IN_FORCED, hal::config().peConInPolicy)
421        DDX_RADIO(IDC_SC_PE_CP_OUT_FORCED, hal::config().peConOutPolicy)
422    END_DDX_MAP()
423       
424/*      void OnSize(UINT type, CSize)
425        {
426               
427                SetMsgHandled(false);
428        }
429*/
430#define SECURITY_IPF_LAYOUT \
431        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp)), \
432                WMB_ROW(_auto,  IDC_BC_FILTERCHECK,     IDC_BC_FILTERCLEAR, IDC_BC_FILTERLOAD), \
433        WMB_END()
434
435#define SECURITY_ENCODING_LAYOUT \
436        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
437                WMB_ROW(_auto,  IDC_SC_ENABLE_PE,       _r,_r,_r), \
438                WMB_ROW(_gap|3, IDC_SECURITY_EL_GB,     _r,_r,_r), \
439                WMB_ROW(_auto,  _d,     IDC_SC_PE_ENC_PLAIN, _r), \
440                WMB_ROW(_auto,  _d,     IDC_SC_PE_ENC_RC4, _r), \
441                WMB_ROW(_auto,  _d,     IDC_SC_PE_ENC_BOTH, IDC_SC_PE_ENC_RC4_PERFER), \
442                WMB_ROW(_gap,   _d), \
443        WMB_END()
444
445#define SECURITY_CONNECTION_LAYOUT \
446        WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp), WMB_COL(_gap)), \
447                WMB_ROW(_gap|4, IDC_SECURITY_CP_GB,     _r, _r, _r, _r, _r), \
448                WMB_ROW(_auto,  _d,     IDC_SECURITY_INCOMING, _r, IDC_SECURITY_OUTGOING, _r), \
449                WMB_ROW(_auto,  _d,     IDC_SC_PE_CP_IN_FORCED, IDC_SECURITY_FORCED, _r, IDC_SC_PE_CP_OUT_FORCED), \
450                WMB_ROW(_auto,  _d,     IDC_SC_PE_CP_IN_ENABLED, IDC_SECURITY_ENABLED, _r, IDC_SC_PE_CP_OUT_ENABLED), \
451                WMB_ROW(_auto,  _d,     IDC_SC_PE_CP_IN_DISABLED, IDC_SECURITY_DISABLED, _r, IDC_SC_PE_CP_OUT_DISABLED), \
452                WMB_ROW(_gap,   _d), \
453        WMB_END()
454       
455#define SECURITY_PE_LAYOUT \
456        WMB_HEAD(WMB_COLNOMAX(_exp|150), WMB_COLNOMAX(_exp)), \
457                WMB_ROW(_auto,  SECURITY_ENCODING_LAYOUT, SECURITY_CONNECTION_LAYOUT), \
458        WMB_END()
459
460        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
461                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), 
462                        WMB_ROW(_gap|3, IDC_SECURITY_IPF_GB, _r, _r), 
463                        WMB_ROW(_auto,  _d, SECURITY_IPF_LAYOUT), 
464                        WMB_ROW(_gap,   _d), 
465                        WMB_ROW(_gap|3, IDC_SECURITY_PE_GB, _r, _r), 
466                        WMB_ROW(_auto,  _d, SECURITY_PE_LAYOUT),
467                        WMB_ROW(_gap,   _d),
468                WMB_END()
469        END_WINDOW_MAP()       
470
471    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
472        {
473        //      helpLink.SubclassWindow(GetDlgItem(IDC_SC_HELP_LINK));
474        //      helpLink.SetHyperLink(L"http://www.binarynotions.com/");
475
476                BOOL retval =  DoDataExchange(false);
477
478                onFilterCheck(0, 0, GetDlgItem(IDC_BC_FILTERCHECK));
479                onPeCheck(0, 0, GetDlgItem(IDC_SC_ENABLE_PE));
480
481                autosizeClass::CtrlsArrange();
482                return retval;
483        }
484
485    int OnApply()
486        {
487                hal::event().post(shared_ptr<hal::EventDetail>(
488                        new hal::EventMsg(L"Applying security options.", hal::Event::info)));
489
490                return DoDataExchange(true);
491        }
492
493        void onFilterCheck(UINT, int, HWND hWnd)
494        {
495                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
496
497                if (result == BST_CHECKED)
498                {
499                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERCLEAR), true);
500                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERLOAD), true);
501                }
502                else
503                {
504                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERCLEAR), false);
505                        ::EnableWindow(GetDlgItem(IDC_BC_FILTERLOAD), false);
506                }
507        }
508
509        void onPeCheck(UINT, int, HWND hWnd)
510        {
511                LRESULT result = ::SendMessage(hWnd, BM_GETCHECK, 0, 0);
512
513                if (result == BST_CHECKED)
514                {
515                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_BOTH), true);
516                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_RC4), true);
517                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_PLAIN), true);
518                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_RC4_PERFER), true);
519                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_FORCED), true);
520                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_DISABLED), true);
521                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_ENABLED), true);
522                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_DISABLED), true);
523                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_ENABLED), true);
524                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_FORCED), true);
525                }
526                else
527                {
528                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_BOTH), false);
529                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_RC4), false);
530                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_PLAIN), false);
531                        ::EnableWindow(GetDlgItem(IDC_SC_PE_ENC_RC4_PERFER), false);
532                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_FORCED), false);
533                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_DISABLED), false);
534                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_IN_ENABLED), false);
535                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_DISABLED), false);
536                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_ENABLED), false);
537                        ::EnableWindow(GetDlgItem(IDC_SC_PE_CP_OUT_FORCED), false);
538                }
539        }
540
541        void onFilterClear(UINT, int, HWND hWnd)
542        {
543                hal::bittorrent().clearIpFilter();
544        }
545
546        void onFilterImport(UINT, int, HWND hWnd);
547
548private:
549        WTL::CHyperLink helpLink;
550};
551
552class TorrentsOptions :
553    public WTL::CPropertyPageImpl<TorrentsOptions>,
554        public CAutoSizeWindow<TorrentsOptions, false>,
555    public CWinDataExchangeEx<TorrentsOptions>
556{
557        typedef TorrentsOptions thisClass;
558        typedef CAutoSizeWindow<thisClass, false> autosizeClass;
559public:
560    enum { IDD = IDD_CONFIGTORRENT };
561       
562        TorrentsOptions() :
563                gTotalConnections_(0, false, false),
564                gUploadConnections_(0, false, false),
565                gDownloadRate_(0, false, false),
566                gUploadRate_(0, false, false),
567                tTotalConnections_(0, false, false),
568                tUploadConnections_(0, false, false),
569                tDownloadRate_(0, false, false),
570                tUploadRate_(0, false, false)
571        {}
572
573    BEGIN_MSG_MAP_EX(TorrentsOptions)
574        MSG_WM_INITDIALOG(OnInitDialog)
575                COMMAND_ID_HANDLER_EX(IDC_BC_SAVEBROWSE, onFolderBrowse)
576        CHAIN_MSG_MAP(CPropertyPageImpl<TorrentsOptions>)
577        CHAIN_MSG_MAP(autosizeClass)
578           REFLECT_NOTIFICATIONS()
579    END_MSG_MAP()
580       
581#define CONFIGT_GLOBAL_LAYOUT \
582        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|30), WMB_COLNOMAX(_eq|0), WMB_COLNOMAX(_eq|1)), \
583                WMB_ROW(_auto,  IDC_CONFIGT_GLOBAL_TEXT, _r, _r, _r), \
584                WMB_ROW(_auto,  IDC_CONFIGT_TOTALMAX, IDC_BC_MAXCONN, IDC_CONFIGT_DOWNRATE, IDC_BC_DOWNRATE), \
585                WMB_ROW(_auto,  IDC_CONFIGT_TOTALUP, IDC_BC_MAXUP, IDC_CONFIGT_UPRATE, IDC_BC_UPRATE), \
586        WMB_END()
587
588#define CONFIGT_TORRENT_LAYOUT \
589        WMB_HEAD(WMB_COLNOMAX(_exp), WMB_COLNOMAX(_exp|30), WMB_COLNOMAX(_eq|0), WMB_COLNOMAX(_eq|1)), \
590                WMB_ROW(_auto,  IDC_CONFIGT_TOR_TEXT, _r, _r, _r), \
591                WMB_ROW(_auto,  IDC_CONFIGT_TORMAX, IDC_BC_TMAXCONN, IDC_CONFIGT_TDOWNRATE, IDC_BC_TDOWNRATE), \
592                WMB_ROW(_auto,  IDC_CONFIGT_TORUP, IDC_BC_TMAXUP, IDC_CONFIGT_TORUPRATE, IDC_BC_TUPRATE), \
593        WMB_END()
594
595#define CONFIGT_TORRENT_FOLDER_LAYOUT \
596        WMB_HEAD(WMB_COLNOMAX(_exp|50), WMB_COLNOMAX(_exp), WMB_COLNOMAX(_auto)), \
597                WMB_ROW(_auto,  IDC_CONFIGT_DEF_FOLDER, IDC_BC_SAVEFOLDER, IDC_BC_SAVEBROWSE), \
598                WMB_ROW(_auto, 0, IDC_BC_PROMPTSAVE, _r), \
599        WMB_END()
600
601        BEGIN_WINDOW_MAP(thisClass, 6, 6, 3, 3)
602                WMB_HEAD(WMB_COL(_gap), WMB_COLNOMAX(_exp), WMB_COL(_gap)), 
603                        WMB_ROW(_gap|3, IDC_CONFIGT_GLOBALG, _r, _r), 
604                        WMB_ROW(_auto,  _d, CONFIGT_GLOBAL_LAYOUT), 
605                        WMB_ROW(_gap,   _d), 
606                        WMB_ROW(_gap|3, IDC_CONFIGT_TORRENTG, _r, _r),
607                        WMB_ROW(_auto,  _d, CONFIGT_TORRENT_LAYOUT),
608                        WMB_ROW(_auto,  _d, CONFIGT_TORRENT_FOLDER_LAYOUT), 
609                        WMB_ROW(_gap,   _d),
610                WMB_END()
611        END_WINDOW_MAP()
612
613    BEGIN_DDX_MAP(TorrentsOptions)
614/*        DDX_EX_INT_POSITIVE_LIMIT(IDC_BC_MAXCONN, hal::config().maxConnections, 2, true)
615        DDX_EX_INT_POSITIVE_LIMIT(IDC_BC_MAXUP, hal::config().maxUploads, 2, true)
616        DDX_EX_FLOAT_POSITIVE(IDC_BC_DOWNRATE, hal::config().downRate)
617        DDX_EX_FLOAT_POSITIVE(IDC_BC_UPRATE, hal::config().upRate)
618
619        DDX_EX_INT_POSITIVE_LIMIT(IDC_BC_TMAXCONN, hal::config().torrentMaxConnections, 2, true)
620        DDX_EX_INT_POSITIVE_LIMIT(IDC_BC_TMAXUP, hal::config().torrentMaxUploads, 2, true)
621        DDX_EX_FLOAT_POSITIVE(IDC_BC_TDOWNRATE, hal::config().torrentDownRate)
622        DDX_EX_FLOAT_POSITIVE(IDC_BC_TUPRATE, hal::config().torrentUpRate)
623*/
624                DDX_EX_STDWSTRING(IDC_BC_SAVEFOLDER, hal::config().defaultSaveFolder);
625        DDX_CHECK(IDC_BC_PROMPTSAVE, hal::config().savePrompt)
626    END_DDX_MAP()       
627
628    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam)
629        {
630                gTotalConnections_.Attach(GetDlgItem(IDC_BC_MAXCONN));
631                gUploadConnections_.Attach(GetDlgItem(IDC_BC_MAXUP));
632                gDownloadRate_.Attach(GetDlgItem(IDC_BC_DOWNRATE));
633                gUploadRate_.Attach(GetDlgItem(IDC_BC_UPRATE));
634       
635                tTotalConnections_.Attach(GetDlgItem(IDC_BC_TMAXCONN));
636                tUploadConnections_.Attach(GetDlgItem(IDC_BC_TMAXUP));
637                tDownloadRate_.Attach(GetDlgItem(IDC_BC_TDOWNRATE));
638                tUploadRate_.Attach(GetDlgItem(IDC_BC_TUPRATE));
639
640                gTotalConnections_ = hal::config().maxConnections;
641                gUploadConnections_ = hal::config().maxUploads;
642                gDownloadRate_ = hal::config().downRate;
643                gUploadRate_ = hal::config().upRate;
644       
645                tTotalConnections_ = hal::config().torrentMaxConnections;
646                tUploadConnections_ = hal::config().torrentMaxUploads;
647                tDownloadRate_ = hal::config().torrentDownRate;
648                tUploadRate_ = hal::config().torrentUpRate;
649       
650                BOOL retval =  DoDataExchange(false);
651
652                autosizeClass::CtrlsArrange();
653                return retval;
654        }
655
656        void onFolderBrowse(UINT, int, HWND hWnd)
657        {
658                hal::bittorrent().clearIpFilter();
659               
660                wstring folderSelect = hal::app().res_wstr(HAL_FOLDER_SELECT);
661
662                WTL::CFolderDialog fldDlg (NULL, folderSelect.c_str(),
663                        BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE);
664
665                if (IDOK == fldDlg.DoModal())
666                        SetDlgItemText(IDC_BC_SAVEFOLDER, fldDlg.m_szFolderPath);
667        }
668
669    int OnApply()
670        {
671                hal::event().post(shared_ptr<hal::EventDetail>(
672                        new hal::EventMsg(L"Applying torrent options.", hal::Event::info)));
673
674                hal::config().maxConnections = gTotalConnections_;
675                hal::config().maxUploads = gUploadConnections_;
676                hal::config().downRate = gDownloadRate_;
677                hal::config().upRate = gUploadRate_;
678
679                hal::config().torrentMaxConnections = tTotalConnections_;
680                hal::config().torrentMaxUploads = tUploadConnections_;
681                hal::config().torrentDownRate = tDownloadRate_;
682                hal::config().torrentUpRate = tUploadRate_;
683               
684                return DoDataExchange(true);
685        }
686       
687private:
688        CHaliteEditCtrl<int> gTotalConnections_;
689        CHaliteEditCtrl<int> gUploadConnections_;
690        CHaliteEditCtrl<float> gDownloadRate_;
691        CHaliteEditCtrl<float> gUploadRate_;
692       
693        CHaliteEditCtrl<int> tTotalConnections_;
694        CHaliteEditCtrl<int> tUploadConnections_;
695        CHaliteEditCtrl<float> tDownloadRate_;
696        CHaliteEditCtrl<float> tUploadRate_;
697};
698
699class RemoteOptions :
700    public WTL::CPropertyPageImpl<RemoteOptions>,
701    public WTL::CWinDataExchange<RemoteOptions>
702{
703public:
704    enum { IDD = IDD_CONFIGREMOTE };
705
706        RemoteOptions()
707        {}
708
709        ~RemoteOptions()
710        {}
711
712    BEGIN_MSG_MAP_EX(RemoteOptions)
713                MSG_WM_INITDIALOG(OnInitDialog)
714        CHAIN_MSG_MAP(CPropertyPageImpl<RemoteOptions>)
715    END_MSG_MAP()
716
717    BEGIN_DDX_MAP(RemoteOptions)
718//      DDX_CHECK(IDC_REMOTECTRL, INI().remoteConfig().isEnabled)
719//      DDX_INT(IDC_REMOTEPORT, INI().remoteConfig().port)
720    END_DDX_MAP()
721
722    BOOL OnInitDialog ( HWND hwndFocus, LPARAM lParam )
723        {
724                return DoDataExchange(false);
725        }
726
727    int OnApply()
728        {
729                hal::event().post(shared_ptr<hal::EventDetail>(
730                        new hal::EventMsg(L"Applying remote options.", hal::Event::info)));
731
732                return DoDataExchange(true);
733        }
734};
735
736class AboutOptions :
737    public WTL::CPropertyPageImpl<AboutOptions>,
738        public WTL::CDialogResize<AboutOptions>
739{
740        typedef AboutOptions thisClass;
741        typedef WTL::CDialogResize<thisClass> resizeClass;
742
743public:
744    enum { IDD = IDD_ABOUT };
745
746    BEGIN_MSG_MAP_EX(thisClass)
747                MSG_WM_INITDIALOG(OnInitDialog)
748                CHAIN_MSG_MAP(resizeClass)
749        CHAIN_MSG_MAP(CPropertyPageImpl<thisClass>)
750    END_MSG_MAP()
751
752    BEGIN_DLGRESIZE_MAP(thisClass)
753                DLGRESIZE_CONTROL(IDC_RICHEDITABOUT, DLSZ_SIZE_X|DLSZ_SIZE_Y)
754                DLGRESIZE_CONTROL(IDC_ABOUT_VERSION, DLSZ_MOVE_X|DLSZ_MOVE_Y)
755        END_DLGRESIZE_MAP()
756
757    BOOL OnInitDialog (HWND hwndFocus, LPARAM lParam)
758        {
759                richEdit_.Attach(GetDlgItem(IDC_RICHEDITABOUT));
760
761                std::pair<void*, size_t> res = hal::app().res_find_lock(IDR_ABOUT_TEXT, HALITE_RTF_RES_TYPE);
762
763                string rtf(static_cast<char*>(res.first), res.second);
764                wstring wrtf = hal::from_utf8_safe(rtf);
765
766                richEdit_.SendMessage(WM_SETTEXT, 0, (LPARAM)wrtf.c_str());
767                richEdit_.SetSelNone();
768//              richEdit_.SetEventMask(ENM_REQUESTRESIZE);
769
770        resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
771
772                return true;
773        }
774
775private:
776
777        WTL::CRichEditCtrl richEdit_;
778        RECT richRect_;
779};
780
781class ConfigOptionsProp :
782        public WTL::CPropertySheet,
783        public WTL::CDialogResize<ConfigOptionsProp>
784{
785        typedef ConfigOptionsProp thisClass;
786        typedef WTL::CDialogResize<thisClass> resizeClass;
787
788public:
789    ConfigOptionsProp(HaliteWindow* haliteWindow, LPCTSTR title = (LPCTSTR)NULL,
790                UINT uStartPage = 0, HWND hWndParent = NULL) :
791        CPropertySheet(title, uStartPage, hWndParent),
792                m_bCentered(false),
793                generalOptions(haliteWindow)
794    {
795                AddPage(generalOptions);
796                AddPage(bitTorrentOptions);
797                AddPage(securityOptions);
798                AddPage(torrentsOptions);
799        //      AddPage(remoteControlOptions);
800                AddPage(aboutOptions);
801    }
802
803    BEGIN_MSG_MAP_EX(ConfigOptionsProp)
804        MESSAGE_HANDLER(WM_SHOWWINDOW, OnShowWindow)
805                MSG_WM_SIZE(OnSize)
806                CHAIN_MSG_MAP(resizeClass)
807        CHAIN_MSG_MAP(CPropertySheet)
808    END_MSG_MAP()
809
810    BEGIN_DLGRESIZE_MAP(thisClass)
811                DLGRESIZE_CONTROL(0x3020, DLSZ_SIZE_X|DLSZ_SIZE_Y)
812
813                DLGRESIZE_CONTROL(0x1, DLSZ_MOVE_X|DLSZ_MOVE_Y)
814                DLGRESIZE_CONTROL(0x2, DLSZ_MOVE_X|DLSZ_MOVE_Y)
815                DLGRESIZE_CONTROL(0x3021, DLSZ_MOVE_X|DLSZ_MOVE_Y)
816        END_DLGRESIZE_MAP()
817
818        void OnSize(UINT, WTL::CSize)
819        {
820        SetMsgHandled(false);
821
822        HWND propTabs = GetDlgItem(0x3020);
823
824                RECT rect;
825                ::GetWindowRect(propTabs, &rect);
826
827                ::MapWindowPoints(NULL, m_hWnd, (LPPOINT)&rect, 2);
828                ::SendMessage(propTabs, TCM_ADJUSTRECT, false, (LPARAM)&rect);
829
830                ::MoveWindow(GetActivePage(), rect.left, rect.top,
831            rect.right-rect.left, rect.bottom-rect.top, true);
832        }
833
834    LRESULT OnShowWindow(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& bHandled)
835    {
836        if (wParam == TRUE)
837        {
838            WTL::CMenuHandle pSysMenu = GetSystemMenu(FALSE);
839
840                if (pSysMenu != NULL)
841                pSysMenu.InsertMenu(-1, MF_BYPOSITION|MF_STRING, SC_SIZE, L"&Size");
842
843            ModifyStyle(0, WS_THICKFRAME, 0);
844            Center();
845
846            resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
847        }
848               
849                bHandled = FALSE;
850               
851        return 0;
852    }
853
854    void Center(void)
855    {
856        if (!m_bCentered)
857        {
858            CenterWindow();
859            m_bCentered = true;
860        }
861    }
862
863private:
864    bool m_bCentered;
865
866        GeneralOptions generalOptions;
867        BitTorrentOptions bitTorrentOptions;
868        SecurityOptions securityOptions;
869        TorrentsOptions torrentsOptions;
870        RemoteOptions remoteControlOptions;
871        AboutOptions aboutOptions;
872};
873
874#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.