This should finally *fingers crossed* fix the model inconsistency reports. Please...
[quassel.git] / src / client / buffermodel.cpp
index c9537f3..4b78ea9 100644 (file)
@@ -35,8 +35,8 @@ BufferModel::BufferModel(NetworkModel *parent)
   // initialize the Property Mapper
   _propertyMapper.setModel(this);
   _selectionModelSynchronizer.addRegularSelectionModel(_propertyMapper.selectionModel());
-  connect(&_selectionModelSynchronizer, SIGNAL(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)),
-         this, SLOT(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)));
+  connect(_propertyMapper.selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+         this, SLOT(currentChanged(QModelIndex, QModelIndex)));
 }
 
 BufferModel::~BufferModel() {
@@ -44,11 +44,13 @@ BufferModel::~BufferModel() {
 
 bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const {
   Q_UNUSED(sourceRow);
-  // hide childs of buffers and everything below
-  if(parent.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType)
-    return false;
-  else
+  // only networks and buffers are allowed
+  if(!parent.isValid())
     return true;
+  if(parent.data(NetworkModel::ItemTypeRole) == NetworkModel::NetworkItemType)
+    return true;
+
+  return false;
 }
 
 void BufferModel::synchronizeSelectionModel(MappedSelectionModel *selectionModel) {
@@ -67,19 +69,13 @@ void BufferModel::mapProperty(int column, int role, QObject *target, const QByte
   _propertyMapper.addMapping(column, role, target, property);
 }
 
-// This Slot indicates that the user has selected a different buffer in the gui
-void BufferModel::setCurrentIndex(const QModelIndex &index, QItemSelectionModel::SelectionFlags command) {
-  Q_UNUSED(command)
-  BufferId newCurrentBuffer;
-  if(index.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType
-     && currentBuffer != (newCurrentBuffer = qVariantValue<BufferId>(index.data(NetworkModel::BufferIdRole)))) {
-    currentBuffer = newCurrentBuffer;
-    // FIXME: to something like: index.setData(ActivitRole, NoActivity);
-    // networkModel->bufferActivity(BufferItem::NoActivity, currentBuffer);
-    emit selectionChanged(index);
-  }
-}
-
 QModelIndex BufferModel::currentIndex() {
   return propertyMapper()->selectionModel()->currentIndex();
 }
+
+void BufferModel::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
+  Q_UNUSED(current);
+  setData(current, QDateTime::currentDateTime(), NetworkModel::LastSeenRole);
+  setData(previous, QDateTime::currentDateTime(), NetworkModel::LastSeenRole);
+  setData(previous, qVariantFromValue((int)BufferItem::NoActivity), NetworkModel::BufferActivityRole);
+}