From 384f56fe65002ee511f6dfb0b8420f3cd8bcf9a4 Mon Sep 17 00:00:00 2001 From: 0penBrain <48731257+0penBrain@users.noreply.github.com> Date: Wed, 13 Apr 2022 16:51:15 +0200 Subject: [PATCH] Sheet: enable Split action only if only one merged cell is selected Both main menu and context menu Partially fixes #6744 --- src/Mod/Spreadsheet/Gui/Command.cpp | 5 ++++- src/Mod/Spreadsheet/Gui/SheetTableView.cpp | 8 +++++++- src/Mod/Spreadsheet/Gui/SheetTableView.h | 1 + src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp | 5 +++++ src/Mod/Spreadsheet/Gui/SpreadsheetView.h | 1 + 5 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/Mod/Spreadsheet/Gui/Command.cpp b/src/Mod/Spreadsheet/Gui/Command.cpp index 48f96e5d90..4d3d8df5c7 100644 --- a/src/Mod/Spreadsheet/Gui/Command.cpp +++ b/src/Mod/Spreadsheet/Gui/Command.cpp @@ -162,7 +162,10 @@ bool CmdSpreadsheetSplitCell::isActive() Sheet * sheet = sheetView->getSheet(); if (current.isValid()) - return sheet->isMergedCell(CellAddress(current.row(), current.column())); + { + return (sheetView->selectedIndexesRaw().size() == 1 && + sheet->isMergedCell(CellAddress(current.row(), current.column()))); + } } } return false; diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp index c945f1cfe1..6dfa5d1b04 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp @@ -274,6 +274,11 @@ std::vector SheetTableView::selectedRanges() const return result; } +QModelIndexList SheetTableView::selectedIndexesRaw() const +{ + return selectedIndexes(); +} + void SheetTableView::insertRows() { assert(sheet != nullptr); @@ -966,7 +971,8 @@ void SheetTableView::contextMenuEvent(QContextMenuEvent *) actionCut->setEnabled(true); actionCopy->setEnabled(true); actionDel->setEnabled(true); - actionSplit->setEnabled(true); + actionSplit->setEnabled(selectedIndexes().size() == 1 && + sheet->isMergedCell(CellAddress(currentIndex().row(),currentIndex().column()))); actionMerge->setEnabled(true); } diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.h b/src/Mod/Spreadsheet/Gui/SheetTableView.h index e2deba3f4d..b26c676e39 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.h +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.h @@ -58,6 +58,7 @@ public: void edit(const QModelIndex &index); void setSheet(Spreadsheet::Sheet *_sheet); std::vector selectedRanges() const; + QModelIndexList selectedIndexesRaw() const; QString toHtml() const; public Q_SLOTS: diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp index 4941fd22e5..dd2f52d22d 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp @@ -483,6 +483,11 @@ QModelIndexList SheetView::selectedIndexes() const return ui->cells->selectionModel()->selectedIndexes(); } +QModelIndexList SheetView::selectedIndexesRaw() const +{ + return ui->cells->selectedIndexesRaw(); +} + void SpreadsheetGui::SheetView::select(App::CellAddress cell, QItemSelectionModel::SelectionFlags flags) { ui->cells->selectionModel()->select(model->index(cell.row(), cell.col()), flags); diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h index 46d6665a6c..9c72c454c0 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h @@ -81,6 +81,7 @@ public: std::vector selectedRanges() const; QModelIndexList selectedIndexes() const; + QModelIndexList selectedIndexesRaw() const; void select(App::CellAddress cell, QItemSelectionModel::SelectionFlags flags);