implement analysis save as dialog
[mussa.git] / qui / MussaWindow.cpp
index b0d5dbde2e4962d9765305e7fd6546d4021088fa..1e8d06cb3ddfb1adb9572633eada961da07968d4 100644 (file)
@@ -22,6 +22,7 @@
 #include <iostream>
 
 #include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
 namespace fs = boost::filesystem;
 #include <boost/bind.hpp>
 
@@ -129,6 +130,10 @@ void MussaWindow::setupActions()
   connect(createSubAnalysisAction, SIGNAL(triggered()), 
           this, SLOT(createSubAnalysis()));
 
+  saveAnalysisAction = new QAction(tr("Save Analysis"), this);
+  connect(saveAnalysisAction, SIGNAL(triggered()), 
+          this, SLOT(saveAnalysis()));
+
   editMotifsAction = new QAction(tr("Edit Motifs"), this);;
   connect(editMotifsAction, SIGNAL(triggered()), this, SLOT(editMotifs()));
   
@@ -208,6 +213,7 @@ void MussaWindow::setupMainMenu()
   newMenu->addAction(createNewAnalysisAction);
   newMenu->addAction(loadMupaAction);
   newMenu->addAction(loadSavedAnalysisAction);
+  newMenu->addAction(saveAnalysisAction);
   newMenu->addSeparator();
   newMenu->addAction(loadMotifListAction);
   newMenu->addAction(saveMotifListAction);
@@ -304,6 +310,39 @@ void MussaWindow::createSubAnalysis()
   }
 }
 
+void MussaWindow::saveAnalysis()
+{
+  std::auto_ptr<QFileDialog> dialog(new QFileDialog(this));
+  dialog->setAcceptMode(QFileDialog::AcceptSave);
+  dialog->setFileMode(QFileDialog::AnyFile);
+
+  QStringList fileNames;
+  if (not dialog->exec()) {
+    return;
+  }
+  fileNames = dialog->selectedFiles();
+   
+  if (fileNames.size() != 1) {
+    return;
+  }
+
+  fs::path save_path(fileNames[0].toStdString());
+  // do you want to overwrite?
+  if (fs::exists(save_path) and 
+      QMessageBox::question(
+        this,
+        tr("Overwrite File? -- Mussa"),
+        tr("A file called %1 already exists"
+           "do you want to overwrite it?")
+           .arg(fileNames[0]),
+        tr("&Yes"), tr("&No"),
+        QString(), 0, 1)
+      ) {
+    return;
+  }
+  analysis->save(save_path);
+}
+
 void MussaWindow::editMotifs()
 {
   if (motif_editor != 0) {