From 33d2ff26b389c3b21cdc272af133f1f2dca2b36d Mon Sep 17 00:00:00 2001
From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB>
Date: Thu, 27 Jul 2017 09:30:01 +0200
Subject: [PATCH] TimeSeriesTableView context menu allows to check/uncheck
 selected rows and to hide/show the related observations TimeSeriesTableView
 context menu allows to copy values of selected cells to the clipboard

---
 timeseriesviewer/timeseries.py | 35 +++++++++++++++++++++++++++++++---
 1 file changed, 32 insertions(+), 3 deletions(-)

diff --git a/timeseriesviewer/timeseries.py b/timeseriesviewer/timeseries.py
index 3e8ce2e9..b40664ae 100644
--- a/timeseriesviewer/timeseries.py
+++ b/timeseriesviewer/timeseries.py
@@ -336,11 +336,40 @@ class TimeSeriesTableView(QTableView):
     def contextMenuEvent(self, event):
 
         menu = QMenu(self)
-        menu.addAction('Check selected observation')
-        menu.addAction('Uncheck selected observation')
-
+        a = menu.addAction('Copy value(s)')
+        a.triggered.connect(self.onCopyValues)
+        a = menu.addAction('Check')
+        a.triggered.connect(lambda : self.onSetCheckState(Qt.Checked))
+        a = menu.addAction('Uncheck')
+        a.triggered.connect(lambda: self.onSetCheckState(Qt.Unchecked))
         menu.popup(QCursor.pos())
 
+    def onSetCheckState(self, checkState):
+        indices = self.selectionModel().selectedIndexes()
+        rows = sorted(list(set([i.row() for i in indices])))
+        model = self.model()
+        if isinstance(model, TimeSeriesTableModel):
+            for r in rows:
+                idx = model.index(r,0)
+                model.setData(idx, checkState, Qt.CheckStateRole)
+
+    def onCopyValues(self):
+        indices = self.selectionModel().selectedIndexes()
+        model = self.model()
+        if isinstance(model, TimeSeriesTableModel):
+            from collections import OrderedDict
+            R = OrderedDict()
+            for idx in indices:
+                if not idx.row() in R.keys():
+                    R[idx.row()] = []
+                R[idx.row()].append(model.data(idx, Qt.DisplayRole))
+            info = []
+            for k, values in R.items():
+                info.append(';'.join([str(v) for v in values]))
+            info = '\n'.join(info)
+            QApplication.clipboard().setText(info)
+        s = ""
+
     def selectSelectedObservations(b):
         assert isinstance(b, bool)
 
-- 
GitLab