Made the ModelPropertyMapper listen to dataChanged(QModelIndex, QModelIndex) signals...
authorMarcus Eggenberger <egs@quassel-irc.org>
Sun, 30 Dec 2007 14:06:55 +0000 (14:06 +0000)
committerMarcus Eggenberger <egs@quassel-irc.org>
Sun, 30 Dec 2007 14:06:55 +0000 (14:06 +0000)
src/client/modelpropertymapper.cpp
src/client/modelpropertymapper.h

index fe2ffcb..890eda4 100644 (file)
@@ -34,9 +34,14 @@ ModelPropertyMapper::~ModelPropertyMapper() {
 }
 
 void ModelPropertyMapper::setModel(QAbstractItemModel *model) {
-  if(_model)
+  if(_model) {
     setSelectionModel(new QItemSelectionModel(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)));
 }
 
 QAbstractItemModel *ModelPropertyMapper::model() const {
@@ -95,11 +100,19 @@ void ModelPropertyMapper::setCurrentRow(const QModelIndex &current, const QModel
   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());
index 44e902a..27dafa5 100644 (file)
@@ -48,6 +48,7 @@ public:
 public slots:
   void setCurrentIndex(const QModelIndex &current, const QModelIndex &previous);
   void setCurrentRow(const QModelIndex &current, const QModelIndex &previous);
+  void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
 
 private slots:
   void targetDestroyed();