source: trunk/src/WTLx/ListViewIterators.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 2008 - 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#ifndef LISTVIEW_ITERATORS_HPP_INCLUDED
8#define LISTVIEW_ITERATORS_HPP_INCLUDED
9
10#include <boost/iterator/filter_iterator.hpp>
11#include <winstl/controls/listview_sequence.hpp>
12
13namespace WTLx
14{
15
16template<typename List>
17class ListViewIterators
18{
19protected:
20        winstl::listview_sequence::const_iterator const_begin()
21        {
22                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
23                return lv_seq.begin();
24        }
25
26        winstl::listview_sequence::const_iterator const_end()
27        {
28                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
29                return lv_seq.end();
30        }
31
32        struct is_selected {
33        bool operator()(const winstl::listview_sequence::sequence_value_type& v) 
34        { 
35                return (v.state() & LVIS_SELECTED) != 0;
36        } };
37
38        typedef boost::filter_iterator<is_selected, 
39                        winstl::listview_sequence::const_iterator> is_selected_iterator;
40
41        is_selected_iterator is_selected_begin()
42        {
43                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
44                return make_filter_iterator<is_selected>(lv_seq.begin(), lv_seq.end());
45        }
46
47        is_selected_iterator is_selected_end()
48        {
49                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
50                return make_filter_iterator<is_selected>(lv_seq.end(), lv_seq.end());
51        }
52
53        struct is_checked
54        {
55                is_checked(ListViewIterators* t) :
56                        t_(t)
57                {}
58                bool operator()(const winstl::listview_sequence::sequence_value_type& v) 
59                { 
60                        return ((static_cast<const List*>(t_))->GetCheckState(v.index()) ? true : false);
61                } 
62        private:
63                ListViewIterators* t_;
64        };
65
66        typedef boost::filter_iterator<is_checked, 
67                        winstl::listview_sequence::const_iterator> is_checked_iterator;
68
69        is_checked_iterator is_checked_begin()
70        {
71                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
72                return make_filter_iterator<is_checked>(is_checked(this), lv_seq.begin(), lv_seq.end());
73        }
74
75        is_checked_iterator is_checked_end()
76        {
77                winstl::listview_sequence lv_seq(*(static_cast<List*>(this)));
78                return make_filter_iterator<is_checked>(is_checked(this), lv_seq.end(), lv_seq.end());
79        }
80
81        typedef winstl::listview_sequence::sequence_value_type list_value_type;
82};
83
84}
85
86#endif // LISTVIEW_ITERATORS_HPP_INCLUDED
Note: See TracBrowser for help on using the repository browser.