+/** Use our own list for effect parameters so that they are not sorted in any ways, because
+ some effects like sox need a precise order
+*/
+class EffectsParameterList: public QList < EffectParameter >
+{
+public:
+ EffectsParameterList(): QList < EffectParameter >() {}
+ bool hasParam(const QString name) const {
+ for (int i = 0; i < size(); i++)
+ if (at(i).name() == name) return true;
+ return false;
+ }
+ QString paramValue(const QString name, QString defaultValue = QString()) const {
+ for (int i = 0; i < size(); i++) {
+ if (at(i).name() == name) return at(i).value();
+ }
+ return defaultValue;
+ }
+ void addParam(const QString &name, const QString &value) {
+ if (name.isEmpty()) return;
+ append(EffectParameter(name, value));
+ }
+ void removeParam(const QString name) {
+ for (int i = 0; i < size(); i++)
+ if (at(i).name() == name) {
+ removeAt(i);
+ break;
+ }
+ }
+};
+
+class CommentedTime
+{