source: trunk/src/ConfigOptions.hpp @ 482

Revision 482, 58.6 KB checked in by Eoin, 12 years ago (diff)

... not yet it doesn't!

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