4
#include <dynamicrequest.h>
8
#include <soundserver.h>
9
#include <noatunarts.h>
14
#define HAS_ARTSVERSION_H
16
#ifdef HAS_ARTSVERSION_H
18
#include <kartswidget.h>
21
#define engine napp->player()->engine()
22
#define server (*(engine->server()))
23
#define stack (*engine->effectStack())
28
class EffectConfigWidget : public QWidget
31
EffectConfigWidget(Effect *e, QWidget *parent=0)
32
: QWidget(parent), mEf(e)
35
virtual ~EffectConfigWidget()
45
Effect::Effect(const char *name)
46
: mId(0), mName(name), mConfig(0)
48
mEffect=new StereoEffect;
49
*mEffect=DynamicCast(server.createObject(std::string(name)));
50
napp->effects()->mItems.append(this);
53
long Effect::id() const
58
StereoEffect *Effect::effect() const
63
Effect *Effect::after() const
65
QPtrList<Effect> effects=napp->effects()->effects();
66
QPtrListIterator<Effect> i(effects);
67
for(; i.current(); ++i)
78
Effect *Effect::before() const
80
QPtrList<Effect> effects=napp->effects()->effects();
81
QPtrListIterator<Effect> i(effects);
82
for(; i.current(); ++i)
93
QCString Effect::name() const
98
QString Effect::title() const
103
QString Effect::clean(const QCString &name)
105
int pos=name.findRev("::");
107
return name.right(name.length()-pos-2);
111
bool Effect::isNull() const
113
return effect()->isNull();
116
QWidget *Effect::configure(bool /*friendly*/)
118
#ifdef HAS_ARTSVERSION_H
119
if (mConfig) return mConfig;
120
if (!configurable()) return 0;
122
GenericGuiFactory factory;
123
Widget gui = factory.createGui(*mEffect);
127
mConfig=new EffectConfigWidget(this);
128
mConfig->setCaption(title());
130
QBoxLayout *l=new QHBoxLayout(mConfig);
131
l->add(new KArtsWidget(gui, mConfig));
141
bool Effect::configurable() const
143
#ifdef HAS_ARTSVERSION_H
145
query.supports("Interface","Arts::GuiFactory");
146
query.supports("CanCreate", mEffect->_interfaceName());
148
vector<TraderOffer> *queryResults = query.query();
149
bool yes= queryResults->size();
161
napp->effects()->remove(this, false);
162
emit napp->effects()->deleting(this);
164
napp->effects()->mItems.removeRef(this);
170
mItems.setAutoDelete(false);
173
bool Effects::insert(const Effect *after, Effect *item)
175
if (!item) return false;
176
if (item->id()) return false;
177
if (item->isNull()) return false;
179
item->effect()->start();
182
i=stack.insertTop(*item->effect(), (const char*)item->name());
184
i=stack.insertAfter(after->id(), *item->effect(), (const char*)item->name());
187
item->effect()->stop();
196
bool Effects::append(Effect *item)
198
if (!item) return false;
199
if (item->id()) return false;
200
if (item->isNull()) return false;
202
item->effect()->start();
203
item->mId=stack.insertBottom(*item->effect(), (const char*)item->name());
206
item->effect()->stop();
213
void Effects::move(const Effect *after, Effect *item)
216
if (!item->id()) return;
217
long id=after ? after->id() : 0;
218
stack.move(id, item->id());
222
void Effects::remove(Effect *item, bool del)
225
if (!item->id()) return;
227
stack.remove(item->id());
228
item->effect()->stop();
236
void Effects::removeAll(bool del)
238
for (QPtrListIterator<Effect> i(mItems); i.current(); ++i)
243
QStrList Effects::available() const
246
Arts::TraderQuery query;
247
query.supports("Interface", "Arts::StereoEffect");
248
query.supports("Interface", "Arts::SynthModule");
249
vector<Arts::TraderOffer> *offers = query.query();
250
for (vector<Arts::TraderOffer>::iterator i=offers->begin(); i!=offers->end(); i++)
252
Arts::TraderOffer &offer=*i;
253
QCString name = offer.interfaceName().c_str();
260
Effect *Effects::findId(long id) const
262
for (QPtrListIterator<Effect> i(mItems); i.current(); ++i)
268
QPtrList<Effect> Effects::effects() const
270
vector<long> *items=stack.effectList();
271
QPtrList<Effect> effects;
272
for (vector<long>::iterator i=items->begin();i!=items->end();i++)
273
if (Effect *e=findId(*i))
284
#include "effects.moc"