summaryrefslogtreecommitdiffstats
path: root/apps/ktorrent/groups/group.h
blob: 9f4775d54026583e021b830ca47b837aaf879c6b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/***************************************************************************
 *   Copyright (C) 2005 by Joris Guisson                                   *
 *   joris.guisson@gmail.com                                               *
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 *   This program is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
 *   GNU General Public License for more details.                          *
 *                                                                         *
 *   You should have received a copy of the GNU General Public License     *
 *   along with this program; if not, write to the                         *
 *   Free Software Foundation, Inc.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.          *
 ***************************************************************************/
#ifndef KTGROUP_H
#define KTGROUP_H

#include <tqstring.h>
#include <tqpixmap.h>

namespace bt
{
	class BEncoder;
	class BDictNode;
}

namespace kt
{
	class TorrentInterface;

	/**
	 * @author Joris Guisson <joris.guisson@gmail.com>
	 * 
	 * Base class for all groups. Subclasses should only implement the
	 * isMember function, but can also provide save and load
	 * functionality.
	 */
	class Group
	{
	protected:
		TQString name;
		TQPixmap icon;
		TQString icon_name;
		int flags;
	public:
		enum Properties
		{
			UPLOADS_ONLY_GROUP = 1,
			DOWNLOADS_ONLY_GROUP = 2,
			MIXED_GROUP = 3,
			CUSTOM_GROUP = 4
		};
		/**
		 * Create a new group.
		 * @param name The name of the group
		 * @param flags Properties of the group
		 */
		Group(const TQString & name,int flags);
		virtual ~Group();
		
		/// See if this is a standard group.
		bool isStandardGroup() const {return !(flags & CUSTOM_GROUP);}
		
		/// Get the group flags
		int groupFlags() const {return flags;}
		
		/**
		 * Rename the group.
		 * @param nn The new name
		 */
		void rename(const TQString & nn);
		
		/**
		 * Set the group icon by name.
		 * @param in The icon name
		 */
		void setIconByName(const TQString & in);
		
		/// Get the name of the group
		const TQString & groupName() const {return name;}
		
		/// Get the icon of the group
		const TQPixmap & groupIcon() const {return icon;}
		
		/**
		 * Save the torrents.The torrents should be save in a bencoded file.
		 * @param enc The BEncoder
		 */
		virtual void save(bt::BEncoder* enc);
		
		
		/**
		 * Load the torrents of the group from a BDictNode.
		 * @param n The BDictNode
		 */
		virtual void load(bt::BDictNode* n);
		
		
		/**
		 * Test if a torrent is a member of this group.
		 * @param tor The torrent
		 */
		virtual bool isMember(TorrentInterface* tor) = 0; 

		/**
		 * The torrent has been removed and is about to be deleted.
		 * Subclasses should make sure that they don't have dangling
		 * pointers to this torrent.
		 * @param tor The torrent
		 */
		virtual void torrentRemoved(TorrentInterface* tor);
		
		/**
		 * Subclasses should implement this, if they want to have torrents added to them.
		 * @param tor The torrent
		 */
		virtual void addTorrent(TorrentInterface* tor);
		
		/**
		 * Subclasses should implement this, if they want to have torrents removed from them.
		 * @param tor The torrent
		 */
		virtual void removeTorrent(TorrentInterface* tor);
	};

}

#endif