source: branch_service/src/HaliteWindowMini.hpp @ 356

Revision 356, 6.0 KB checked in by Eoin, 12 years ago (diff)

Fixed a bug with blocking non-visible uiUpdate connections.

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