source: src/HaliteWindow.hpp @ 236

Revision 236, 6.0 KB checked in by Eoin, 13 years ago (diff)

Another but minor change to UI updating.

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::TorrentDetail_vec& allTorrents, 
101                const hal::TorrentDetail_vec& selectedTorrents, const hal::TorrentDetail_ptr selectedTorrent)> fn) 
102        { 
103                ui_update_signal_.connect(fn); 
104        }
105               
106        boost::signal<void (const hal::TorrentDetail_vec& allTorrents, 
107                const hal::TorrentDetail_vec& selectedTorrents, 
108                const hal::TorrentDetail_ptr selectedTorrent)> & ui_sig()
109        { 
110                return ui_update_signal_; 
111        }
112       
113        void issueUiUpdate();
114       
115        void connectSaveState(boost::function<void ()> fn) 
116        { 
117                save_state_signal_.connect(fn); 
118        }
119       
120protected:
121        typedef CHaliteIni<HaliteWindow> iniClass;
122
123        virtual BOOL PreTranslateMessage(MSG* pMsg);
124
125        virtual BOOL OnIdle()
126        {
127                UIUpdateStatusBar();
128                UIUpdateToolBar();
129                return FALSE;
130        }
131
132        enum {
133                ID_UPDATE_TIMER = 1,
134                ID_SAVE_TIMER,
135                WM_TRAYNOTIFY = WM_USER+123
136        };
137
138        LRESULT OnUpdateUIInfo(UINT, WPARAM, LPARAM, BOOL&);
139        LRESULT HaliteWindow::OnNotify(int wParam, LPNMHDR lParam);
140        LRESULT OnCreate(LPCREATESTRUCT lpcs);
141    void OnTimer(UINT uTimerID);
142        void OnClose();
143        void OnSize(UINT, CSize);
144        void OnMove(CSize);
145        LRESULT OnTrayNotification(UINT, WPARAM wParam, LPARAM lParam);
146        LRESULT OnResumeAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
147        LRESULT OnTrayOpenHalite(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
148
149        LRESULT OnTrayExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
150        LRESULT OnFileNew(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
151        LRESULT OnFileOpen(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
152        LRESULT OnPauseAll(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
153        LRESULT OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
154        LRESULT OnHelp(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
155        LRESULT OnAdvanced(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
156
157        LRESULT OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
158        LRESULT OnEraseBkgnd(HDC hdc);
159
160        LRESULT OnCopyData(HWND, PCOPYDATASTRUCT pCSD);
161        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) { return WM_AreYouMe_; }
162
163        void updateWindow();
164        void setCorrectDialog();
165
166    friend class boost::serialization::access;
167    template<class Archive>
168    void serialize(Archive& ar, const unsigned int version)
169        {
170                ar & BOOST_SERIALIZATION_NVP(rect);
171                ar & BOOST_SERIALIZATION_NVP(splitterPos);
172                ar & BOOST_SERIALIZATION_NVP(use_tray);
173                ar & BOOST_SERIALIZATION_NVP(advancedUI);
174                ar & BOOST_SERIALIZATION_NVP(activeTab);
175        }
176       
177        friend class GeneralOptions;
178
179private:
180        // These two gotta be first!!!
181        boost::signal<void (const hal::TorrentDetail_vec& allTorrents, 
182                const hal::TorrentDetail_vec& selectedTorrents, const hal::TorrentDetail_ptr selectedTorrent)> 
183                        ui_update_signal_;
184        boost::signal<void ()> save_state_signal_;     
185       
186        CCommandBarCtrl m_CmdBar;
187        CHorSplitterWindow m_Split;
188    CMultiPaneStatusBarCtrl m_StatusBar;
189        CTrayNotifyIcon m_trayIcon;
190
191        HaliteListViewCtrl haliteList;
192       
193        boost::scoped_ptr<HaliteDialog> mp_dlg;
194        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg;
195
196        bool whichSimple_;
197
198        ui_signal ui_;
199
200        unsigned WM_AreYouMe_;
201
202        CRect rect;
203        unsigned int splitterPos;
204        bool use_tray;
205        bool advancedUI;
206        int activeTab;
207};
208
209BOOST_CLASS_VERSION(HaliteWindow, 0)
Note: See TracBrowser for help on using the repository browser.