summaryrefslogtreecommitdiffstats
path: root/arts/kde/kplayobjectfactory.h
blob: 2f9c096fcf525959aee1ac63e212be524f6858fb (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
	/*

	Copyright (C) 2001 Nikolas Zimmermann <wildfox@kde.org>

	This library is free software; you can redistribute it and/or
	modify it under the terms of the GNU Library General Public
	License as published by the Free Software Foundation; either
	version 2 of the License, or (at your option) any later version.
  
	This library 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
	Library General Public License for more details.

	You should have received a copy of the GNU Library General Public License
	along with this library; see the file COPYING.LIB.  If not, write to
	the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
	Boston, MA 02110-1301, USA.

	*/

#ifndef KPLAYOBJECTFACTORY_H
#define KPLAYOBJECTFACTORY_H

#include <kurl.h>
#include <kdelibs_export.h>

#include "soundserver.h"
#include "kplayobject.h"

class KArtsServer;

class KDE_EXPORT KPlayObjectFactory
{
public:
	/**
	 * Constructs a new Factory for creating aRts playobjects on the
	 * soundserver.
	 */
	KPlayObjectFactory(Arts::SoundServerV2 server);

	/**
	 * Convenience constructor to pass a KArtsServer instead of an
	 * Arts::SoundServerV2. This equivalent to calling
	 * KPlayObjectFactory( server.server() ).
	 *
	 * @since 3.2
	 */
	KPlayObjectFactory(KArtsServer* server);

	~KPlayObjectFactory();

	KPlayObject *createPlayObject(const KURL& url, bool createBUS);
	KPlayObject *createPlayObject(const KURL& url, const QString &mimetype, bool createBUS);

	void setAllowStreaming(bool s) { m_allowStreaming = s; }
	bool allowStreaming() { return m_allowStreaming; }

	bool isAStream() { return m_stream; }
	
private:
	Arts::SoundServerV2 m_server;
	bool m_allowStreaming;
	bool m_stream;
};

class KAudioManagerPlay;

namespace KDE {

class POFHelper;

	/**
	 * This class implements a factory to create KDE::PlayObjects for
	 * a given URL and mimetype. A detailed description about how to
	 * use the KDE multimedia framework can be found in the documentation
	 * for KDE::PlayObject.
	 */
class KDE_EXPORT PlayObjectFactory// : public QObject ### for KDE4 make it a QObject to be able to receive signals
{
public:
	/**
	 * Creates a KDE::PlayObjectFactory. @p server is an 
	 * Arts::SoundServerV2
	 */
	PlayObjectFactory(Arts::SoundServerV2 server);
	/**
	 * Convenience constructor to pass a KArtsServer instead of an
	 * Arts::SoundServerV2. This equivalent to calling
	 * KDE::PlayObjectFactory( server.server() ).
	 *
	 * @since 3.2
	 */
	PlayObjectFactory( KArtsServer* server );
	~PlayObjectFactory();

	/**
	 * If this is set the PlayObject doesn't create a Synth_BUS_UPLINK at all
	 * but always uses the Synth_AMAN_PLAY that you passed.
	 */
	void setAudioManagerPlay( KAudioManagerPlay * amanplay );

	/**
	 * Creates a KDE::PlayObject to play back the file or stream
	 * @p url points to. Set @p createBUS to "true", if you want the
	 * PlayObject to be connected to a SYNTH_BUS_UPLINK on creation.
	 * This is usually the case. You only need to set this to "false"
	 * if you want to attach your own sound effects to the PlayObject.
	 *
	 * You don't need to know the mimetype of the file or stream, it
	 * will be detected automatically.
	 */
	KDE::PlayObject *createPlayObject(const KURL& url, bool createBUS);
	
	/**
	 * This method also creates a KDE::PlayObject, but does no automatic
	 * mimetype detection. Use this method with care.
	 */
	KDE::PlayObject *createPlayObject(const KURL& url, const QString &mimetype, bool createBUS);

	/**
	 * setAllowStreaming( true ) allows the factory to create a
	 * streaming PlayObject for a non-local URL. This is also the default.
	 * Usually, you should not need to set this to false.
	 */
	void setAllowStreaming(bool s) { d->allowStreaming = s; }

	/**
	 * returns "true" if the factory is allowed to create streaming
	 * PlayObjects.
	 */
	bool allowStreaming() { return d->allowStreaming; }

	/**
	 * Return the mimetypes that are playable
	 */
	static QStringList mimeTypes(void);

/*private slots: ### KDE4 and remove Helper class
	void connectAmanPlay();*/

private:
	struct PrivateData {
		Arts::SoundServerV2 server;
		KDE::PlayObject* playObj;
		KAudioManagerPlay* amanPlay;
		POFHelper* helper;
		bool allowStreaming;
		bool isStream;
	};
	PrivateData* d;
};

}
#endif
// vim: sw=4 ts=4 noet