From 17c0776786a6e230ac79accbe78649ec0eb4f937 Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Thu, 15 Nov 2018 16:00:48 +0100
Subject: [PATCH] export report into TSV files

---
 .../export_spreadsheet_dialog.ui              | 26 +++++++++++++
 .../exportspreadsheetdialog.cpp               | 26 ++++++++++++-
 .../exportspreadsheetdialog.h                 |  2 +
 src/gui/mainwindow.cpp                        | 38 ++++++++++++++-----
 src/gui/mainwindow.h                          |  7 ++--
 src/gui/workerthread.cpp                      | 13 ++++---
 src/gui/workerthread.h                        |  2 +-
 7 files changed, 92 insertions(+), 22 deletions(-)

diff --git a/src/gui/export_spreadsheet_dialog/export_spreadsheet_dialog.ui b/src/gui/export_spreadsheet_dialog/export_spreadsheet_dialog.ui
index 8aa973a7..40975efd 100644
--- a/src/gui/export_spreadsheet_dialog/export_spreadsheet_dialog.ui
+++ b/src/gui/export_spreadsheet_dialog/export_spreadsheet_dialog.ui
@@ -152,6 +152,32 @@
         </layout>
        </widget>
       </item>
+      <item>
+       <widget class="QGroupBox" name="formats_groupbox">
+        <property name="title">
+         <string>Formats</string>
+        </property>
+        <layout class="QHBoxLayout" name="horizontalLayout_2">
+         <item>
+          <widget class="QRadioButton" name="ods_radiobutton">
+           <property name="text">
+            <string>ODS spreadsheet (Excel or Li&amp;breOffice)</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <widget class="QRadioButton" name="tsv_radiobutton">
+           <property name="text">
+            <string>w&amp;rite TSV files in a directory</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.cpp b/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.cpp
index 28231401..c4139d75 100644
--- a/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.cpp
+++ b/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.cpp
@@ -118,8 +118,17 @@ ExportSpreadsheetDialog::ExportSpreadsheetDialog(QWidget *parent)
     {
       ui->ptmspectra_checkbox->setCheckState(Qt::Checked);
     }
-    // param.setFilterCrossSamplePeptideNumber(settings.value("automatic_filter/cross_sample",
-    // "true").toBool());
+  // param.setFilterCrossSamplePeptideNumber(settings.value("automatic_filter/cross_sample",
+  // "true").toBool());
+
+  if(settings.value("export_ods/format", "ods").toString() == "ods")
+    {
+      ui->ods_radiobutton->setChecked(true);
+    }
+  else
+    {
+      ui->tsv_radiobutton->setChecked(true);
+    }
 
 #if QT_VERSION >= 0x050000
     // Qt5 code
@@ -284,3 +293,16 @@ ExportSpreadsheetDialog::setProject(const Project *p_project)
       ui->ptm_groupbox->setEnabled(false);
     }
 }
+
+QString
+ExportSpreadsheetDialog::getExportFormat() const
+{
+  QSettings settings;
+  QString format = "ods";
+  if(ui->tsv_radiobutton->isChecked())
+    {
+      format = "tsv";
+    }
+  settings.setValue("export_ods/format", format);
+  return format;
+}
diff --git a/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.h b/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.h
index f03559d0..807482cc 100644
--- a/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.h
+++ b/src/gui/export_spreadsheet_dialog/exportspreadsheetdialog.h
@@ -43,6 +43,8 @@ class ExportSpreadsheetDialog : public QDialog
   public:
   explicit ExportSpreadsheetDialog(QWidget *parent);
   ~ExportSpreadsheetDialog();
