changeset 175:9c2400251179

add reset() function to Document to be able in the same session to load different track keeping the same filters enabled
author lbajardsilogic
date Wed, 21 Nov 2007 10:55:26 +0000
parents 61c2aa83e940
children 59a64b19565a
files sv/document/Document.cpp sv/document/Document.h sv/main/MainWindow.cpp
diffstat 3 files changed, 21 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/sv/document/Document.cpp	Wed Nov 21 09:00:39 2007 +0000
+++ b/sv/document/Document.cpp	Wed Nov 21 10:55:26 2007 +0000
@@ -50,16 +50,21 @@
 
 Document::~Document()
 {
-    //!!! Document should really own the command history.  atm we
-    //still refer to it in various places that don't have access to
-    //the document, be nice to fix that
+    reset();
 
-//    std::cerr << "\n\nDocument::~Document: about to clear command history" << std::endl;
+	if (m_filterStack)
+	{
+		delete m_filterStack;
+		m_filterStack = 0;
+	}
+}
+
+void Document::reset()
+{
     CommandHistory::getInstance()->clear();
     
-//    std::cerr << "Document::~Document: about to delete layers" << std::endl;
     while (!m_layers.empty()) {
-	deleteLayer(*m_layers.begin(), true);
+		deleteLayer(*m_layers.begin(), true);
     }
 
     if (!m_models.empty()) {
@@ -86,13 +91,10 @@
 		m_audioSourceInfoModel = 0;
 	}
 
-//    std::cerr << "Document::~Document: About to get rid of main model"
-//	      << std::endl;
     emit modelAboutToBeDeleted(m_mainModel);
     emit mainModelChanged(0);
     delete m_mainModel;
-
-	delete m_filterStack;
+	m_mainModel = 0;
 }
 
 Layer *
@@ -158,6 +160,7 @@
     Layer *newLayer = createLayer(type);
     if (!newLayer) {
 	delete newModel;
+	newModel = 0;
 	return 0;
     }
 
@@ -201,6 +204,7 @@
     if (types.empty()) {
 	std::cerr << "WARNING: Document::createLayerForTransform: no valid display layer for output of transform " << transform.toStdString() << std::endl;
 	delete newModel;
+	newModel = 0;
 	return 0;
     }
 
@@ -327,6 +331,7 @@
 
     // we already emitted modelAboutToBeDeleted for this
     delete oldMainModel;
+	oldMainModel = 0;
 }
 
 void Document::setAudioSourceInfoModel(AudioSourceInfoModel *infoModel)
@@ -461,6 +466,7 @@
 	emit modelAboutToBeDeleted(model);
 	m_models.erase(model);
 	delete model;
+	model=0;
     }
 }
 
@@ -506,6 +512,7 @@
     emit layerRemoved(layer);
     emit layerAboutToBeDeleted(layer);
     delete layer;
+	layer = 0;
 }
 
 void
--- a/sv/document/Document.h	Wed Nov 21 09:00:39 2007 +0000
+++ b/sv/document/Document.h	Wed Nov 21 10:55:26 2007 +0000
@@ -74,6 +74,8 @@
     Document();
     virtual ~Document();
 
+	void reset();
+
     /**
      * Create and return a new layer of the given type, associated
      * with no model.  The caller may set any model on this layer, but
--- a/sv/main/MainWindow.cpp	Wed Nov 21 09:00:39 2007 +0000
+++ b/sv/main/MainWindow.cpp	Wed Nov 21 10:55:26 2007 +0000
@@ -5401,9 +5401,9 @@
 		i--;
     }
 
-	delete m_document;
+	m_document->reset();
     
-	createDocument();
+	//createDocument();
 	Pane *pane = m_paneStack->getCurrentPane();
 
     if (!m_timeRulerLayer) {