From 812d8c83b34b902beb3ad62c42dc00feb1bb76d9 Mon Sep 17 00:00:00 2001
From: Olivier Langella <Olivier.Langella@moulon.inra.fr>
Date: Tue, 30 May 2017 17:28:51 +0200
Subject: [PATCH] ptm position list added

---
 src/grouping/ptm/ptmisland.cpp                |  3 +++
 src/grouping/ptm/ptmisland.h                  |  1 +
 .../ptmislandtablemodel.cpp                   | 23 ++++++++++++++++---
 .../ptmislandtablemodel.h                     |  5 ++++
 src/utils/types.h                             | 12 ++++++++++
 5 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/src/grouping/ptm/ptmisland.cpp b/src/grouping/ptm/ptmisland.cpp
index 0603f9fba..6d588704e 100644
--- a/src/grouping/ptm/ptmisland.cpp
+++ b/src/grouping/ptm/ptmisland.cpp
@@ -47,6 +47,9 @@ PtmIsland::~PtmIsland()
 
 }
 
+    const std::vector<unsigned int> & PtmIsland::getPositionList() const {
+      return _position_list;
+    }
 const QString PtmIsland::getGroupingId() const {
     if(_prot_number==0) {
         return "";
diff --git a/src/grouping/ptm/ptmisland.h b/src/grouping/ptm/ptmisland.h
index 62f13ac63..a06a6f17c 100644
--- a/src/grouping/ptm/ptmisland.h
+++ b/src/grouping/ptm/ptmisland.h
@@ -63,6 +63,7 @@ public:
     
     
     const QString getGroupingId() const;
+    const std::vector<unsigned int> & getPositionList() const;
     
 private:
     const ProteinMatch * _protein_match_p;
diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp
index bfd6082bf..43ed0b6de 100644
--- a/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp
+++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.cpp
@@ -30,6 +30,16 @@
 #include "ptmislandtablemodel.h"
 #include "ptmislandlistwindow.h"
 
+#include "../../utils/types.h"
+
+
+PtmIslandTableModel::columnMap PtmIslandTableModel::_column_assignment = {
+    (std::int8_t)PtmIslandListColumn::ptm_island_id,
+    (std::int8_t)PtmIslandListColumn::accession,
+    (std::int8_t)PtmIslandListColumn::ptm_position_list
+};
+
+
 PtmIslandTableModel::PtmIslandTableModel(PtmIslandListWindow * p_ptm_island_list_window)
 {
 
@@ -87,12 +97,19 @@ QVariant PtmIslandTableModel::data(const QModelIndex &index, int role ) const {
         if (_p_identification_group == nullptr) {
             return QVariant();
         }
-        switch (col) {
-	  case 0:
+        switch (_column_assignment [col]) {
+	  case (std::int8_t) PtmIslandListColumn::ptm_island_id:
             return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getGroupingId());
 	break;
-	  case 1:
+	  case (std::int8_t) PtmIslandListColumn::accession:
             return QVariant(getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getProteinMatch()->getProteinXtpSp().get()->getAccession());
+	break; 
+	  case (std::int8_t) PtmIslandListColumn::ptm_position_list:
+	    QStringList position_list;
+	    for (unsigned int position :getPtmGroupingExperiment()->getPtmIslandList().at(row).get()->getPositionList()) {
+	      position_list << QString("%1").arg(position+1);
+	    }
+            return QVariant(position_list.join(" "));
 	break;
 	}
     }
diff --git a/src/gui/ptm_island_list_view/ptmislandtablemodel.h b/src/gui/ptm_island_list_view/ptmislandtablemodel.h
index 11ee41c3e..7cb1ca930 100644
--- a/src/gui/ptm_island_list_view/ptmislandtablemodel.h
+++ b/src/gui/ptm_island_list_view/ptmislandtablemodel.h
@@ -48,6 +48,9 @@ public:
     virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override;
     virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
     virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+    
+    
+    using columnMap = std::int8_t[20];
 
 public slots:
     void onPtmIslandDataChanged();
@@ -55,6 +58,8 @@ private :
   const PtmGroupingExperiment * getPtmGroupingExperiment() const;
 private :
     IdentificationGroup * _p_identification_group=nullptr;
+    
+    static columnMap _column_assignment;
 };
 
 #endif // PTMISLANDTABLEMODEL_H
diff --git a/src/utils/types.h b/src/utils/types.h
index 9bf617565..a3934d2f6 100644
--- a/src/utils/types.h
+++ b/src/utils/types.h
@@ -113,4 +113,16 @@ enum class ProteinListColumn {
      pai, ///< PAI
 };
 
+
+/** \def PtmIslandListColumn list of available fields to display in ptm island list
+ *
+ */
+
+enum class PtmIslandListColumn: std::int8_t {
+     ptm_island_id=0, ///< ptm_island_id
+     accession=1, ///< protein accession
+     description=2, ///< protein description
+     ptm_position_list=3, ///< protein description
+};
+
 #endif /* _TYPES_H_ */
-- 
GitLab