source: trunk/src/SplashDialog.hpp @ 531

Revision 531, 3.4 KB checked in by Eoin, 11 years ago (diff)

Switched trunk to hal::wform.

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 HAL_SPLASHDIALOG_BEGIN                  20200
10#define HAL_CSPLASH_MSG                                 HAL_SPLASHDIALOG_BEGIN+1
11#define HAL_CSPLASH_NUM_ACT                             HAL_SPLASHDIALOG_BEGIN+2
12#define HAL_CSPLASH_ACT_MSG                             HAL_SPLASHDIALOG_BEGIN+3
13#define HAL_CSPLASH_SHUTDOWN_MSG                HAL_SPLASHDIALOG_BEGIN+4
14#define HAL_SPLASH_FORCE_CLOSE                  HAL_SPLASHDIALOG_BEGIN+5
15
16//#define HAL_NEWTORRENT_CREATOR_TEXT           HAL_SPLASHDIALOG_BEGIN+3
17//#define HAL_NEWTORRENT_CREATOR                        HAL_SPLASHDIALOG_BEGIN+4
18
19#ifndef RC_INVOKED
20
21#ifndef HALITE_MINI
22#       include "Halite.hpp"
23#else
24#       include "Halite.hpp"
25#endif
26
27#include "halTorrent.hpp"
28
29class SplashDialog :
30        public ATL::CDialogImpl<SplashDialog>,
31        public hal::IniBase<SplashDialog>,
32        public WTL::CWinDataExchange<SplashDialog>,
33        public WTL::CDialogResize<SplashDialog>
34{
35protected:
36        typedef SplashDialog thisClass;
37        typedef ATL::CDialogImpl<thisClass> baseClass;
38        typedef hal::IniBase<thisClass> iniClass;
39        typedef WTL::CDialogResize<thisClass> resizeClass;
40
41public:
42        enum { IDD = HAL_CLOSESPLASH };
43
44        SplashDialog() :       
45                iniClass("SplashDialog", "dialog"),     
46                rect_(0,0,0,0)
47        {
48                load_from_ini();
49        }
50
51    BEGIN_MSG_MAP_EX(CMainDlg)
52        MSG_WM_INITDIALOG(onInitDialog)
53                COMMAND_ID_HANDLER_EX(HAL_SPLASH_FORCE_CLOSE, OnForceClose)
54
55                CHAIN_MSG_MAP(resizeClass)
56    END_MSG_MAP()
57       
58        BEGIN_DDX_MAP(CMainDlg)
59        DDX_CHECK(HAL_SPLASH_MSG, halite().showMessage_)
60    END_DDX_MAP()
61
62    BEGIN_DLGRESIZE_MAP(thisClass)
63                DLGRESIZE_CONTROL(HAL_CSPLASH_MSG, DLSZ_SIZE_X|DLSZ_SIZE_Y)
64                DLGRESIZE_CONTROL(HAL_CSPLASH_NUM_ACT, DLSZ_MOVE_Y|DLSZ_SIZE_X)
65                DLGRESIZE_CONTROL(HAL_SPLASH_MSG, DLSZ_MOVE_Y|DLSZ_SIZE_X)
66                DLGRESIZE_CONTROL(HAL_SPLASH_FORCE_CLOSE, DLSZ_MOVE_Y|DLSZ_MOVE_X)
67        END_DLGRESIZE_MAP()
68
69        friend class boost::serialization::access;
70    template<class Archive>
71    void serialize(Archive& ar, const unsigned int version)
72        {
73                ar & BOOST_SERIALIZATION_NVP(rect_);
74        }
75       
76        LRESULT onInitDialog(HWND, LPARAM)
77        {
78                resizeClass::DlgResize_Init(false, true, WS_CLIPCHILDREN);
79
80                if (rect_.left != rect_.right)
81                        MoveWindow(rect_.left, rect_.top, 
82                                rect_.right-rect_.left, rect_.bottom-rect_.top, true); 
83
84                CenterWindow();
85
86                DoDataExchange(false);
87               
88                thread_ptr.reset(new thread(bind(&SplashDialog::SplashThread, this)));
89               
90                return 0;
91        }
92
93        void OnForceClose(UINT, int, HWND hWnd)
94        {
95                thread_ptr.reset();
96                Sleep(200);
97
98                GetWindowRect(rect_);
99                save_to_ini();
100                EndDialog(0);
101        }
102
103        void ReportNumActive(int num)
104        {
105                SetDlgItemText(HAL_CSPLASH_NUM_ACT, (hal::wform(hal::app().res_wstr(HAL_CSPLASH_ACT_MSG)) % num).str().c_str());
106        }
107
108        void SplashThread()
109        {
110                hal::bittorrent().close_all(boost::optional<boost::function<void (int)> >(bind(&SplashDialog::ReportNumActive, this, _1)));
111               
112                SetDlgItemText(HAL_CSPLASH_NUM_ACT, hal::app().res_wstr(HAL_CSPLASH_SHUTDOWN_MSG).c_str());
113
114                hal::bittorrent().stopEventReceiver();
115                hal::bittorrent().shutDownSession();
116               
117                DoDataExchange(true);
118
119                GetWindowRect(rect_);
120                save_to_ini();
121                EndDialog(0);
122        }
123       
124        BOOL PreTranslateMessage(MSG* pMsg)
125        {
126                return this->IsDialogMessage(pMsg);
127        }
128       
129private:
130        boost::scoped_ptr<thread> thread_ptr;
131
132        WTL::CRect rect_;
133};
134
135#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.