source: trunk/wx/torrent-list.h @ 2469

Last change on this file since 2469 was 2469, checked in by charles, 15 years ago

torrent filter counts work now.

File size: 2.9 KB
Line 
1/*
2 * This file Copyright (C) 2007 Charles Kerr <charles@rebelbase.com>
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 */
10
11#ifndef __XMISSION_TORRENT_LIST_H__
12#define __XMISSION_TORRENT_LIST_H__
13
14#include <set>
15#include <map>
16#include <vector>
17#include <wx/listctrl.h>
18#include <wx/config.h>
19#include <libtransmission/transmission.h>
20
21class TorrentListCtrl: public wxListCtrl
22{
23    public:
24        TorrentListCtrl( tr_handle_t       * handle,
25                         wxConfig          * config,
26                         wxWindow          * parent, 
27                         const wxPoint     & pos = wxDefaultPosition,
28                         const wxSize      & size = wxDefaultSize );
29        virtual ~TorrentListCtrl();
30
31    public:
32
33        enum ShowMode
34        {
35            SHOW_ALL,
36            SHOW_DOWNLOADING,
37            SHOW_UPLOADING,
38            SHOW_COMPLETE,
39            SHOW_INCOMPLETE,
40            SHOW_ACTIVE,
41            SHOW_INACTIVE,
42            N_FILTERS
43        };
44
45        void SetShowMode( ShowMode );
46
47        int GetShowModeCounts( ShowMode ) const;
48
49    public:
50
51        struct Listener
52        {
53            Listener() {}
54
55            virtual ~Listener() {}
56
57            virtual void OnTorrentListSelectionChanged(
58                TorrentListCtrl*,
59                const std::set<tr_torrent_t*>& ) = 0;
60        };
61
62    private:
63        typedef std::set<Listener*> listeners_t;
64        listeners_t myListeners;
65        void fire_selection_changed( const std::set<tr_torrent_t*>& t ) {
66            for( listeners_t::iterator it(myListeners.begin()), end(myListeners.end()); it!=end; )
67                (*it++)->OnTorrentListSelectionChanged( this, t );
68        }
69    public:
70        void AddListener( Listener* l ) { myListeners.insert(l); }
71        void RemoveListener( Listener* l ) { myListeners.erase(l); }
72
73    public:
74        void Rebuild ();
75        void Repopulate ();
76        void Refresh ();
77
78    public:
79        typedef std::vector<tr_torrent_t*> torrents_t;
80        void Add( const torrents_t& add );
81
82    private:
83        void Sort( int column );
84        void Resort( );
85        void RefreshTorrent( tr_torrent_t*, int, const std::vector<int>& );
86        static int Compare( long, long, long );
87
88        /** torrent hash -> the torrent's row in myTorrentList */
89        typedef std::map<std::string,int> str2int_t;
90        str2int_t myHashToRow;
91
92    private:
93        void OnSort( wxListEvent& );
94        void OnItemSelected( wxListEvent& );
95        void OnItemDeselected( wxListEvent& );
96
97    private:
98        tr_handle_t * myHandle;
99        wxConfig * myConfig;
100        torrents_t myTorrents;
101        int prevSortCol;
102
103    private:
104       DECLARE_EVENT_TABLE()
105};
106
107
108#endif
Note: See TracBrowser for help on using the repository browser.