source: branch/src/ConfigOptions.hpp @ 364

Revision 364, 44.6 KB checked in by Eoin, 13 years ago (diff)

Added 'Close to tray' and 'Confirm on close'.

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