summaryrefslogtreecommitdiffstats
path: root/noatun/library/noatun/effects.h
diff options
context:
space:
mode:
Diffstat (limited to 'noatun/library/noatun/effects.h')
-rw-r--r--noatun/library/noatun/effects.h186
1 files changed, 186 insertions, 0 deletions
diff --git a/noatun/library/noatun/effects.h b/noatun/library/noatun/effects.h
new file mode 100644
index 00000000..c39cb8aa
--- /dev/null
+++ b/noatun/library/noatun/effects.h
@@ -0,0 +1,186 @@
+#ifndef EFFECTS_H
+#define EFFECTS_H
+
+#include <qptrlist.h>
+#include <qcstring.h>
+#include <qstrlist.h>
+#include <qobject.h>
+
+namespace Arts { class StereoEffect; }
+class Engine;
+class EffectConfigWidget;
+
+/**
+ * @short Base class for a noatun effect
+ *
+ * Example:
+ * \code
+ * new Effect("Arts::SomeEffect");
+ * \endcode
+ * Then you can add, insert, etc. it using Effects
+ **/
+class Effect
+{
+friend class Effects;
+friend class EffectConfigWidget;
+public:
+ Effect(const char *name);
+ ~Effect();
+
+ /**
+ * return the effect processed
+ * directly before this one
+ **/
+ Effect *before() const;
+ /**
+ * return the effect processed
+ * directly after this one
+ **/
+ Effect *after() const;
+ long id() const;
+
+ /**
+ * get the Arts object.
+ * @internal
+ **/
+ Arts::StereoEffect *effect() const;
+
+ /**
+ * Get the name of the object.
+ **/
+ QCString name() const;
+
+ /**
+ * get the "clean" title of effect
+ **/
+ QString title() const;
+
+ /**
+ * @return true if this effect name is invalid, false otherwise
+ * <b>Note:</b> If you call StereoEffect::start() on an invalid Effect you
+ * will probably be punished with a segmentation fault.
+ **/
+ bool isNull() const;
+
+ /**
+ * show the configure dialog box for
+ * this effect. if friendly is true,
+ * then create a top-level window,
+ * set an icon and make it purdy. Otherwise
+ * create a plan widget that you can reparent.
+ **/
+ QWidget *configure(bool friendly=true);
+
+ /**
+ * Does this widget have a configurable
+ * dialog box. E.g., will configure
+ * return null?
+ **/
+ bool configurable() const;
+
+ /**
+ * Return an effect name that can be presented to a user
+ * i.e. Arts::FREEVERB will end up as FREEVERB
+ **/
+ static QString clean(const QCString &name);
+private:
+ long mId;
+ Arts::StereoEffect *mEffect;
+ QCString mName;
+ QWidget *mConfig;
+};
+
+/**
+ * Noatuns effect stack
+ * @author Charles Samuels
+ **/
+class Effects : public QObject
+{
+Q_OBJECT
+friend class Effect;
+public:
+ Effects();
+
+ bool insert(const Effect *after, Effect *item);
+
+ /**
+ * create the Effect, by getting the proper item
+ * from the list, then append it here.
+ *
+ * for example
+ * \code
+ * append(new Effect(available()[0]));
+ * \endcode
+ **/
+ bool append(Effect *item);
+
+ /**
+ * reorder the effect stack. If @p after is null,
+ * it'll be first
+ **/
+ void move(const Effect *after, Effect *item);
+ /**
+ * Removes an item from the effect stack
+ * @param item item to remove
+ * @param del delete the item from the effect stack as well (default true)
+ **/
+ void remove(Effect *item, bool del=true);
+
+ /**
+ * Removes all items from the effect stack.
+ * @param del delete the items from the effect stack as well (default true)
+ **/
+ void removeAll(bool del=true);
+
+ /**
+ * A list of all available effects, by name
+ * each of these can be given to the first
+ * argument of the Effect constructor
+ **/
+ QStrList available() const;
+
+ /**
+ * A list of all available effects objects
+ **/
+ QPtrList<Effect> effects() const;
+
+ /**
+ * Get the Effect that has the following id
+ **/
+ Effect *findId(long id) const;
+
+private:
+ QPtrListIterator<Effect> stackPosition() const;
+
+signals:
+ /**
+ * Emitted when an effect has been added to the effect stack
+ * @param effect the effect that got added
+ **/
+ void added(Effect *effect);
+ /**
+ * Emitted when an effect has been removed to the effect stack
+ * @param effect the effect that got removed
+ **/
+ void removed(Effect *effect);
+ /**
+ * Emitted when an effect has been moved
+ * @param effect the effect that got moved
+ **/
+ void moved(Effect *effect);
+ /**
+ * Emitted when an effect is about to be
+ * deleted (from memory)
+ * @param effect the effect to be deleted
+ **/
+ void deleting(Effect *effect);
+
+private:
+ // stored in no specific order
+ QPtrList<Effect> mItems;
+};
+
+
+
+#endif
+