From 6cd7247c950c912dc8a82576ba844703e898f62a Mon Sep 17 00:00:00 2001
From: Olivier Langella <olivier.langella@u-psud.fr>
Date: Tue, 15 Jan 2019 16:20:51 +0100
Subject: [PATCH] export fasta now works the same way as old Java version :
 all, one by subgroup, one by group

---
 src/gui/main.ui                | 68 +++++++++++++++++++++++----
 src/gui/mainwindow.cpp         | 84 ++++++++++++++++++++++++----------
 src/gui/mainwindow.h           |  2 +
 src/output/exportfastafile.cpp |  2 +-
 4 files changed, 124 insertions(+), 32 deletions(-)

diff --git a/src/gui/main.ui b/src/gui/main.ui
index f3387e1b..f3df8229 100644
--- a/src/gui/main.ui
+++ b/src/gui/main.ui
@@ -65,7 +65,15 @@
      <property name="title">
       <string>&amp;Export files</string>
      </property>
-     <addaction name="actionFasta"/>
+     <widget class="QMenu" name="menu_Fasta">
+      <property name="title">
+       <string>&amp;Fasta</string>
+      </property>
+      <addaction name="actionAll_grouped_proteins"/>
+      <addaction name="actionOnly_one_by_subgroup"/>
+      <addaction name="actionOnly_one_by_group"/>
+     </widget>
+     <addaction name="menu_Fasta"/>
      <addaction name="actionMassChroQ"/>
      <addaction name="actionMassChroqPRM"/>
      <addaction name="actionSpreadsheet"/>
@@ -112,11 +120,6 @@
     <string>Load &amp;results</string>
    </property>
   </action>
-  <action name="actionFasta">
-   <property name="text">
-    <string>&amp;Fasta</string>
-   </property>
-  </action>
   <action name="actionMassChroQ">
    <property name="text">
     <string>&amp;MassChroQ</string>
@@ -169,7 +172,22 @@
   </action>
   <action name="actionMassChroqPRM">
    <property name="text">
-    <string>MassChroqPRM</string>
+    <string>MassC&amp;hroqPRM</string>
+   </property>
+  </action>
+  <action name="actionAll_grouped_proteins">
+   <property name="text">
+    <string>all grouped proteins</string>
+   </property>
+  </action>
+  <action name="actionOnly_one_by_subgroup">
+   <property name="text">
+    <string>only one by subgroup</string>
+   </property>
+  </action>
+  <action name="actionOnly_one_by_group">
+   <property name="text">
+    <string>only one by group</string>
    </property>
   </action>
  </widget>
@@ -290,7 +308,7 @@
    </hints>
   </connection>
   <connection>
-   <sender>actionFasta</sender>
+   <sender>actionAll_grouped_proteins</sender>
    <signal>triggered()</signal>
    <receiver>Main</receiver>
    <slot>doActionFasta()</slot>
@@ -449,6 +467,38 @@
     </hint>
    </hints>
   </connection>
+  <connection>
+   <sender>actionOnly_one_by_group</sender>
+   <signal>triggered()</signal>
+   <receiver>Main</receiver>
+   <slot>doActionFastaOneByGroup()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>231</x>
+     <y>191</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionOnly_one_by_subgroup</sender>
+   <signal>triggered()</signal>
+   <receiver>Main</receiver>
+   <slot>doActionFastaOneBySubgroup()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>231</x>
+     <y>191</y>
+    </hint>
+   </hints>
+  </connection>
  </connections>
  <slots>
   <slot>selectXpipFile()</slot>
@@ -465,5 +515,7 @@
   <slot>doActionTandemRun()</slot>
   <slot>doActionSaveProject()</slot>
   <slot>doActionMassChroqPRM()</slot>
+  <slot>doActionFastaOneBySubgroup()</slot>
+  <slot>doActionFastaOneByGroup()</slot>
  </slots>
 </ui>
diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp
index 492888c6..6faee7ac 100644
--- a/src/gui/mainwindow.cpp
+++ b/src/gui/mainwindow.cpp
@@ -500,40 +500,78 @@ MainWindow::doActionSpectralCountingMcq()
 void
 MainWindow::doActionFasta()
 {
-  try
+  QSettings settings;
+  QString default_location = settings.value("path/fastafile", "").toString();
+
+  QString filename = QFileDialog::getSaveFileName(
+    this,
+    tr("Save FASTA file"),
+    QString("%1/untitled.fasta").arg(default_location),
+    tr("FASTA (*.fasta)"));
+
+  if(filename.isEmpty())
     {
-      // export all grouped proteins
-      // or only one protein by sub grouped
-      // or only one protein by group
+      return;
+    }
 
-      QSettings settings;
-      QString default_location =
-        settings.value("path/fastafile", "").toString();
+  settings.setValue("path/fastafile", QFileInfo(filename).absolutePath());
 
-      QString filename = QFileDialog::getSaveFileName(
-        this,
-        tr("Save FASTA file"),
-        QString("%1/untitled.fasta").arg(default_location),
-        tr("FASTA (*.fasta)"));
+  showWaitingMessage(
+    tr("Writing %1 FASTA file").arg(QFileInfo(filename).fileName()));
+  emit operateWritingFastaFile(filename, _project_sp, ExportFastaType::all);
+}
 
-      if(filename.isEmpty())
-        {
-          return;
-        }
 
-      settings.setValue("path/fastafile", QFileInfo(filename).absolutePath());
+void
+MainWindow::doActionFastaOneBySubgroup()
+{
+  QSettings settings;
+  QString default_location = settings.value("path/fastafile", "").toString();
 
-      showWaitingMessage(
-        tr("Writing %1 FASTA file").arg(QFileInfo(filename).fileName()));
-      emit operateWritingFastaFile(filename, _project_sp, ExportFastaType::all);
+  QString filename = QFileDialog::getSaveFileName(
+    this,
+    tr("Save FASTA file"),
+    QString("%1/untitled.fasta").arg(default_location),
+    tr("FASTA (*.fasta)"));
 
+  if(filename.isEmpty())
+    {
+      return;
     }
-  catch(pappso::PappsoException &error)
+
+  settings.setValue("path/fastafile", QFileInfo(filename).absolutePath());
+
+  showWaitingMessage(
+    tr("Writing %1 FASTA file").arg(QFileInfo(filename).fileName()));
+  emit operateWritingFastaFile(
+    filename, _project_sp, ExportFastaType::oneBySubgroup);
+}
+
+void
+MainWindow::doActionFastaOneByGroup()
+{
+  QSettings settings;
+  QString default_location = settings.value("path/fastafile", "").toString();
+
+  QString filename = QFileDialog::getSaveFileName(
+    this,
+    tr("Save FASTA file"),
+    QString("%1/untitled.fasta").arg(default_location),
+    tr("FASTA (*.fasta)"));
+
+  if(filename.isEmpty())
     {
-      viewError(
-        tr("Error while writing MassChroqML file :\n%1").arg(error.qwhat()));
+      return;
     }
+
+  settings.setValue("path/fastafile", QFileInfo(filename).absolutePath());
+
+  showWaitingMessage(
+    tr("Writing %1 FASTA file").arg(QFileInfo(filename).fileName()));
+  emit operateWritingFastaFile(
+    filename, _project_sp, ExportFastaType::oneByGroup);
 }
+
 void
 MainWindow::doActionMassChroQ()
 {
diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h
index 4acaa6c1..8696379f 100644
--- a/src/gui/mainwindow.h
+++ b/src/gui/mainwindow.h
@@ -68,6 +68,8 @@ class MainWindow : public QMainWindow
   void doActionAbout();
   void doActionQuit();
   void doActionFasta();
+  void doActionFastaOneBySubgroup();
+  void doActionFastaOneByGroup();
   void doActionMassChroQ();
   void doActionMassChroqPRM();
   void doActionProticDb();
diff --git a/src/output/exportfastafile.cpp b/src/output/exportfastafile.cpp
index c2735cd4..b64e010f 100644
--- a/src/output/exportfastafile.cpp
+++ b/src/output/exportfastafile.cpp
@@ -102,7 +102,7 @@ ExportFastaFile::writeIdentificationGroup(
             continue;
 
           if((m_exportType == ExportFastaType::oneByGroup) &&
-             (group_number == old_group_number) && (subgroup_number > 1))
+             (group_number == old_group_number))
             continue;
 
           old_group_number    = group_number;
-- 
GitLab