source: src/HaliteWindow.hpp @ 347

Revision 347, 6.1 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#include "stdAfx.hpp"
10#include "DropFileTarget.h"
11#include "NTray.hpp"
12#include "HaliteListView.hpp"
13#include "halIni.hpp"
14#include "halTorrent.hpp"
15
16#include <boost/archive/xml_oarchive.hpp>
17#include <boost/archive/xml_iarchive.hpp>
18#include <boost/serialization/vector.hpp>
19
20#include <boost/signals.hpp>
21
22class HaliteDialog;
23class AdvHaliteDialog;
24
25template<class Archive>
26void serialize(Archive& ar, CRect& rect, const unsigned int version)
27{
28        ar & BOOST_SERIALIZATION_NVP(rect.top);
29        ar & BOOST_SERIALIZATION_NVP(rect.bottom);
30        ar & BOOST_SERIALIZATION_NVP(rect.left);
31        ar & BOOST_SERIALIZATION_NVP(rect.right);
32}
33
34class ui_signal : noncopyable
35{
36public:
37        void attach(boost::function<void ()> fn) { ui_.connect(fn); }
38        void update() {  }
39
40private:
41        boost::signal<void ()> ui_;
42};
43
44class HaliteWindow :
45        public CFrameWindowImpl<HaliteWindow>,
46        public CUpdateUI<HaliteWindow>,
47        public CDropFileTarget<HaliteWindow>,
48        public CMessageFilter,
49        public CIdleHandler,
50        public hal::IniBase<HaliteWindow>,
51        private boost::noncopyable
52{
53public:
54        HaliteWindow(unsigned ARE_YOU_ME);
55        ~HaliteWindow();
56
57        DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME);
58
59        ui_signal& ui() { return ui_; }
60
61        BEGIN_MSG_MAP_EX(HaliteWindow)
62                MSG_WM_CREATE(OnCreate)
63                MSG_WM_CLOSE(OnClose)
64                MSG_WM_DESTROY(OnDestroy)
65                MSG_WM_SIZE(OnSize)
66                MSG_WM_MOVE(OnMove)
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                REFLECT_NOTIFICATIONS()
91                CHAIN_MSG_MAP(CUpdateUI<HaliteWindow>)
92                CHAIN_MSG_MAP(CFrameWindowImpl<HaliteWindow>)
93                CHAIN_MSG_MAP(CDropFileTarget<HaliteWindow>)
94        END_MSG_MAP()
95
96        BEGIN_UPDATE_UI_MAP(HaliteWindow)
97                UPDATE_ELEMENT(ID_VIEW_TOOLBAR, UPDUI_MENUPOPUP)
98                UPDATE_ELEMENT(IDR_TRAY_MENU, UPDUI_MENUPOPUP)
99
100                UPDATE_ELEMENT(ID_VIEW_STATUS_BAR, UPDUI_MENUPOPUP)
101        UPDATE_ELEMENT(0, UPDUI_STATUSBAR)
102        UPDATE_ELEMENT(1, UPDUI_STATUSBAR)
103        UPDATE_ELEMENT(2, UPDUI_STATUSBAR)
104        UPDATE_ELEMENT(3, UPDUI_STATUSBAR)
105        END_UPDATE_UI_MAP()
106
107        void ProcessFile(LPCTSTR lpszPath);
108       
109        boost::signals::connection connectUiUpdate(boost::function<void (const hal::TorrentDetails& allTorrents)> fn) 
110        { 
111                return ui_update_signal_.connect(fn); 
112        }
113       
114        boost::signal<void (const hal::TorrentDetails& allTorrents)> & ui_sig()
115        { 
116                return ui_update_signal_; 
117        }
118       
119        void issueUiUpdate();
120       
121        void connectSaveState(boost::function<void ()> fn) 
122        { 
123                save_state_signal_.connect(fn); 
124        }
125       
126        HaliteListViewCtrl& torrentsList() { return haliteList; }
127        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&);
128       
129protected:
130        typedef hal::IniBase<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        HaliteListViewCtrl haliteList;
200       
201        boost::scoped_ptr<HaliteDialog> mp_dlg;
202        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg;
203
204        bool whichSimple_;
205
206        ui_signal ui_;
207
208        unsigned WM_AreYouMe_;
209
210        CRect rect;
211        unsigned int splitterPos;
212        bool use_tray;
213        bool advancedUI;
214        int activeTab;
215};
216
217BOOST_CLASS_VERSION(HaliteWindow, 0)
Note: See TracBrowser for help on using the repository browser.