/***************************************************************************
- * Copyright (C) 2005-07 by the Quassel IRC Team *
+ * Copyright (C) 2005-08 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
}
void ModelPropertyMapper::setModel(QAbstractItemModel *model) {
- if(_model)
- setSelectionModel(new QItemSelectionModel(model));
+ if(_model) {
+ disconnect(_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
+ this, SLOT(dataChanged(QModelIndex, QModelIndex)));
+ }
_model = model;
+ connect(_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)),
+ this, SLOT(dataChanged(QModelIndex, QModelIndex)));
+ setSelectionModel(new QItemSelectionModel(model));
}
QAbstractItemModel *ModelPropertyMapper::model() const {
}
if(column == 0 && role == 0 && !property.isNull()) {
- QList<Mapping>::iterator iter;
- for(iter = _mappings.begin(); iter != _mappings.end(); iter++) {
+ QList<Mapping>::iterator iter = _mappings.begin();
+ while(iter != _mappings.end()) {
if((*iter).target == target)
- _mappings.erase(iter);
+ iter = _mappings.erase(iter);
+ else
+ iter++;
}
return;
}
Q_UNUSED(previous)
foreach(Mapping mapping, _mappings) {
QModelIndex index = current.sibling(current.row(), mapping.column);
- // qDebug() << mapping.target << mapping.property << index.data(mapping.role);
mapping.target->setProperty(mapping.property, index.data(mapping.role));
}
}
+void ModelPropertyMapper::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) {
+ QItemSelectionRange changedRange(topLeft, bottomRight);
+ foreach(Mapping mapping, _mappings) {
+ QModelIndex index = _selectionModel->currentIndex().sibling(_selectionModel->currentIndex().row(), mapping.column);
+ if(changedRange.contains(index)) {
+ mapping.target->setProperty(mapping.property, index.data(mapping.role));
+ }
+ }
+}
void ModelPropertyMapper::targetDestroyed() {
- QObject *obj = static_cast<QObject *>(sender());
- removeMapping(0, 0, obj, QByteArray());
+ removeMapping(0, 0, sender(), QByteArray());
}