diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp index ef80ca197000..c8d74865d48e 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.cpp +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.cpp @@ -328,10 +328,59 @@ bool SheetTableView::event(QEvent *event) return true; } } + else if (kevent->key() == Qt::Key_Delete) { + deleteSelection(); + return true; + } + } + else if (event->type() == QEvent::ShortcutOverride) { + QKeyEvent * kevent = static_cast(event); + if (kevent->modifiers() == Qt::NoModifier || + kevent->modifiers() == Qt::ShiftModifier || + kevent->modifiers() == Qt::KeypadModifier) { + switch (kevent->key()) { + case Qt::Key_Return: + case Qt::Key_Enter: + case Qt::Key_Delete: + case Qt::Key_Home: + case Qt::Key_End: + case Qt::Key_Backspace: + case Qt::Key_Left: + case Qt::Key_Right: + case Qt::Key_Up: + case Qt::Key_Down: + case Qt::Key_Tab: + kevent->accept(); + default: + break; + } + + if (kevent->key() < Qt::Key_Escape) { + kevent->accept(); + } + } } return QTableView::event(event); } +void SheetTableView::deleteSelection() +{ + QModelIndexList selection = selectionModel()->selectedIndexes(); + + if (selection.size() > 0) { + Gui::Command::openCommand("Clear cell(s)"); + std::vector ranges = selectedRanges(); + std::vector::const_iterator i = ranges.begin(); + + for (; i != ranges.end(); ++i) { + Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.clear('%s')", sheet->getNameInDocument(), + i->rangeString().c_str()); + } + Gui::Command::commitCommand(); + Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.recompute()"); + } +} + void SheetTableView::closeEditor(QWidget * editor, QAbstractItemDelegate::EndEditHint hint) { SpreadsheetGui::LineEdit * le = qobject_cast(editor); diff --git a/src/Mod/Spreadsheet/Gui/SheetTableView.h b/src/Mod/Spreadsheet/Gui/SheetTableView.h index 871c463c5281..9d3f1917ced2 100644 --- a/src/Mod/Spreadsheet/Gui/SheetTableView.h +++ b/src/Mod/Spreadsheet/Gui/SheetTableView.h @@ -58,6 +58,7 @@ class SheetTableView : public QTableView void edit(const QModelIndex &index); void setSheet(Spreadsheet::Sheet *_sheet); std::vector selectedRanges() const; + void deleteSelection(); protected Q_SLOTS: void commitData(QWidget *editor); void updateCellSpan(App::CellAddress address); diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp index 4cdac0b8f4b6..e9f292bc5508 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp @@ -332,6 +332,11 @@ QModelIndexList SheetView::selectedIndexes() const return ui->cells->selectionModel()->selectedIndexes(); } +void SheetView::deleteSelection() +{ + ui->cells->deleteSelection(); +} + QModelIndex SheetView::currentIndex() const { return ui->cells->currentIndex(); diff --git a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h index cadb4350b175..b0da2c7e3a39 100644 --- a/src/Mod/Spreadsheet/Gui/SpreadsheetView.h +++ b/src/Mod/Spreadsheet/Gui/SpreadsheetView.h @@ -75,6 +75,8 @@ class SpreadsheetGuiExport SheetView : public Gui::MDIView QModelIndex currentIndex() const; + void deleteSelection(); + PyObject *getPyObject(void); virtual void deleteSelf(); diff --git a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp index 73e26cfde0e3..bcf6772822a5 100644 --- a/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp +++ b/src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp @@ -154,21 +154,7 @@ bool ViewProviderSheet::onDelete(const std::vector &) SpreadsheetGui::SheetView * sheetView = freecad_dynamic_cast(activeWindow); if (sheetView) { - Sheet * sheet = sheetView->getSheet(); - QModelIndexList selection = sheetView->selectedIndexes(); - - if (selection.size() > 0) { - Gui::Command::openCommand("Clear cell(s)"); - std::vector ranges = sheetView->selectedRanges(); - std::vector::const_iterator i = ranges.begin(); - - for (; i != ranges.end(); ++i) { - Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.clear('%s')", sheet->getNameInDocument(), - i->rangeString().c_str()); - } - Gui::Command::commitCommand(); - Gui::Command::doCommand(Gui::Command::Doc, "App.ActiveDocument.recompute()"); - } + sheetView->deleteSelection(); } }