/***************************************************************************
- * Copyright (C) 2005-07 by The Quassel 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 *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
+ * (at your option) version 3. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
}
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 {
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());
}