Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
fixes #2833: [Spreadsheet] Keyboard events are sent to the wrong view…
…provider
  • Loading branch information
wwmayer committed Sep 12, 2018
1 parent 876339b commit ac66048
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 15 deletions.
49 changes: 49 additions & 0 deletions src/Mod/Spreadsheet/Gui/SheetTableView.cpp
Expand Up @@ -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<QKeyEvent*>(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<Range> ranges = selectedRanges();
std::vector<Range>::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<SpreadsheetGui::LineEdit*>(editor);
Expand Down
1 change: 1 addition & 0 deletions src/Mod/Spreadsheet/Gui/SheetTableView.h
Expand Up @@ -58,6 +58,7 @@ class SheetTableView : public QTableView
void edit(const QModelIndex &index);
void setSheet(Spreadsheet::Sheet *_sheet);
std::vector<App::Range> selectedRanges() const;
void deleteSelection();
protected Q_SLOTS:
void commitData(QWidget *editor);
void updateCellSpan(App::CellAddress address);
Expand Down
5 changes: 5 additions & 0 deletions src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp
Expand Up @@ -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();
Expand Down
2 changes: 2 additions & 0 deletions src/Mod/Spreadsheet/Gui/SpreadsheetView.h
Expand Up @@ -75,6 +75,8 @@ class SpreadsheetGuiExport SheetView : public Gui::MDIView

QModelIndex currentIndex() const;

void deleteSelection();

PyObject *getPyObject(void);

virtual void deleteSelf();
Expand Down
16 changes: 1 addition & 15 deletions src/Mod/Spreadsheet/Gui/ViewProviderSpreadsheet.cpp
Expand Up @@ -154,21 +154,7 @@ bool ViewProviderSheet::onDelete(const std::vector<std::string> &)
SpreadsheetGui::SheetView * sheetView = freecad_dynamic_cast<SpreadsheetGui::SheetView>(activeWindow);

if (sheetView) {
Sheet * sheet = sheetView->getSheet();
QModelIndexList selection = sheetView->selectedIndexes();

if (selection.size() > 0) {
Gui::Command::openCommand("Clear cell(s)");
std::vector<Range> ranges = sheetView->selectedRanges();
std::vector<Range>::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();
}
}

Expand Down

0 comments on commit ac66048

Please sign in to comment.