diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp index 7dd07825..a7ed5159 100644 --- a/src/MainWindow.cpp +++ b/src/MainWindow.cpp @@ -192,7 +192,7 @@ void MainWindow::init() connect(dittoRecordShortcut, &QShortcut::activated, [this]() { int currentRow = ui->dataTable->currentIndex().row(); auto row = m_browseTableModel->dittoRecord(currentRow); - ui->dataTable->setCurrentIndex(row); + duplicateRecord(currentRow); }); // Add menu item for log dock @@ -2450,7 +2450,7 @@ void MainWindow::showRecordPopupMenu(const QPoint& pos) popupRecordMenu.addAction(action); connect(action, &QAction::triggered, [&]() { - m_browseTableModel->dittoRecord(row); + duplicateRecord(row); }); popupRecordMenu.exec(ui->dataTable->verticalHeader()->mapToGlobal(pos)); @@ -2767,3 +2767,12 @@ void MainWindow::saveFilterAsView() else QMessageBox::information(this, qApp->applicationName(), tr("There is no filter set for this table. View will not be created.")); } + +void MainWindow::duplicateRecord(int currentRow) +{ + auto row = m_browseTableModel->dittoRecord(currentRow); + if (row.isValid()) + ui->dataTable->setCurrentIndex(row); + else + QMessageBox::warning(this, qApp->applicationName(), db.lastError()); +} diff --git a/src/MainWindow.h b/src/MainWindow.h index 5e028648..f3cf28ea 100644 --- a/src/MainWindow.h +++ b/src/MainWindow.h @@ -191,6 +191,7 @@ private: void enableEditing(bool enable_edit, bool enable_insertdelete); void loadExtensionsFromSettings(); void saveAsView(QString query); + void duplicateRecord(int currentRow); sqlb::ObjectIdentifier currentlyBrowsedTableName() const; diff --git a/src/sqlitetablemodel.cpp b/src/sqlitetablemodel.cpp index 1191ff7a..d768db13 100644 --- a/src/sqlitetablemodel.cpp +++ b/src/sqlitetablemodel.cpp @@ -512,7 +512,9 @@ QModelIndex SqliteTableModel::dittoRecord(int old_row) if(!isEditable()) return QModelIndex(); - insertRow(rowCount()); + if (!insertRow(rowCount())) + return QModelIndex(); + int firstEditedColumn = 0; int new_row = rowCount() - 1;