source: src/ConfigOptions.hpp @ 321

Revision 321, 34.0 KB checked in by Eoin, 12 years ago (diff)

Fixed silly focusedTorrent reset in DialogBase?.

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