source: trunk/src/HaliteDialogBase.hpp @ 710

Revision 710, 2.5 KB checked in by Eoin, 11 years ago (diff)
RevLine 
[201]1
[710]2//         Copyright Eóin O'Callaghan 2006 - 2009.
[268]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
[201]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
[229]17template <class TBase>
[201]18class CHaliteDialogBase
19{
[229]20        typedef CHaliteDialogBase<TBase> thisClass;
21       
[201]22public:
[241]23        CHaliteDialogBase(HaliteWindow& haliteWindow) :
[248]24                haliteWindow_(haliteWindow)
[229]25        {               
[306]26                connection_ = haliteWindow.connectUiUpdate(bind(&thisClass::handleUiUpdate, this, _1));
[229]27        }
[319]28       
[306]29        BEGIN_MSG_MAP_EX(thisClass)
30                MSG_WM_SHOWWINDOW(OnShow)
31//              REFLECT_NOTIFICATIONS()
32        END_MSG_MAP()
[201]33       
[314]34        void OnShow(BOOL show, int flags)
[306]35        {
36                if (show)
37                {
38                        connection_.unblock();
39                }
40                else
41                {
42                        connection_.block();
43                }
[356]44               
45                SetMsgHandled(false);
[306]46        }
47       
[201]48        void InitializeHalDialogBase()
[356]49        {
50                TBase* pT = static_cast<TBase*>(this); 
51                OnShow(pT->IsWindowVisible(), 0);
52        }
[201]53       
[319]54        HaliteListViewCtrl& torrentsList() 
55        { 
56                return haliteWindow_.torrentsList(); 
57        }
58       
[248]59        void requestUiUpdate()
60        {
61                haliteWindow_.issueUiUpdate();
62        }
63       
[319]64        #define logical_xor !=0==!
[248]65       
[507]66        void handleUiUpdate(const hal::torrent_details_manager& tD)
[306]67        {
[569]68                try
69                {
70
[306]71                TBase* pT = static_cast<TBase*>(this);
72               
[507]73                hal::torrent_details_ptr focused = tD.focusedTorrent();
[306]74               
[319]75                if ((focusedTorrent_ logical_xor focused) ||
76                                (focused && focusedTorrent_->name() != focused->name()))
[321]77                {
[319]78                        pT->focusChanged(focusedTorrent_ = focused);
[321]79                       
[575]80                        if (focusedTorrent_)
[578]81                        {
[590]82                        //      HAL_DEV_MSG(hal::wform(L"HaliteDialogBase::handleUiUpdate(%1%)")
83                        //              % hal::to_wstr_shim(focusedTorrent_->name()));
[578]84                        }
[321]85                }
[319]86                else
87                        focusedTorrent_ = focused;
[306]88       
89                pT->uiUpdate(tD);
[569]90
91                } HAL_GENERIC_FN_EXCEPTION_CATCH(L"HaliteDialogBase::handleUiUpdate()")
[306]92        }
93
[507]94        void uiUpdate(const hal::torrent_details_manager& tD)
[319]95        {}     
96       
[507]97        void focusChanged(const hal::torrent_details_ptr pT)
[231]98        {}
[229]99       
[507]100        const hal::torrent_details_ptr focusedTorrent() { return focusedTorrent_; }
[319]101       
[241]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:
[507]112        hal::torrent_details_ptr focusedTorrent_;
[248]113
[201]114private:
[248]115        HaliteWindow& haliteWindow_;
[302]116        boost::signals::scoped_connection connection_;
[201]117};
118
Note: See TracBrowser for help on using the repository browser.