Mercurial > hg > easaier-soundaccess
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);