From c9923223b7d62ea0270065f46a773da3df2b5335 Mon Sep 17 00:00:00 2001
From: Juan Manuel Carmona Loaiza <juanmcloaiza@gmail.com>
Date: Thu, 20 Sep 2018 17:52:31 +0200
Subject: [PATCH] Added context menu in CsvImportAssistant - preliminary
 version

---
 .../ImportDataWidgets/CsvImportAssistant.cpp  | 54 +++++++++++++++++++
 .../ImportDataWidgets/CsvImportAssistant.h    |  5 +-
 2 files changed, 58 insertions(+), 1 deletion(-)

diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.cpp b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.cpp
index 6ec22d96ac9..616842850eb 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.cpp
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.cpp
@@ -23,6 +23,7 @@
 #include <QVBoxLayout>
 #include <QFileDialog>
 #include <QMessageBox>
+#include <QMenu>
 
 namespace
 {
@@ -91,6 +92,9 @@ QBoxLayout* CsvImportAssistant::createLayout()
 
     result->addLayout(preresult);
 
+    m_tableWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+    connect(m_tableWidget, &QTableWidget::cellClicked, this, &CsvImportAssistant::OnColumnClicked);
+    connect(m_tableWidget, &QTableWidget::customContextMenuRequested, this, &CsvImportAssistant::onColumnRightClick);
     return result;
 }
 
@@ -535,3 +539,53 @@ unsigned CsvImportAssistant::lastLine() const{
 unsigned CsvImportAssistant::singleColumnImport() const{
     return unsigned(m_singleDataColSpinBox->value());
 }
+
+void CsvImportAssistant::OnColumnClicked(int row, int column)
+{
+    //QMenu menu;
+    //
+    if(column <= 0) return;
+    m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
+    m_tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);
+    m_tableWidget->selectColumn(column);
+    m_tableWidget->setSelectionMode(QAbstractItemView::NoSelection);
+    //
+    //menu.exec();
+}
+
+void CsvImportAssistant::onColumnRightClick(const QPoint position)
+{
+    int row = m_tableWidget->itemAt(position)->row();
+    int col = m_tableWidget->itemAt(position)->column();
+    OnColumnClicked(row,col);
+    QMenu menu;
+
+
+    menu.addAction( "Set as " + relevantHeaders[_intensity_]);
+    menu.addAction( "Set as " + relevantHeaders[_theta_]);
+    menu.addAction( "Set as " + relevantHeaders[_2theta_]);
+    menu.addAction( "Set as " + relevantHeaders[_q_]);
+
+    connect(menu.actions()[_intensity_],&QAction::triggered,
+
+       [&](){
+        QString originalHeader = m_tableWidget->horizontalHeaderItem(col)->text();
+        int columnInFile = originalHeader.split(' ').takeLast().toInt();
+        m_tableWidget->setHorizontalHeaderItem( col, new QTableWidgetItem( relevantHeaders[_intensity_]) );
+        m_singleDataColSpinBox->setValue(columnInFile);
+        onReloadButton();
+    }
+    );
+    connect(menu.actions()[_theta_],&QAction::triggered,
+            [&](){m_tableWidget->setHorizontalHeaderItem( col, new QTableWidgetItem( relevantHeaders[_theta_]) );}
+    );
+    connect(menu.actions()[_2theta_],&QAction::triggered,
+            [&](){m_tableWidget->setHorizontalHeaderItem( col, new QTableWidgetItem( relevantHeaders[_2theta_]) );}
+    );
+    connect(menu.actions()[_q_],&QAction::triggered,
+            [&](){m_tableWidget->setHorizontalHeaderItem( col, new QTableWidgetItem( relevantHeaders[_q_]) );}
+    );
+
+            menu.exec(m_tableWidget->mapToGlobal(position));
+}
diff --git a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.h b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.h
index ea1bbaf7173..3ca0e9b16ce 100644
--- a/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.h
+++ b/GUI/coregui/Views/ImportDataWidgets/CsvImportAssistant.h
@@ -44,13 +44,16 @@ public:
     unsigned lastLine() const;
     unsigned singleColumnImport() const;
     unique_ptr<OutputData<double>> getData();
+    QStringList relevantHeaders = {"Intensity","theta","2theta","q"};
+    enum relevantColumns {_intensity_,_theta_,_2theta_,_q_};
 
 public slots:
     void onImportButton();
     void onReloadButton();
     void onRejectButton();
     void onBrowseButton();
-
+    void OnColumnClicked(int row, int column);
+    void onColumnRightClick(const QPoint position);
 
 private:
     QBoxLayout* createLayout();
-- 
GitLab