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_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 | |
---|
28 | class HaliteDialog; |
---|
29 | class AdvHaliteDialog; |
---|
30 | |
---|
31 | class ui_signal : noncopyable |
---|
32 | { |
---|
33 | public: |
---|
34 | void attach(boost::function<void ()> fn) { ui_.connect(fn); } |
---|
35 | void update() { } |
---|
36 | |
---|
37 | private: |
---|
38 | boost::signal<void ()> ui_; |
---|
39 | }; |
---|
40 | |
---|
41 | class HaliteWindow : |
---|
42 | public CFrameWindowImpl<HaliteWindow>, |
---|
43 | public CUpdateUI<HaliteWindow>, |
---|
44 | public CDropFileTarget<HaliteWindow>, |
---|
45 | public CMessageFilter, |
---|
46 | public CIdleHandler, |
---|
47 | public hal::IniBase<HaliteWindow>, |
---|
48 | private boost::noncopyable |
---|
49 | { |
---|
50 | public: |
---|
51 | HaliteWindow(unsigned ARE_YOU_ME); |
---|
52 | ~HaliteWindow(); |
---|
53 | |
---|
54 | DECLARE_FRAME_WND_CLASS(NULL, IDR_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(IDR_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::TorrentDetails& allTorrents)> fn) |
---|
109 | { |
---|
110 | return ui_update_signal_.connect(fn); |
---|
111 | } |
---|
112 | |
---|
113 | boost::signal<void (const hal::TorrentDetails& 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 | |
---|
128 | protected: |
---|
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, CSize); |
---|
153 | void OnMove(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 | ar & BOOST_SERIALIZATION_NVP(rect); |
---|
181 | ar & BOOST_SERIALIZATION_NVP(splitterPos); |
---|
182 | ar & BOOST_SERIALIZATION_NVP(use_tray); |
---|
183 | ar & BOOST_SERIALIZATION_NVP(advancedUI); |
---|
184 | ar & BOOST_SERIALIZATION_NVP(activeTab); |
---|
185 | if (version > 0) { |
---|
186 | ar & BOOST_SERIALIZATION_NVP(closeToTray); |
---|
187 | ar & BOOST_SERIALIZATION_NVP(confirmClose); |
---|
188 | } |
---|
189 | } |
---|
190 | |
---|
191 | friend class GeneralOptions; |
---|
192 | |
---|
193 | private: |
---|
194 | // These two gotta be first!!! |
---|
195 | boost::signal<void (const hal::TorrentDetails& tD)> ui_update_signal_; |
---|
196 | boost::signal<void ()> save_state_signal_; |
---|
197 | |
---|
198 | CCommandBarCtrl m_CmdBar; |
---|
199 | CHorSplitterWindow m_Split; |
---|
200 | CMultiPaneStatusBarCtrl m_StatusBar; |
---|
201 | CTrayNotifyIcon trayIcon_; |
---|
202 | |
---|
203 | HaliteListViewCtrl haliteList; |
---|
204 | |
---|
205 | boost::scoped_ptr<HaliteDialog> mp_dlg; |
---|
206 | boost::scoped_ptr<AdvHaliteDialog> mp_advDlg; |
---|
207 | |
---|
208 | bool whichSimple_; |
---|
209 | |
---|
210 | ui_signal ui_; |
---|
211 | |
---|
212 | unsigned WM_AreYouMe_; |
---|
213 | |
---|
214 | CRect rect; |
---|
215 | unsigned int splitterPos; |
---|
216 | bool use_tray; |
---|
217 | bool advancedUI; |
---|
218 | bool closeToTray; |
---|
219 | bool confirmClose; |
---|
220 | int activeTab; |
---|
221 | }; |
---|
222 | |
---|
223 | BOOST_CLASS_VERSION(HaliteWindow, 1) |
---|
224 | |
---|
225 | #endif // RC_INVOKED |
---|