source: trunk/src/HaliteWindow.hpp @ 620

Revision 620, 7.2 KB checked in by Eoin, 12 years ago (diff)

Naming scheme improvements

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