source: src/HaliteWindow.hpp @ 237

Revision 237, 5.7 KB checked in by Eoin, 13 years ago (diff)
Line 
1
2#pragma once
3
4#include "stdAfx.hpp"
5#include "DropFileTarget.h"
6#include "NTray.hpp"
7#include "HaliteListView.hpp"
8#include "HaliteIni.hpp"
9#include "halTorrent.hpp"
10
11#include <boost/archive/xml_oarchive.hpp>
12#include <boost/archive/xml_iarchive.hpp>
13#include <boost/serialization/vector.hpp>
14
15#include <boost/signals.hpp>
16
17class HaliteDialog;
18class AdvHaliteDialog;
19
20template<class Archive>
21void serialize(Archive& ar, CRect& rect, const unsigned int version)
22{
23        ar & BOOST_SERIALIZATION_NVP(rect.top);
24        ar & BOOST_SERIALIZATION_NVP(rect.bottom);
25        ar & BOOST_SERIALIZATION_NVP(rect.left);
26        ar & BOOST_SERIALIZATION_NVP(rect.right);
27}
28
29class ui_signal : noncopyable
30{
31public:
32        void attach(boost::function<void ()> fn) { ui_.connect(fn); }
33        void update() { ui_(); }
34
35private:
36        boost::signal<void ()> ui_;
37};
38
39class HaliteWindow :
40        public CFrameWindowImpl<HaliteWindow>,
41        public CUpdateUI<HaliteWindow>,
42        public CDropFileTarget<HaliteWindow>,
43        public CMessageFilter,
44        public CIdleHandler,
45        public CHaliteIni<HaliteWindow>,
46        private boost::noncopyable
47{
48public:
49        HaliteWindow(unsigned ARE_YOU_ME);
50        ~HaliteWindow();
51
52        DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME);
53
54        ui_signal& ui() { return ui_; }
55
56        BEGIN_MSG_MAP_EX(HaliteWindow)
57                MSG_WM_CREATE(OnCreate)
58                MSG_WM_CLOSE(OnClose)
59                MSG_WM_SIZE(OnSize)
60                MSG_WM_MOVE(OnMove)
61                MSG_WM_ERASEBKGND(OnEraseBkgnd)
62                MSG_WM_TIMER(OnTimer)
63                MSG_WM_COPYDATA(OnCopyData);
64                MESSAGE_HANDLER(WM_AreYouMe_, OnAreYouMe)
65                MESSAGE_HANDLER_EX(WM_TRAYNOTIFY, OnTrayNotification)
66
67                COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
68                COMMAND_ID_HANDLER(ID_FILE_OPEN, OnFileOpen)
69                COMMAND_ID_HANDLER(ID_RESUME, OnResumeAll)
70                COMMAND_ID_HANDLER(ID_PAUSE, OnPauseAll)
71                COMMAND_ID_HANDLER(ID_SETTINGS, OnSettings)
72                COMMAND_ID_HANDLER(ID_ADVANCED, OnAdvanced)
73                COMMAND_ID_HANDLER(ID_HELP, OnHelp)
74                COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
75
76                COMMAND_ID_HANDLER(ID_TRAY_OPENHALITE, OnTrayOpenHalite)
77                COMMAND_ID_HANDLER(ID_TRAY_RESUMEALL, OnResumeAll)
78                COMMAND_ID_HANDLER(ID_TRAY_PAUSEALL, OnPauseAll)
79                COMMAND_ID_HANDLER(ID_TRAY_EXIT, OnTrayExit)
80
81                REFLECT_NOTIFICATIONS()
82                CHAIN_MSG_MAP(CUpdateUI<HaliteWindow>)
83                CHAIN_MSG_MAP(CFrameWindowImpl<HaliteWindow>)
84                CHAIN_MSG_MAP(CDropFileTarget<HaliteWindow>)
85        END_MSG_MAP()
86
87        BEGIN_UPDATE_UI_MAP(HaliteWindow)
88                UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
89                UPDATE_ELEMENT(IDR_TRAY_MENU, UPDUI_MENUPOPUP)
90
91                UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
92        UPDATE_ELEMENT(0, UPDUI_STATUSBAR)
93        UPDATE_ELEMENT(1, UPDUI_STATUSBAR)
94        UPDATE_ELEMENT(2, UPDUI_STATUSBAR)
95        UPDATE_ELEMENT(3, UPDUI_STATUSBAR)
96        END_UPDATE_UI_MAP()
97
98        void ProcessFile(LPCTSTR lpszPath);
99       
100        void connectUiUpdate(boost::function<void (const hal::TorrentDetails& allTorrents)> fn) 
101        { 
102                ui_update_signal_.connect(fn); 
103        }
104               
105        boost::signal<void (const hal::TorrentDetails& allTorrents)> & ui_sig()
106        { 
107                return ui_update_signal_; 
108        }
109       
110        void issueUiUpdate();
111       
112        void connectSaveState(boost::function<void ()> fn) 
113        { 
114                save_state_signal_.connect(fn); 
115        }
116       
117protected:
118        typedef CHaliteIni<HaliteWindow> iniClass;
119
120        virtual BOOL PreTranslateMessage(MSG* pMsg);
121
122        virtual BOOL OnIdle()
123        {
124                UIUpdateStatusBar();
125                UIUpdateToolBar();
126                return FALSE;
127        }
128
129        enum {
130                ID_UPDATE_TIMER = 1,
131                ID_SAVE_TIMER,
132                WM_TRAYNOTIFY = WM_USER+123
133        };
134
135        LRESULT OnUpdateUIInfo(UINT, WPARAM, LPARAM, BOOL&);
136        LRESULT HaliteWindow::OnNotify(int wParam, LPNMHDR lParam);
137        LRESULT OnCreate(LPCREATESTRUCT lpcs);
138    void OnTimer(UINT uTimerID);
139        void OnClose();
140        void OnSize(UINT, CSize);
141        void OnMove(CSize);
142        LRESULT OnTrayNotification(UINT, WPARAM wParam, LPARAM lParam);
143        LRESULT OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
144        LRESULT OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
145
146        LRESULT OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
147        LRESULT OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
148        LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
149        LRESULT OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
150        LRESULT OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
151        LRESULT OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
152        LRESULT OnAdvanced(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
153
154        LRESULT OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
155        LRESULT OnEraseBkgnd(HDC hdc);
156
157        LRESULT OnCopyData(HWND, PCOPYDATASTRUCT pCSD);
158        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) { return WM_AreYouMe_; }
159
160        void updateWindow();
161        void setCorrectDialog();
162
163    friend class boost::serialization::access;
164    template<class Archive>
165    void serialize(Archive& ar, const unsigned int version)
166        {
167                ar & BOOST_SERIALIZATION_NVP(rect);
168                ar & BOOST_SERIALIZATION_NVP(splitterPos);
169                ar & BOOST_SERIALIZATION_NVP(use_tray);
170                ar & BOOST_SERIALIZATION_NVP(advancedUI);
171                ar & BOOST_SERIALIZATION_NVP(activeTab);
172        }
173       
174        friend class GeneralOptions;
175
176private:
177        // These two gotta be first!!!
178        boost::signal<void (const hal::TorrentDetails& tD)> ui_update_signal_;
179        boost::signal<void ()> save_state_signal_;     
180       
181        CCommandBarCtrl m_CmdBar;
182        CHorSplitterWindow m_Split;
183    CMultiPaneStatusBarCtrl m_StatusBar;
184        CTrayNotifyIcon m_trayIcon;
185
186        HaliteListViewCtrl haliteList;
187       
188        boost::scoped_ptr<HaliteDialog> mp_dlg;
189        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg;
190
191        bool whichSimple_;
192
193        ui_signal ui_;
194
195        unsigned WM_AreYouMe_;
196
197        CRect rect;
198        unsigned int splitterPos;
199        bool use_tray;
200        bool advancedUI;
201        int activeTab;
202};
203
204BOOST_CLASS_VERSION(HaliteWindow, 0)
Note: See TracBrowser for help on using the repository browser.