diff --git a/SDDSaps/sddseditor/SDDSEditor.cc b/SDDSaps/sddseditor/SDDSEditor.cc index e768861..6aec7c6 100644 --- a/SDDSaps/sddseditor/SDDSEditor.cc +++ b/SDDSaps/sddseditor/SDDSEditor.cc @@ -197,6 +197,9 @@ SDDSEditor::SDDSEditor(QWidget *parent) columnView->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); connect(columnView->horizontalHeader(), &QHeaderView::customContextMenuRequested, this, &SDDSEditor::columnHeaderMenuRequested); + columnView->setContextMenuPolicy(Qt::CustomContextMenu); + connect(columnView, &QTableView::customContextMenuRequested, + this, &SDDSEditor::columnCellMenuRequested); connect(colBox, &QGroupBox::toggled, columnView, &QWidget::setVisible); colLayout->addWidget(columnView); dataSplitter->addWidget(colBox); @@ -230,6 +233,9 @@ SDDSEditor::SDDSEditor(QWidget *parent) arrayView->horizontalHeader()->setContextMenuPolicy(Qt::CustomContextMenu); connect(arrayView->horizontalHeader(), &QHeaderView::customContextMenuRequested, this, &SDDSEditor::arrayHeaderMenuRequested); + arrayView->setContextMenuPolicy(Qt::CustomContextMenu); + connect(arrayView, &QTableView::customContextMenuRequested, + this, &SDDSEditor::arrayCellMenuRequested); connect(arrayBox, &QGroupBox::toggled, arrayView, &QWidget::setVisible); arrayLayout->addWidget(arrayView); dataSplitter->addWidget(arrayBox); @@ -1169,17 +1175,16 @@ void SDDSEditor::changeColumnType(int column) { markDirty(); } -void SDDSEditor::columnHeaderMenuRequested(const QPoint &pos) { - int column = columnView->horizontalHeader()->logicalIndexAt(pos); +void SDDSEditor::showColumnMenu(QTableView *view, int column, + const QPoint &globalPos) { if (column < 0 || column >= dataset.layout.n_columns) return; - QMenu menu(this); + QMenu menu(view); QAction *plotAct = menu.addAction(tr("Plot from file")); QAction *ascAct = menu.addAction(tr("Sort ascending")); QAction *descAct = menu.addAction(tr("Sort descending")); QAction *searchAct = menu.addAction(tr("Search")); - QAction *chosen = - menu.exec(columnView->horizontalHeader()->mapToGlobal(pos)); + QAction *chosen = menu.exec(globalPos); if (chosen == plotAct) plotColumn(column); else if (chosen == ascAct) @@ -1190,18 +1195,45 @@ void SDDSEditor::columnHeaderMenuRequested(const QPoint &pos) { searchColumn(column); } -void SDDSEditor::arrayHeaderMenuRequested(const QPoint &pos) { - int column = arrayView->horizontalHeader()->logicalIndexAt(pos); +void SDDSEditor::columnHeaderMenuRequested(const QPoint &pos) { + int column = columnView->horizontalHeader()->logicalIndexAt(pos); + showColumnMenu(columnView, column, + columnView->horizontalHeader()->mapToGlobal(pos)); +} + +void SDDSEditor::columnCellMenuRequested(const QPoint &pos) { + QModelIndex idx = columnView->indexAt(pos); + if (!idx.isValid()) + return; + showColumnMenu(columnView, idx.column(), + columnView->viewport()->mapToGlobal(pos)); +} + +void SDDSEditor::showArrayMenu(QTableView *view, int column, + const QPoint &globalPos) { if (column < 0 || column >= dataset.layout.n_arrays) return; - QMenu menu(this); + QMenu menu(view); QAction *searchAct = menu.addAction(tr("Search")); - QAction *chosen = - menu.exec(arrayView->horizontalHeader()->mapToGlobal(pos)); + QAction *chosen = menu.exec(globalPos); if (chosen == searchAct) searchArray(column); } +void SDDSEditor::arrayHeaderMenuRequested(const QPoint &pos) { + int column = arrayView->horizontalHeader()->logicalIndexAt(pos); + showArrayMenu(arrayView, column, + arrayView->horizontalHeader()->mapToGlobal(pos)); +} + +void SDDSEditor::arrayCellMenuRequested(const QPoint &pos) { + QModelIndex idx = arrayView->indexAt(pos); + if (!idx.isValid()) + return; + showArrayMenu(arrayView, idx.column(), + arrayView->viewport()->mapToGlobal(pos)); +} + void SDDSEditor::plotColumn(int column) { if (!datasetLoaded || currentFilename.isEmpty()) return; diff --git a/SDDSaps/sddseditor/SDDSEditor.h b/SDDSaps/sddseditor/SDDSEditor.h index c7828ac..7a807c1 100644 --- a/SDDSaps/sddseditor/SDDSEditor.h +++ b/SDDSaps/sddseditor/SDDSEditor.h @@ -66,7 +66,9 @@ private slots: void insertColumnRows(); void deleteColumnRows(); void columnHeaderMenuRequested(const QPoint &pos); + void columnCellMenuRequested(const QPoint &pos); void arrayHeaderMenuRequested(const QPoint &pos); + void arrayCellMenuRequested(const QPoint &pos); void plotColumn(int column); private: @@ -78,6 +80,8 @@ private slots: void changeParameterType(int row); void changeColumnType(int column); void changeArrayType(int column); + void showColumnMenu(QTableView *view, int column, const QPoint &globalPos); + void showArrayMenu(QTableView *view, int column, const QPoint &globalPos); void sortColumn(int column, Qt::SortOrder order); void searchColumn(int column); void searchArray(int column);