diff options
author | Mark Brand <mabrand@mabrand.nl> | 2011-07-06 20:52:06 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-05 17:50:26 +0100 |
commit | ccaa6734f124e9afc86c29e93b77b38ffc54254b (patch) | |
tree | c3199ab71177f426368904bc6b4a4d7c4c8049a1 /src/sql/models | |
parent | 48c68b05465e488020e241dd66290777b0eeeb3d (diff) |
merge private and public QSqlTableModel::setRecord()
Change-Id: I409bd32f85224db64363688d63fc372d1beaa0d3
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src/sql/models')
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 54 | ||||
-rw-r--r-- | src/sql/models/qsqltablemodel_p.h | 1 |
2 files changed, 22 insertions, 33 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 19c9ba7b9b..8f63ee3910 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -66,36 +66,6 @@ QSqlRecord QSqlTableModelPrivate::record(const QVector<QVariant> &values) const return r; } -/*! \internal - Set a record for OnFieldChange and OnRowChange. -*/ -bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record) -{ - Q_Q(QSqlTableModel); - bool isOk = true; - - QSqlTableModel::EditStrategy oldStrategy = strategy; - - // FieldChange strategy makes no sense when setting an entire row - if (strategy == QSqlTableModel::OnFieldChange) - strategy = QSqlTableModel::OnRowChange; - for (int i = 0; i < record.count(); ++i) { - int idx = nameToIndex(record.fieldName(i)); - if (idx == -1) - continue; - QModelIndex cIndex = q->createIndex(row, idx); - QVariant value = record.value(i); - QVariant oldValue = q->data(cIndex); - if (oldValue.isNull() || oldValue != value) - isOk &= q->setData(cIndex, value, Qt::EditRole); - } - if (isOk && oldStrategy == QSqlTableModel::OnFieldChange) - q->submitAll(); - strategy = oldStrategy; - - return isOk; -} - int QSqlTableModelPrivate::nameToIndex(const QString &name) const { QString fieldname = name; @@ -1236,8 +1206,28 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record) bool isOk = true; switch (d->strategy) { case OnFieldChange: - case OnRowChange: - return d->setRecord(row, record); + case OnRowChange: { + EditStrategy oldStrategy = d->strategy; + + // FieldChange strategy makes no sense when setting an entire row + if (d->strategy == OnFieldChange) + d->strategy = OnRowChange; + for (int i = 0; i < record.count(); ++i) { + int idx = d->nameToIndex(record.fieldName(i)); + if (idx == -1) + continue; + QModelIndex cIndex = createIndex(row, idx); + QVariant value = record.value(i); + QVariant oldValue = data(cIndex); + if (oldValue.isNull() || oldValue != value) + isOk &= setData(cIndex, value, Qt::EditRole); + } + if (isOk && oldStrategy == OnFieldChange) + submitAll(); + d->strategy = oldStrategy; + + return isOk; + } case OnManualSubmit: { QSqlTableModelPrivate::ModifiedRow &mrow = d->cache[row]; if (mrow.op == QSqlTableModelPrivate::None) diff --git a/src/sql/models/qsqltablemodel_p.h b/src/sql/models/qsqltablemodel_p.h index b69f53473c..56fd839a0c 100644 --- a/src/sql/models/qsqltablemodel_p.h +++ b/src/sql/models/qsqltablemodel_p.h @@ -76,7 +76,6 @@ public: bool exec(const QString &stmt, bool prepStatement, const QSqlRecord &rec, const QSqlRecord &whereValues); virtual void revertCachedRow(int row); - bool setRecord(int row, const QSqlRecord &record); virtual int nameToIndex(const QString &name) const; void initRecordAndPrimaryIndex(); |