+  
+  QString getExportFormat() const;
 
   void setProject(const Project *p_project);
 
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
index 1443d068..938cfcd8 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -194,36 +194,54 @@ MainWindow::doActionQuit()
 void
 MainWindow::doAcceptedExportSpreadsheetDialog()
 {
-  qDebug() << "MainWindow::doAcceptedExportSpreadsheetDialog begin";
+  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
   try
     {
+      QString format = this->_p_export_spreadsheet_dialog->getExportFormat();
       QSettings settings;
       QString default_location =
         settings.value("path/export_ods", "").toString();
 
-      QString filename = QFileDialog::getSaveFileName(
-        this,
-        tr("Save ODS file"),
-        QString("%1/untitled.ods").arg(default_location),
-        tr("Open Document Spreadsheet (*.ods);;tabulated text file (*.tsv)"));
-
+      QString filename;
+      if(format == "ods")
+        {
+          filename = QFileDialog::getSaveFileName(
+            this,
+            tr("Save ODS file"),
+            QString("%1/untitled.ods").arg(default_location),
+            tr("Open Document Spreadsheet (*.ods)"));
+
+          settings.setValue("path/export_ods",
+                            QFileInfo(filename).absolutePath());
+        }
+      else
+        {
+          filename = QFileDialog::getExistingDirectory(
+            this, tr("Save TSV files"), QString("%1").arg(default_location));
+
+          QDir parent(filename);
+          parent.cdUp();
+          settings.setValue("path/export_ods", parent.canonicalPath());
+          qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ << " "
+                   << parent.absolutePath();
+        }
       if(filename.isEmpty())
         {
           return;
         }
 
-      settings.setValue("path/export_ods", QFileInfo(filename).absolutePath());
 
       showWaitingMessage(
         tr("writing %1 ODS file").arg(QFileInfo(filename).fileName()));
-      emit operateWritingOdsFile(filename, _project_sp);
+      emit operateWritingOdsFile(filename, format, _project_sp);
       // emit operateXpipFile(filename);
     }
   catch(pappso::PappsoException &error)
     {
       viewError(tr("Error while writing ODS file :\n%1").arg(error.qwhat()));
     }
-  qDebug() << "MainWindow::doAcceptedExportSpreadsheetDialog end";
+
+  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
 }
 
 void
diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h
index 39922852..21762189 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -45,7 +45,7 @@
 
 namespace Ui
 {
-  class Main;
+class Main;
 }
 
 class MainWindow : public QMainWindow
@@ -102,7 +102,8 @@ class MainWindow : public QMainWindow
                              AutomaticFilterParameters param,
                              QStringList file_list);
   void operateWritingXpipFile(QString filename, ProjectSp project_sp);
-  void operateWritingOdsFile(QString filename, ProjectSp project_sp);
+  void
+  operateWritingOdsFile(QString filename, QString format, ProjectSp project_sp);
   void operateWritingMassChroqFile(QString filename, ProjectSp project_sp);
   void operateWritingMassChroqPrmFile(QString filename, ProjectSp project_sp);
   void operateWritingProticFile(QString filename, ProjectSp project_sp);
@@ -133,7 +134,7 @@ class MainWindow : public QMainWindow
   WaitingMessageDialog *_p_waiting_message_dialog;
   AboutDialog *_p_about_dialog          = nullptr;
   TandemRunDialog *_p_tandem_run_dialog = nullptr;
-  
+
   HttpVersion m_onlineVersion;
 };
 
diff --git a/src/gui/workerthread.cpp b/src/gui/workerthread.cpp
index e76c0062..5c0d3dd4 100644
--- a/src/gui/workerthread.cpp
+++ b/src/gui/workerthread.cpp
@@ -505,19 +505,20 @@ WorkerThread::doWritingXpipFile(QString filename, ProjectSp project_sp)
     }
 }
 void
-WorkerThread::doWritingOdsFile(QString filename, ProjectSp project_sp)
+WorkerThread::doWritingOdsFile(QString filename,
+                               QString format,
+                               ProjectSp project_sp)
 {
 
   try
     {
-        
-  qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__ ;
-      QFileInfo file_info(filename);
+
+      qDebug() << __FILE__ << " " << __FUNCTION__ << " " << __LINE__;
       CalcWriterInterface *p_writer = nullptr;
-      if(file_info.suffix() == "tsv")
+      if(format == "tsv")
         {
           emit loadingMessage(tr("writing TSV files, please wait"));
-          p_writer = new TsvDirectoryWriter (filename);
+          p_writer = new TsvDirectoryWriter(filename);
         }
       else
         {
diff --git a/src/gui/workerthread.h b/src/gui/workerthread.h
index ba40f866..60168b56 100644
--- a/src/gui/workerthread.h
+++ b/src/gui/workerthread.h
@@ -59,7 +59,7 @@ class WorkerThread : public QObject
   void doLoadingResults(bool is_individual, AutomaticFilterParameters param,
                         QStringList file_list);
   void doWritingXpipFile(QString filename, ProjectSp project_sp);
-  void doWritingOdsFile(QString filename, ProjectSp project_sp);
+  void doWritingOdsFile(QString filename, QString format, ProjectSp project_sp);
   void doWritingMassChroqFile(QString filename, ProjectSp project_sp);
   void doWritingMassChroqPrmFile(QString filename, ProjectSp project_sp);
   void doWritingProticFile(QString filename, ProjectSp project_sp);
-- 
GitLab