source: trunk/src/HaliteWindow.hpp @ 764

Revision 764, 8.0 KB checked in by Eoin, 10 years ago (diff)

Fixed the starting (or not) of added torrents.

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