source: trunk/src/HaliteDialogBase.hpp @ 575

Revision 575, 2.5 KB checked in by Eoin, 12 years ago (diff)
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                try
69                {
70
71                TBase* pT = static_cast<TBase*>(this);
72               
73                hal::torrent_details_ptr focused = tD.focusedTorrent();
74               
75                if ((focusedTorrent_ logical_xor focused) ||
76                                (focused && focusedTorrent_->name() != focused->name()))
77                {
78                        pT->focusChanged(focusedTorrent_ = focused);
79                       
80                        if (focusedTorrent_)
81                                HAL_DEV_MSG(hal::wform(L"HaliteDialogBase::handleUiUpdate(%1%)") 
82                                        % hal::to_wstr_shim(focusedTorrent_->name()));
83                }
84                else
85                        focusedTorrent_ = focused;
86       
87                pT->uiUpdate(tD);
88
89                } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteDialogBase::handleUiUpdate()")
90        }
91
92        void uiUpdate(const hal::torrent_details_manager& tD)
93        {}     
94       
95        void focusChanged(const hal::torrent_details_ptr pT)
96        {}
97       
98        const hal::torrent_details_ptr focusedTorrent() { return focusedTorrent_; }
99       
100        template<typename T>
101        BOOL SetDlgItemInfo(int nID, T info)
102        {
103                std::wostringstream oss;
104                oss << info;
105                TBase* pT = static_cast<TBase*>(this);
106                return pT->SetDlgItemText(nID, oss.str().c_str());
107        }
108       
109protected:
110        hal::torrent_details_ptr focusedTorrent_;
111
112private:
113        HaliteWindow& haliteWindow_;
114        boost::signals::scoped_connection connection_;
115};
116
Note: See TracBrowser for help on using the repository browser.