diff --git a/timeseriesviewer/timeseries.py b/timeseriesviewer/timeseries.py index 3e8ce2e95b94c14a5c4840c90a144fc09f74d1a3..b40664aeb7dafb82a5eda2f3a3ce755c830e81e9 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)