Death to stupid mussa pointers
[mussa.git] / qui / MussaWindow.cpp
index 8fa878e549bdcdd3a290861fa9393c1f6dbb6c91..cb3c2ce9295bc09daec97e4878e8d4f41c377420 100644 (file)
@@ -29,7 +29,7 @@ namespace fs = boost::filesystem;
 
 using namespace std;
 
-MussaWindow::MussaWindow(Mussa *analysis_, QWidget *parent) :
+MussaWindow::MussaWindow(MussaRef analysis_, QWidget *parent) :
   QMainWindow(parent),
   analysis(analysis_),
   default_dir(QDir::home().absolutePath().toStdString(), fs::native),
@@ -91,19 +91,21 @@ MussaWindow::MussaWindow(Mussa *analysis_, QWidget *parent) :
   addToolBar(mussaViewTB);
 
   statusBar()->showMessage("Welcome to mussa", 2000);
-  connect(analysis, SIGNAL(progress(const std::string&, int, int)),
-          this, SLOT(updateProgress(const std::string&, int, int)));
+  // FIXME: we should start refactoring the connect call to updateAnalysis or something
+  if (analysis) {
+    connect(analysis.get(), SIGNAL(progress(const std::string&, int, int)),
+            this, SLOT(updateProgress(const std::string&, int, int)));
+  }
   updateTitle();
   updateAnalysis();
 }
 
-void MussaWindow::setAnalysis(Mussa *new_analysis)
+void MussaWindow::setAnalysis(MussaRef new_analysis)
 {
   if (new_analysis != 0) {
     // only switch mussas if we loaded without error
     clear();
-    delete analysis;
-    analysis = new_analysis;
+    analysis.swap(new_analysis);
     updateTitle();
     updateAnalysis();
   }
@@ -304,9 +306,7 @@ void MussaWindow::createNewAnalysis()
     if (not isClearingAnalysisSafe()) return;
 
     if (setup_analysis_dialog->exec()) {
-      Mussa *m = 0;
-      m = setup_analysis_dialog->getMussa();
-      setAnalysis(m);
+      setAnalysis(setup_analysis_dialog->getMussa());
     }
   } catch(mussa_error e) {
     QString msg(e.what());
@@ -476,9 +476,9 @@ void MussaWindow::loadMupa()
     // but this should work for the moment.
     if (not isClearingAnalysisSafe()) return;
 
-    Mussa *m = new Mussa;
+    MussaRef m(new Mussa);
     fs::path converted_path(mupa_path.toStdString(), fs::native);
-    connect(m, SIGNAL(progress(const std::string&, int, int)),
+    connect(m.get(), SIGNAL(progress(const std::string&, int, int)),
             this, SLOT(updateProgress(const std::string&, int, int)));
     m->load_mupa_file(converted_path);
     m->analyze();
@@ -514,9 +514,9 @@ void MussaWindow::loadSavedAnalysis()
     // but this should work for the moment.
     if (not isClearingAnalysisSafe()) return;
 
-    Mussa *m = new Mussa;
+    MussaRef m(new Mussa);
     fs::path converted_path(muway_dir.toStdString(), fs::native);
-    connect(m, SIGNAL(progress(const std::string&, int, int)),
+    connect(m.get(), SIGNAL(progress(const std::string&, int, int)),
             this, SLOT(updateProgress(const std::string&, int, int)));
     m->load(converted_path);
     // only switch mussas if we loaded without error
@@ -543,7 +543,7 @@ void MussaWindow::loadSavedAnalysis()
 
 void MussaWindow::newMussaWindow()
 {
-  Mussa *a = new Mussa();
+  MussaRef a(new Mussa);
   MussaWindow *win = new MussaWindow(a);
   win->default_dir = default_dir;
   win->show();
@@ -609,7 +609,7 @@ void MussaWindow::viewMussaAlignment()
                                      "first"));
   } else {
     boost::shared_ptr<MussaAlignedWindow> ma_win( 
-      new MussaAlignedWindow(*analysis, selected_paths)
+      new MussaAlignedWindow(analysis, selected_paths)
     );
 
     aligned_windows.push_back(ma_win);