source: trunk/src/SplashDialog.hpp @ 441

Revision 441, 3.2 KB checked in by Eoin, 12 years ago (diff)

Revamped the CloseSplash? Dialog.
Cleaned some UI rough edges.

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 IDC_NEWTORRENT_CREATOR_TEXT           HAL_SPLASHDIALOG_BEGIN+3
17//#define IDC_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 CDialogImpl<SplashDialog>,
31        public hal::IniBase<SplashDialog>,
32        public CWinDataExchange<SplashDialog>,
33        public CDialogResize<SplashDialog>
34{
35protected:
36        typedef SplashDialog thisClass;
37        typedef CDialogImpl<thisClass> baseClass;
38        typedef hal::IniBase<thisClass> iniClass;
39        typedef CDialogResize<thisClass> resizeClass;
40
41public:
42        enum { IDD = IDD_CLOSESPLASH };
43
44        SplashDialog() :       
45                iniClass("SplashDialog", "dialog"),     
46                rect_(0,0,0,0)
47        {
48                Load();
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(IDC_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(IDC_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                GetWindowRect(rect_);
96                Save();
97                EndDialog(0);
98        }
99
100        void ReportNumActive(int num)
101        {
102                SetDlgItemText(HAL_CSPLASH_NUM_ACT, (wformat(hal::app().res_wstr(HAL_CSPLASH_ACT_MSG)) % num).str().c_str());
103        }
104
105        void SplashThread()
106        {
107                hal::bittorrent().closeAll(bind(&SplashDialog::ReportNumActive, this, _1));
108               
109                SetDlgItemText(HAL_CSPLASH_NUM_ACT, hal::app().res_wstr(HAL_CSPLASH_SHUTDOWN_MSG).c_str());
110
111                hal::bittorrent().shutDownSession();
112               
113                DoDataExchange(true);
114
115                GetWindowRect(rect_);
116                Save();
117                EndDialog(0);
118        }
119       
120        BOOL PreTranslateMessage(MSG* pMsg)
121        {
122                return this->IsDialogMessage(pMsg);
123        }
124       
125private:
126        boost::scoped_ptr<thread> thread_ptr;
127
128        CRect rect_;
129};
130
131#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.