summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMark Brand <mabrand@mabrand.nl>2011-07-07 11:52:11 +0200
committerQt by Nokia <qt-info@nokia.com>2012-02-05 17:50:35 +0100
commitf6e3f2468357ceece00ef05a1a17b63524eae1d9 (patch)
treefb1ce4c4b068b093764c90ae08bab1086829ca38 /src
parent11bd543d901f67f79db3f5b5dfaa626c6e8faa45 (diff)
refactor QSqlTableModel::setData()
-move logic out of switch statement -clear cache more clearly for OnFieldChange -call setValue() in one place instead of two -eliminate extra return path Existing idiosyncracies have been kept for the time being. Change-Id: Ia4c5a5fd3e374b53e3c4d870f2ee9d37b5090917 Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/sql/models/qsqltablemodel.cpp58
1 files changed, 20 insertions, 38 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp
index 79149a0d26..298cd03e20 100644
--- a/src/sql/models/qsqltablemodel.cpp
+++ b/src/sql/models/qsqltablemodel.cpp
@@ -475,51 +475,33 @@ bool QSqlTableModel::setData(const QModelIndex &index, const QVariant &value, in
if (!index.isValid() || index.column() >= d->rec.count() || index.row() >= rowCount())
return false;
- bool isOk = true;
- switch (d->strategy) {
- case OnFieldChange: {
- QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
- if (row.op == QSqlTableModelPrivate::Insert) {
- row.setValue(index.column(), value);
- return true;
- }
+ if (d->strategy == OnFieldChange && d->cache.value(index.row()).op != QSqlTableModelPrivate::Insert) {
+ d->cache.clear();
+ } else if (d->strategy == OnRowChange && !d->cache.isEmpty() && !d->cache.contains(index.row())) {
+ submit();
+ d->cache.clear();
+ }
+
+ QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
+
+ if (row.op == QSqlTableModelPrivate::None) {
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
d->rec,
d->primaryValues(indexInQuery(index).row()));
- row.setValue(index.column(), value);
+ }
+
+ row.setValue(index.column(), value);
+
+ bool isOk = true;
+ if (d->strategy == OnFieldChange && row.op != QSqlTableModelPrivate::Insert) {
isOk = updateRowInTable(index.row(), row.rec);
if (isOk)
select();
- emit dataChanged(index, index);
- break; }
- case OnRowChange: {
- if (!d->cache.isEmpty() && !d->cache.contains(index.row())) {
- submit();
- d->cache.clear();
- }
- QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
- if (row.op == QSqlTableModelPrivate::Insert) {
- row.setValue(index.column(), value);
- return true;
- } else if (row.op == QSqlTableModelPrivate::None) {
- row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
- d->rec,
- d->primaryValues(indexInQuery(index).row()));
- }
- row.setValue(index.column(), value);
- emit dataChanged(index, index);
- break; }
- case OnManualSubmit: {
- QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
- if (row.op == QSqlTableModelPrivate::None) {
- row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
- d->rec,
- d->primaryValues(indexInQuery(index).row()));
- }
- row.setValue(index.column(), value);
- emit dataChanged(index, index);
- break; }
}
+
+ if (d->strategy == OnManualSubmit || row.op != QSqlTableModelPrivate::Insert)
+ emit dataChanged(index, index);
+
return isOk;
}