source: trunk/src/HaliteDialogBase.hpp @ 507

Revision 507, 2.4 KB checked in by Eoin, 12 years ago (diff)

Added ListViewIterators?.hpp.

Major find and replace of TorrentDetails? and associated classes to torrent_details.

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#include "global/ini_adapter.hpp"
10#include "halEvent.hpp"
11#include "HaliteWindow.hpp"
12#include "HaliteListView.hpp"
13
14#include <boost/archive/xml_woarchive.hpp>
15#include <boost/archive/xml_wiarchive.hpp>
16
17template <class TBase>
18class CHaliteDialogBase
19{
20        typedef CHaliteDialogBase<TBase> thisClass;
21       
22public:
23        CHaliteDialogBase(HaliteWindow& haliteWindow) :
24                haliteWindow_(haliteWindow)
25        {               
26                connection_ = haliteWindow.connectUiUpdate(bind(&thisClass::handleUiUpdate, this, _1));
27        }
28       
29        BEGIN_MSG_MAP_EX(thisClass)
30                MSG_WM_SHOWWINDOW(OnShow)
31//              REFLECT_NOTIFICATIONS()
32        END_MSG_MAP()
33       
34        void OnShow(BOOL show, int flags)
35        {
36                if (show)
37                {
38                        connection_.unblock();
39                }
40                else
41                {
42                        connection_.block();
43                }
44               
45                SetMsgHandled(false);
46        }
47       
48        void InitializeHalDialogBase()
49        {
50                TBase* pT = static_cast<TBase*>(this); 
51                OnShow(pT->IsWindowVisible(), 0);
52        }
53       
54        HaliteListViewCtrl& torrentsList() 
55        { 
56                return haliteWindow_.torrentsList(); 
57        }
58       
59        void requestUiUpdate()
60        {
61                haliteWindow_.issueUiUpdate();
62        }
63       
64        #define logical_xor !=0==!
65       
66        void handleUiUpdate(const hal::torrent_details_manager& tD)
67        {
68                TBase* pT = static_cast<TBase*>(this);
69               
70                hal::torrent_details_ptr focused = tD.focusedTorrent();
71               
72                if ((focusedTorrent_ logical_xor focused) ||
73                                (focused && focusedTorrent_->name() != focused->name()))
74                {
75                        pT->focusChanged(focusedTorrent_ = focused);
76                       
77                        hal::event_log.post(shared_ptr<hal::EventDetail>(
78                                new hal::EventMsg(L"Adv dialog focusChanged")));
79                }
80                else
81                        focusedTorrent_ = focused;
82       
83                pT->uiUpdate(tD);
84        }
85
86        void uiUpdate(const hal::torrent_details_manager& tD)
87        {}     
88       
89        void focusChanged(const hal::torrent_details_ptr pT)
90        {}
91       
92        const hal::torrent_details_ptr focusedTorrent() { return focusedTorrent_; }
93       
94        template<typename T>
95        BOOL SetDlgItemInfo(int nID, T info)
96        {
97                std::wostringstream oss;
98                oss << info;
99                TBase* pT = static_cast<TBase*>(this);
100                return pT->SetDlgItemText(nID, oss.str().c_str());
101        }
102       
103protected:
104        hal::torrent_details_ptr focusedTorrent_;
105
106private:
107        HaliteWindow& haliteWindow_;
108        boost::signals::scoped_connection connection_;
109};
110
Note: See TracBrowser for help on using the repository browser.