diff sv/main/MainWindow.cpp @ 79:afcf540ae3a2

add the real time filter stack to manage real time filters and their attributes
author lbajardsilogic
date Tue, 19 Jun 2007 15:15:12 +0000
parents caee1bc9e77d
children 5060939ca69d
line wrap: on
line diff
--- a/sv/main/MainWindow.cpp	Wed Jun 13 15:49:23 2007 +0000
+++ b/sv/main/MainWindow.cpp	Tue Jun 19 15:15:12 2007 +0000
@@ -48,8 +48,6 @@
 #include "widgets/AdvancedToolBox.h"
 #include "widgets/ConnectionStatus.h"
 #include "widgets/LayerViewerWidget.h"
-#include "widgets/AudioFilterViewerWidget.h"
-#include "widgets/ItemAudioFilterList.h"
 
 #include "audioio/AudioCallbackPlaySource.h"
 #include "audioio/AudioCallbackPlayTarget.h"
@@ -72,6 +70,9 @@
 #include "base/TempDirectory.h"
 #include "osc/OSCQueue.h"
 #include "main/EasaierSessionManager.h"
+#include "widgets/RealTimeFilterPropertyStack.h"
+#include "filter/FilterStack.h"
+#include "filter/RealTimeFilterFactory.h"
 
 // For version information
 #include "vamp/vamp.h"
@@ -285,15 +286,8 @@
 	m_toolBox = new AdvancedToolBox();
 	m_toolBox->addItem("Layers", new QWidget);
 	
-/*	ItemAudioFilterList *itAudio = new ItemAudioFilterList;
-	itAudio->setName(QString("testttttttt"));
-	itAudio->setIcon(QString(":icons/easaier.png"));
-*/
-	AudioFilterViewerWidget *audioview = new AudioFilterViewerWidget;
-//	audioview->addItem(itAudio);
-
-	
-	m_toolBox->addItem("Real-time filters",audioview);
+	m_filterPropertyStack = new RealTimeFilterPropertyStack();
+	m_toolBox->addItem("Real-time filters",m_filterPropertyStack);
 
 	/******** only for logo ****/
 	QLabel *logo = new QLabel;
@@ -312,8 +306,6 @@
 	widgetAuxForLogo->setLayout(logoLayout);
 	/****************************/
 
-	
-
 	ExpandWidget *mainExpandWidget = new ExpandWidget();
 	mainExpandWidget->setWidgetLocation(ExpandWidget::Location_Right);
 	mainExpandWidget->setPanes(bottomExpandWidget, widgetAuxForLogo);
@@ -488,6 +480,7 @@
     setupViewMenu();
     setupPaneAndLayerMenus();
     setupTransformsMenu();
+	setupFiltersMenu();
 	setupSettingMenu();
     setupHelpMenu();
 
@@ -1817,6 +1810,7 @@
     emit canClearSelection(haveSelection);
     emit canEditSelection(haveSelection && haveCurrentEditableLayer);
     emit canSave(m_sessionFile != "" && m_documentModified);
+	emit canAddFilter(haveMainModel);		
 }
 
 void
@@ -2773,6 +2767,14 @@
             this, SLOT(modelGenerationFailed(QString)));
     connect(m_document, SIGNAL(modelRegenerationFailed(QString, QString)),
             this, SLOT(modelRegenerationFailed(QString, QString)));
+
+	connect(m_document, SIGNAL(newFilterAdded(Filter *)), 
+		m_filterPropertyStack, SLOT(filterAdded(Filter *)));
+	connect(m_document, SIGNAL(filterRemoved(QString)), 
+		m_filterPropertyStack, SLOT(filterRemoved(QString)));
+
+	m_playSource->setRealTimeFilterStack(m_document->getRealTimeFilterStack());
+
 }
 
 void
@@ -2807,6 +2809,9 @@
 	m_paneStack->deletePane(pane);
     }
 
+	if (m_document)
+		m_document->removeAllFilters();
+
 	m_infoWidget->reset();
 	m_searchWidget->reset();
 	m_resultsWidget->reset();
@@ -4206,6 +4211,8 @@
     m_panLayer->setModel(model);
     if (model) m_viewManager->setMainModelSampleRate(model->getSampleRate());
     if (model && !m_playTarget && m_audioOutput) createPlayTarget();
+
+	updateMenuStates();
 }
 
 void
@@ -5326,4 +5333,43 @@
 	connect(m_multiPaneLayerContainer, SIGNAL(removeSelectedItem()), this, SLOT(deleteCurrentLayer())); 
 	connect(this, SIGNAL(newCurrentPane(Pane*)), m_multiPaneLayerContainer, SLOT(currentPaneChanged(Pane*)));
 	m_toolBox->insertItem(0,"Layers", m_multiPaneLayerContainer);
-}	
\ No newline at end of file
+}	
+
+void MainWindow::setupFiltersMenu()
+{
+	if (m_mainMenusCreated) return;
+
+	QAction *action = 0;
+	QMenu *menu = 0;
+
+    menu = menuBar()->addMenu(tr("&Filter"));
+    menu->setTearOffEnabled(true);
+    
+	RealTimeFilterFactory::FilterTypeSet filterTypes = RealTimeFilterFactory::getInstance()->getFilterTypes();
+	RealTimeFilterFactory::FilterTypeSet::iterator iter;
+
+    for (iter = filterTypes.begin(); iter != filterTypes.end(); iter++) {
+		action = new QAction(RealTimeFilterFactory::getInstance()->getFilterLabel(*iter), this);
+		action->setObjectName(RealTimeFilterFactory::getInstance()->getFilterLabel(*iter));
+		connect(action, SIGNAL(triggered()), this, SLOT(addFilter()));
+		connect(this, SIGNAL(canAddFilter(bool)), action, SLOT(setEnabled(bool)));
+		menu->addAction(action);
+	}
+
+	connect(m_filterPropertyStack, SIGNAL(removeFilter(QString)), this, SLOT(removeFilter(QString))); 
+
+}
+
+void MainWindow::addFilter()
+{
+	QString filterType = sender()->objectName();
+
+	Filter* filter = m_document->createFilter(RealTimeFilterFactory::getInstance()->getFilterType(filterType));
+
+}
+
+void MainWindow::removeFilter(QString name)
+{
+	if (m_document)
+		m_document->removeFilter(name);
+}
\ No newline at end of file