source: src/HaliteWindowMini.hpp @ 347

Revision 347, 5.9 KB checked in by Eoin, 13 years ago (diff)

Renamed HaliteIni? to halIni.

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