4
#include <dynamicrequest.h>
8
#include <soundserver.h>
10
#include <noatunarts.h>
15
#define HAS_ARTSVERSION_H
17
#ifdef HAS_ARTSVERSION_H
19
#include <kartswidget.h>
22
#define engine napp->player()->engine()
23
#define server (*(engine->server()))
24
#define stack (*engine->effectStack())
29
class EffectConfigWidget : public QWidget
32
EffectConfigWidget(Effect *e, QWidget *parent=0)
33
: QWidget(parent), mEf(e)
36
virtual ~EffectConfigWidget()
46
Effect::Effect(const char *name)
47
: mId(0), mName(name), mConfig(0)
49
mEffect=new StereoEffect;
50
*mEffect=DynamicCast(server.createObject(std::string(name)));
51
napp->effects()->mItems.append(this);
54
long Effect::id() const
59
StereoEffect *Effect::effect() const
64
Effect *Effect::after() const
66
QList<Effect> effects=napp->effects()->effects();
67
QListIterator<Effect> i(effects);
68
for(; i.current(); ++i)
79
Effect *Effect::before() const
81
QList<Effect> effects=napp->effects()->effects();
82
QListIterator<Effect> i(effects);
83
for(; i.current(); ++i)
94
QCString Effect::name() const
99
QString Effect::title() const
104
QString Effect::clean(const QCString &name)
106
int pos=name.findRev("::");
108
return name.right(name.length()-pos-2);
112
bool Effect::isNull() const
114
return effect()->isNull();
117
QWidget *Effect::configure(bool /*friendly*/)
119
#ifdef HAS_ARTSVERSION_H
120
if (mConfig) return mConfig;
121
if (!configurable()) return 0;
123
GenericGuiFactory factory;
124
Widget gui = factory.createGui(*mEffect);
128
mConfig=new EffectConfigWidget(this);
129
mConfig->setCaption(title());
131
QBoxLayout *l=new QHBoxLayout(mConfig);
132
l->add(new KArtsWidget(gui, mConfig));
142
bool Effect::configurable() const
144
#ifdef HAS_ARTSVERSION_H
146
query.supports("Interface","Arts::GuiFactory");
147
query.supports("CanCreate", mEffect->_interfaceName());
149
vector<TraderOffer> *queryResults = query.query();
150
bool yes= queryResults->size();
162
napp->effects()->remove(this, false);
163
emit napp->effects()->deleting(this);
165
napp->effects()->mItems.removeRef(this);
171
mItems.setAutoDelete(true);
174
bool Effects::insert(const Effect *after, Effect *item)
176
if (!item) return false;
177
if (item->id()) return false;
178
if (item->isNull()) return false;
180
item->effect()->start();
183
i=stack.insertTop(*item->effect(), (const char*)item->name());
185
i=stack.insertAfter(after->id(), *item->effect(), (const char*)item->name());
188
item->effect()->stop();
197
bool Effects::append(Effect *item)
199
if (!item) return false;
200
if (item->id()) return false;
201
if (item->isNull()) return false;
203
item->effect()->start();
204
item->mId=stack.insertBottom(*item->effect(), (const char*)item->name());
207
item->effect()->stop();
214
void Effects::move(const Effect *after, Effect *item)
217
if (!item->id()) return;
218
long id=after ? after->id() : 0;
219
stack.move(id, item->id());
223
void Effects::remove(Effect *item, bool del)
226
if (!item->id()) return;
228
stack.remove(item->id());
229
item->effect()->stop();
237
void Effects::removeAll(bool del)
239
for (QListIterator<Effect> i(mItems); i.current(); ++i)
244
QStrList Effects::available() const
247
Arts::TraderQuery query;
248
query.supports("Interface", "Arts::StereoEffect");
249
query.supports("Interface", "Arts::SynthModule");
250
vector<Arts::TraderOffer> *offers = query.query();
251
for (vector<Arts::TraderOffer>::iterator i=offers->begin(); i!=offers->end(); i++)
253
Arts::TraderOffer &offer=*i;
254
QCString name = offer.interfaceName().c_str();
261
Effect *Effects::findId(long id) const
263
for (QListIterator<Effect> i(mItems); i.current(); ++i)
269
QList<Effect> Effects::effects() const
271
vector<long> *items=stack.effectList();
272
QList<Effect> effects;
273
for (vector<long>::iterator i=items->begin();i!=items->end();i++)
274
if (Effect *e=findId(*i))
285
#include "effects.moc"