source: trunk/src/HaliteDialogBase.hpp @ 710

Revision 710, 2.5 KB checked in by Eoin, 11 years ago (diff)
Line 
1
2//         Copyright Eóin O'Callaghan 2006 - 2009.
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                        {
82                        //      HAL_DEV_MSG(hal::wform(L"HaliteDialogBase::handleUiUpdate(%1%)")
83                        //              % hal::to_wstr_shim(focusedTorrent_->name()));
84                        }
85                }
86                else
87                        focusedTorrent_ = focused;
88       
89                pT->uiUpdate(tD);
90
91                } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteDialogBase::handleUiUpdate()")
92        }
93
94        void uiUpdate(const hal::torrent_details_manager& tD)
95        {}     
96       
97        void focusChanged(const hal::torrent_details_ptr pT)
98        {}
99       
100        const hal::torrent_details_ptr focusedTorrent() { return focusedTorrent_; }
101       
102        template<typename T>
103        BOOL SetDlgItemInfo(int nID, T info)
104        {
105                std::wostringstream oss;
106                oss << info;
107                TBase* pT = static_cast<TBase*>(this);
108                return pT->SetDlgItemText(nID, oss.str().c_str());
109        }
110       
111protected:
112        hal::torrent_details_ptr focusedTorrent_;
113
114private:
115        HaliteWindow& haliteWindow_;
116        boost::signals::scoped_connection connection_;
117};
118
Note: See TracBrowser for help on using the repository browser.