changeset 181:3d68e73a877b

allow only one filter of type TimeStretchFilter
author lbajardsilogic
date Wed, 21 Nov 2007 16:07:51 +0000
parents 41998908f0c9
children 7386cd014f52
files sv/document/Document.cpp sv/filter/Filter.h sv/filter/FilterStack.cpp sv/filter/FilterStack.h sv/filter/RealTimeFilterFactory.cpp sv/filter/RealTimeFilterFactory.h sv/filter/TimeStretchFilter.h
diffstat 7 files changed, 50 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/sv/document/Document.cpp	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/document/Document.cpp	Wed Nov 21 16:07:51 2007 +0000
@@ -15,6 +15,8 @@
 
 #include "Document.h"
 
+#include <QMessageBox>
+
 #include "data/model/WaveFileModel.h"
 #include "data/model/WritableWaveFileModel.h"
 #include "data/model/DenseThreeDimensionalModel.h"
@@ -26,6 +28,7 @@
 #include "base/PlayParameterRepository.h"
 #include "base/PlayParameters.h"
 #include "transform/TransformFactory.h"
+#include "main/MainWindow.h"
 #include <QApplication>
 #include <iostream>
 
@@ -916,6 +919,13 @@
 
 Filter * Document::createFilter(RealTimeFilterFactory::FilterType type)
 {
+	if (!m_filterStack->allowOtherFilter(RealTimeFilterFactory::getFilterLabel(type)))
+	{
+		QMessageBox::warning(MainWindow::instance(), tr("Filter already exists"), 
+			tr("This filter already exits. Only one type of filter %1 is allowed").arg(RealTimeFilterFactory::getFilterLabel(type)));
+		return 0;
+	}
+
 	Filter *newFilter = RealTimeFilterFactory::getInstance()->createFilter(type);
     if (!newFilter) return 0;
 
--- a/sv/filter/Filter.h	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/Filter.h	Wed Nov 21 16:07:51 2007 +0000
@@ -47,6 +47,9 @@
 	inline size_t getSourceChannelCount(){return m_sourceChannelCount;}
 	bool isFilterEnabled();
 
+	/*allow or not to add another filter of this type*/
+	virtual bool allowMultiple() = 0;
+
 signals :
 	void filterEnableChanged(bool);
 
--- a/sv/filter/FilterStack.cpp	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/FilterStack.cpp	Wed Nov 21 16:07:51 2007 +0000
@@ -25,6 +25,21 @@
 	removeAllFilters();
 }
 
+Filter* FilterStack::findFilter(QString &name)
+{
+	std::map<int, Filter *>::iterator iter;
+
+	for ( iter = m_filters.begin(); iter != m_filters.end(); iter++) 
+	{
+		Filter * filter = iter->second;
+		if (name.contains(filter->objectName())) 
+		{
+			return filter;
+		}
+    }
+	return 0;
+}
+
 void FilterStack::addFilter(Filter * filter)
 {
 	m_filters[m_count] = filter;
@@ -163,4 +178,15 @@
 		filter->setSourceChannelCount(m_sourceChannelCount);
 	}
 
+}
+
+bool FilterStack::allowOtherFilter(QString &labelType)
+{
+	Filter* filter = findFilter(labelType);
+	if ( (filter) && (!filter->allowMultiple()) )
+	{
+		return false;
+	}
+
+	return true;
 }
\ No newline at end of file
--- a/sv/filter/FilterStack.h	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/FilterStack.h	Wed Nov 21 16:07:51 2007 +0000
@@ -42,6 +42,10 @@
 
 	void setSourceChannelCount(size_t channel);
 
+	Filter* findFilter(QString &name);
+
+	bool allowOtherFilter(QString &labelType);
+
 signals:
 	void newFilterAdded(Filter *);
 	void filterRemoved(QString);
--- a/sv/filter/RealTimeFilterFactory.cpp	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/RealTimeFilterFactory.cpp	Wed Nov 21 16:07:51 2007 +0000
@@ -65,9 +65,10 @@
     switch (type) {
 
 		case TimeStretch:
-		filter = new TimeStretchFilter;
-		break;
-
+		{
+			filter = new TimeStretchFilter;
+			break;
+		}
 	    default: break;
     }
 
--- a/sv/filter/RealTimeFilterFactory.h	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/RealTimeFilterFactory.h	Wed Nov 21 16:07:51 2007 +0000
@@ -37,7 +37,7 @@
 	typedef std::set<FilterType> FilterTypeSet;
     FilterTypeSet getFilterTypes();
 
-	QString getFilterLabel(FilterType type);
+	static QString getFilterLabel(FilterType type);
 	FilterType getFilterType(QString strType);
 
 	Filter * createFilter(FilterType type);
--- a/sv/filter/TimeStretchFilter.h	Wed Nov 21 14:32:58 2007 +0000
+++ b/sv/filter/TimeStretchFilter.h	Wed Nov 21 16:07:51 2007 +0000
@@ -40,6 +40,8 @@
 	virtual size_t getRequiredInputSamples(size_t outputSamplesNeeded);
 	size_t getRequiredSkipSamples();
 
+	virtual bool allowMultiple(){return false;}
+
 signals: 
 	void playSpeedChanged(float);