source: trunk/src/HaliteWindow.hpp @ 542

Revision 542, 6.8 KB checked in by Eoin, 11 years ago (diff)

Updating HaliteWindow? serialization.

Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2008.
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_WINDOW_BEGIN                         13000
10#define HAL_WINDOW_CLOSECONFRIM         ID_WINDOW_BEGIN + 1
11#define HAL_WINDOW_SOCKETS_FAILED       ID_WINDOW_BEGIN + 2
12
13#ifndef RC_INVOKED
14
15#include "stdAfx.hpp"
16#include "DropFileTarget.h"
17#include "NTray.hpp"
18#include "HaliteListView.hpp"
19#include "halIni.hpp"
20#include "halTorrent.hpp"
21
22#include <boost/archive/xml_oarchive.hpp>
23#include <boost/archive/xml_iarchive.hpp>
24#include <boost/serialization/vector.hpp>
25
26#include <boost/signals.hpp>
27
28class HaliteDialog;
29class AdvHaliteDialog;
30
31class ui_signal : noncopyable
32{
33public:
34        void attach(boost::function<void ()> fn) { ui_.connect(fn); }
35        void update() {  }
36
37private:
38        boost::signal<void ()> ui_;
39};
40
41class HaliteWindow :
42        public WTL::CFrameWindowImpl<HaliteWindow>,
43        public WTL::CUpdateUI<HaliteWindow>,
44        public CDropFileTarget<HaliteWindow>,
45        public WTL::CMessageFilter,
46        public WTL::CIdleHandler,
47        public hal::IniBase<HaliteWindow>,
48        private boost::noncopyable
49{
50public:
51        HaliteWindow(unsigned ARE_YOU_ME);
52        ~HaliteWindow();
53
54        DECLARE_FRAME_WND_CLASS(NULL, HAL_MAINFRAME);
55
56        ui_signal& ui() { return ui_; }
57
58        BEGIN_MSG_MAP_EX(HaliteWindow)
59                MSG_WM_CREATE(OnCreate)
60                MSG_WM_CLOSE(OnClose)
61                MSG_WM_DESTROY(OnDestroy)
62                MSG_WM_SIZE(OnSize)
63                MSG_WM_SHOWWINDOW(OnShowWindow)
64                MSG_WM_MOVE(OnMove)
65                MSG_WM_SHOWWINDOW(OnShowWindow)
66                MSG_WM_ERASEBKGND(OnEraseBkgnd)
67                MSG_WM_TIMER(OnTimer)
68                MSG_WM_COPYDATA(OnCopyData);
69                MESSAGE_HANDLER(WM_AreYouMe_, OnAreYouMe)
70                MESSAGE_HANDLER_EX(WM_TRAYNOTIFY, OnTrayNotification)   
71               
72                MSG_WM_ERASEBKGND(OnEraseBkgnd)
73                //MSG_WM_PAINT(OnPaint)
74
75                COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
76                COMMAND_ID_HANDLER(ID_FILE_OPEN, OnFileOpen)
77                COMMAND_ID_HANDLER(ID_RESUME, OnResumeAll)
78                COMMAND_ID_HANDLER(ID_PAUSE, OnPauseAll)
79                COMMAND_ID_HANDLER(ID_SETTINGS, OnSettings)
80                COMMAND_ID_HANDLER(ID_ADVANCED, OnAdvanced)
81                COMMAND_ID_HANDLER(ID_HELP, OnHelp)
82                COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
83
84                COMMAND_ID_HANDLER(ID_TRAY_OPENHALITE, OnTrayOpenHalite)
85                COMMAND_ID_HANDLER(ID_TRAY_RESUMEALL, OnResumeAll)
86                COMMAND_ID_HANDLER(ID_TRAY_PAUSEALL, OnPauseAll)
87                COMMAND_ID_HANDLER(ID_TRAY_EXIT, OnTrayExit)
88
89                REFLECT_NOTIFICATIONS()
90                CHAIN_MSG_MAP(CUpdateUI<HaliteWindow>)
91                CHAIN_MSG_MAP(CFrameWindowImpl<HaliteWindow>)
92                CHAIN_MSG_MAP(CDropFileTarget<HaliteWindow>)
93        END_MSG_MAP()
94
95        BEGIN_UPDATE_UI_MAP(HaliteWindow)
96                UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
97                UPDATE_ELEMENT(HAL_TRAY_MENU, UPDUI_MENUPOPUP)
98
99                UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
100        UPDATE_ELEMENT(0, UPDUI_STATUSBAR)
101        UPDATE_ELEMENT(1, UPDUI_STATUSBAR)
102        UPDATE_ELEMENT(2, UPDUI_STATUSBAR)
103        UPDATE_ELEMENT(3, UPDUI_STATUSBAR)
104        END_UPDATE_UI_MAP()
105
106        void ProcessFile(LPCTSTR lpszPath);
107       
108        boost::signals::connection connectUiUpdate(boost::function<void (const hal::torrent_details_manager& allTorrents)> fn) 
109        { 
110                return ui_update_signal_.connect(fn); 
111        }
112       
113        boost::signal<void (const hal::torrent_details_manager& allTorrents)> & ui_sig()
114        { 
115                return ui_update_signal_; 
116        }
117       
118        void issueUiUpdate();
119       
120        void connectSaveState(boost::function<void ()> fn) 
121        { 
122                save_state_signal_.connect(fn); 
123        }
124       
125        HaliteListViewCtrl& torrentsList() { return haliteList; }
126        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&);
127       
128protected:
129        typedef hal::IniBase<HaliteWindow> iniClass;
130
131        virtual BOOL PreTranslateMessage(MSG* pMsg);
132
133        virtual BOOL OnIdle()
134        {
135                UIUpdateStatusBar();
136                UIUpdateToolBar();
137                return FALSE;
138        }
139
140        enum {
141                ID_UPDATE_TIMER = 1,
142                ID_SAVE_TIMER,
143                WM_TRAYNOTIFY = WM_USER+123
144        };
145
146        LRESULT OnUpdateUIInfo(UINT, WPARAM, LPARAM, BOOL&);
147        LRESULT HaliteWindow::OnNotify(int wParam, LPNMHDR lParam);
148        LRESULT OnCreate(LPCREATESTRUCT lpcs);
149    void OnTimer(UINT uTimerID);
150        void OnClose();
151        void OnDestroy();
152        void OnSize(UINT, WTL::CSize);
153        void OnMove(WTL::CSize);
154        void OnShowWindow(BOOL bShow, UINT nStatus);
155        LRESULT OnTrayNotification(UINT, WPARAM wParam, LPARAM lParam);
156        LRESULT OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
157        LRESULT OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
158
159        LRESULT OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
160        LRESULT OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
161        LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
162        LRESULT OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
163        LRESULT OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
164        LRESULT OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
165        LRESULT OnAdvanced(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
166
167        LRESULT OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
168        LRESULT OnEraseBkgnd(HDC hdc);
169        LRESULT OnPaint(HDC dc);
170
171        LRESULT OnCopyData(HWND, PCOPYDATASTRUCT pCSD);
172
173        void updateWindow();
174        void setCorrectDialog();
175
176    friend class boost::serialization::access;
177    template<class Archive>
178    void serialize(Archive& ar, const unsigned int version)
179        {               
180                using boost::serialization::make_nvp;
181
182                switch (version)
183                {
184                case 2:
185                ar      & make_nvp("close_to_tray", closeToTray)
186                        & make_nvp("use_tray", use_tray)
187                        & make_nvp("confirm_close", confirmClose)
188                        & make_nvp("splitter_pos", splitterPos)
189                        & make_nvp("advanced_ui", advancedUI)
190                        & make_nvp("active_tab", activeTab)
191                        & make_nvp("rect", rect);
192                break;
193
194                case 1:
195                ar      & make_nvp("closeToTray", closeToTray)
196                        & make_nvp("confirmClose", confirmClose);
197                       
198                case 0:
199                ar      & make_nvp("rect", rect)
200                        & make_nvp("splitterPos", splitterPos)
201                        & make_nvp("use_tray", use_tray)
202                        & make_nvp("advancedUI", advancedUI)
203                        & make_nvp("activeTab", activeTab);
204                }
205        }
206       
207        friend class GeneralOptions;
208
209private:
210        void ShutdownThread();
211
212        // These two gotta be first!!!
213        boost::signal<void (const hal::torrent_details_manager& tD)> ui_update_signal_;
214        boost::signal<void ()> save_state_signal_;     
215       
216        WTL::CCommandBarCtrl m_CmdBar;
217        WTL::CHorSplitterWindow m_Split;
218    WTL::CMultiPaneStatusBarCtrl m_StatusBar;
219        CTrayNotifyIcon trayIcon_;
220
221        HaliteListViewCtrl haliteList;
222       
223        boost::scoped_ptr<HaliteDialog> mp_dlg;
224        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg;
225
226        bool whichSimple_;
227
228        ui_signal ui_;
229
230        unsigned WM_AreYouMe_;
231
232        WTL::CRect rect;
233        unsigned int splitterPos;
234        bool use_tray;
235        bool advancedUI;
236        bool closeToTray;
237        bool confirmClose;
238        int activeTab;
239};
240
241BOOST_CLASS_VERSION(HaliteWindow, 2)
242
243#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.