merge private and public QSqlTableModel::setRecord()

Change-Id: I409bd32f85224db64363688d63fc372d1beaa0d3
Reviewed-by: Yunqiao Yin <charles.yin@nokia.com>
This commit is contained in:
Mark Brand 2011-07-06 20:52:06 +02:00 committed by Qt by Nokia
parent 48c68b0546
commit ccaa6734f1
2 changed files with 22 additions and 33 deletions

View File

@ -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)

View File

@ -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();