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>
This commit is contained in:
parent
11bd543d90
commit
f6e3f24683
@ -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())
|
if (!index.isValid() || index.column() >= d->rec.count() || index.row() >= rowCount())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
bool isOk = true;
|
if (d->strategy == OnFieldChange && d->cache.value(index.row()).op != QSqlTableModelPrivate::Insert) {
|
||||||
switch (d->strategy) {
|
d->cache.clear();
|
||||||
case OnFieldChange: {
|
} else if (d->strategy == OnRowChange && !d->cache.isEmpty() && !d->cache.contains(index.row())) {
|
||||||
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
|
submit();
|
||||||
if (row.op == QSqlTableModelPrivate::Insert) {
|
d->cache.clear();
|
||||||
row.setValue(index.column(), value);
|
}
|
||||||
return true;
|
|
||||||
}
|
QSqlTableModelPrivate::ModifiedRow &row = d->cache[index.row()];
|
||||||
|
|
||||||
|
if (row.op == QSqlTableModelPrivate::None) {
|
||||||
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
|
row = QSqlTableModelPrivate::ModifiedRow(QSqlTableModelPrivate::Update,
|
||||||
d->rec,
|
d->rec,
|
||||||
d->primaryValues(indexInQuery(index).row()));
|
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);
|
isOk = updateRowInTable(index.row(), row.rec);
|
||||||
if (isOk)
|
if (isOk)
|
||||||
select();
|
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;
|
return isOk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user