fixes #0002833: [Spreadsheet] Keyboard events are sent to the wrong viewprovider
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -58,6 +58,7 @@ public:
|
||||
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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -75,6 +75,8 @@ public:
|
||||
|
||||
QModelIndex currentIndex() const;
|
||||
|
||||
void deleteSelection();
|
||||
|
||||
PyObject *getPyObject(void);
|
||||
|
||||
virtual void deleteSelf();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user