source: src/ConfigOptions.hpp @ 333

Revision 333, 44.0 KB checked in by Eoin, 12 years ago (diff)

UI fully converted to Autosize.

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