source: trunk/src/HaliteWindow.hpp @ 616

Revision 616, 7.1 KB checked in by Eoin, 12 years ago (diff)

Queue adjustment almost implemented, one last bit to link up.

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{
51public:
52        HaliteWindow(unsigned ARE_YOU_ME);
53        ~HaliteWindow();
54
55        DECLARE_FRAME_WND_CLASS(NULL, HAL_MAINFRAME);
56
57        ui_signal& ui() { return ui_; }
58
59        BEGIN_MSG_MAP_EX(HaliteWindow)
60                MSG_WM_CREATE(OnCreate)
61                MSG_WM_CLOSE(OnClose)
62                MSG_WM_DESTROY(OnDestroy)
63                MSG_WM_SIZE(OnSize)
64                MSG_WM_SHOWWINDOW(OnShowWindow)
65                MSG_WM_MOVE(OnMove)
66                MSG_WM_SHOWWINDOW(OnShowWindow)
67                MSG_WM_ERASEBKGND(OnEraseBkgnd)
68                MSG_WM_TIMER(OnTimer)
69                MSG_WM_COPYDATA(OnCopyData);
70                MESSAGE_HANDLER(WM_AreYouMe_, OnAreYouMe)
71                MESSAGE_HANDLER_EX(WM_TRAYNOTIFY, OnTrayNotification)   
72               
73                MSG_WM_ERASEBKGND(OnEraseBkgnd)
74                //MSG_WM_PAINT(OnPaint)
75
76                COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew)
77                COMMAND_ID_HANDLER(ID_FILE_OPEN, OnFileOpen)
78                COMMAND_ID_HANDLER(ID_RESUME, OnResumeAll)
79                COMMAND_ID_HANDLER(ID_PAUSE, OnPauseAll)
80                COMMAND_ID_HANDLER(ID_SETTINGS, OnSettings)
81                COMMAND_ID_HANDLER(ID_ADVANCED, OnAdvanced)
82                COMMAND_ID_HANDLER(ID_HELP, OnHelp)
83                COMMAND_ID_HANDLER(ID_VIEW_STATUS_BAR, OnViewStatusBar)
84
85                COMMAND_ID_HANDLER(ID_TRAY_OPENHALITE, OnTrayOpenHalite)
86                COMMAND_ID_HANDLER(ID_TRAY_RESUMEALL, OnResumeAll)
87                COMMAND_ID_HANDLER(ID_TRAY_PAUSEALL, OnPauseAll)
88                COMMAND_ID_HANDLER(ID_TRAY_EXIT, OnTrayExit)
89
90                COMMAND_ID_HANDLER(HAL_WINDOW_AUTOSHUTDOWN, OnAutoShutdown)
91                COMMAND_ID_HANDLER(HAL_WINDOW_EXIT, OnToolbarExit)
92
93                REFLECT_NOTIFICATIONS()
94                CHAIN_MSG_MAP(CUpdateUI<HaliteWindow>)
95//              CHAIN_MSG_MAP(CFrameWindowImpl<HaliteWindow>)
96                CHAIN_MSG_MAP(WTL::CAeroFrameImpl<HaliteWindow>)
97                CHAIN_MSG_MAP(CDropFileTarget<HaliteWindow>)
98        END_MSG_MAP()
99
100        BEGIN_UPDATE_UI_MAP(HaliteWindow)
101                UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
102                UPDATE_ELEMENT(HAL_TRAY_MENU, UPDUI_MENUPOPUP)
103
104                UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
105        UPDATE_ELEMENT(0, UPDUI_STATUSBAR)
106        UPDATE_ELEMENT(1, UPDUI_STATUSBAR)
107        UPDATE_ELEMENT(2, UPDUI_STATUSBAR)
108        UPDATE_ELEMENT(3, UPDUI_STATUSBAR)
109        END_UPDATE_UI_MAP()
110
111        void ProcessFile(LPCTSTR lpszPath);
112       
113        boost::signals::connection connectUiUpdate(boost::function<void (const hal::torrent_details_manager& allTorrents)> fn) 
114        { 
115                return ui_update_signal_.connect(fn); 
116        }
117       
118        boost::signal<void (const hal::torrent_details_manager& allTorrents)> & ui_sig()
119        { 
120                return ui_update_signal_; 
121        }
122       
123        void issueUiUpdate();
124       
125        void connectSaveState(boost::function<void ()> fn) 
126        { 
127                save_state_signal_.connect(fn); 
128        }
129       
130        HaliteListViewCtrl& torrentsList() { return haliteList; }
131        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&);
132       
133protected:
134        typedef hal::IniBase<HaliteWindow> iniClass;
135
136        virtual BOOL PreTranslateMessage(MSG* pMsg);
137
138        virtual BOOL OnIdle()
139        {
140                UIUpdateStatusBar();
141                UIUpdateToolBar();
142                return FALSE;
143        }
144
145        enum {
146                ID_UPDATE_TIMER = 1,
147                ID_SAVE_TIMER,
148                WM_TRAYNOTIFY = WM_USER+123
149        };
150
151        LRESULT OnUpdateUIInfo(UINT, WPARAM, LPARAM, BOOL&);
152        LRESULT HaliteWindow::OnNotify(int wParam, LPNMHDR lParam);
153        LRESULT OnCreate(LPCREATESTRUCT lpcs);
154    void OnTimer(UINT uTimerID);
155        void OnClose();
156        void OnDestroy();
157        void OnSize(UINT, WTL::CSize);
158        void OnMove(WTL::CSize);
159        void OnShowWindow(BOOL bShow, UINT nStatus);
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        LRESULT OnToolbarExit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
172        LRESULT OnAutoShutdown(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
173
174        LRESULT OnViewStatusBar(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
175        LRESULT OnEraseBkgnd(HDC hdc);
176        LRESULT OnPaint(HDC dc);
177
178        LRESULT OnCopyData(HWND, PCOPYDATASTRUCT pCSD);
179
180        void updateWindow();
181        void setCorrectDialog();
182
183    friend class boost::serialization::access;
184    template<class Archive>
185    void serialize(Archive& ar, const unsigned int version)
186        {               
187                using boost::serialization::make_nvp;
188
189                switch (version)
190                {
191                case 2:
192                ar      & make_nvp("close_to_tray", closeToTray)
193                        & make_nvp("use_tray", use_tray)
194                        & make_nvp("confirm_close", confirmClose)
195                        & make_nvp("splitter_pos", splitterPos)
196                        & make_nvp("advanced_ui", advancedUI)
197                        & make_nvp("active_tab", activeTab)
198                        & make_nvp("rect", rect);
199                break;
200
201                case 1:
202                ar      & make_nvp("closeToTray", closeToTray)
203                        & make_nvp("confirmClose", confirmClose);
204                       
205                case 0:
206                ar      & make_nvp("rect", rect)
207                        & make_nvp("splitterPos", splitterPos)
208                        & make_nvp("use_tray", use_tray)
209                        & make_nvp("advancedUI", advancedUI)
210                        & make_nvp("activeTab", activeTab);
211                }
212        }
213       
214        friend class GeneralOptions;
215
216private:
217        void ShutdownThread();
218
219        // These two gotta be first!!!
220        boost::signal<void (const hal::torrent_details_manager& tD)> ui_update_signal_;
221        boost::signal<void ()> save_state_signal_;     
222       
223        WTL::CCommandBarCtrl m_CmdBar;
224        WTL::CHorSplitterWindow m_Split;
225    WTL::CMultiPaneStatusBarCtrl m_StatusBar;
226        CTrayNotifyIcon trayIcon_;
227
228        HaliteListViewCtrl haliteList;
229       
230        boost::scoped_ptr<HaliteDialog> mp_dlg;
231        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg;
232
233        bool whichSimple_;
234
235        ui_signal ui_;
236
237        unsigned WM_AreYouMe_;
238
239        WTL::CRect rect;
240        unsigned int splitterPos;
241        bool use_tray;
242        bool advancedUI;
243        bool closeToTray;
244        bool confirmClose;
245        int activeTab;
246};
247
248BOOST_CLASS_VERSION(HaliteWindow, 2)
249
250#endif // RC_INVOKED
Note: See TracBrowser for help on using the repository browser.