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())
|
||||
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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user