source: trunk/src/ConfigOptions.hpp @ 373

Revision 373, 52.2 KB checked in by Eoin, 12 years ago (diff)

Test UPnP.

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