source: trunk/src/HaliteWindow.hpp @ 364

Revision 364, 6.4 KB checked in by Eoin, 13 years ago (diff)

Added 'Close to tray' and 'Confirm on close'.

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