This is it, the long-awaited huge commit with the new Network handling.
[quassel.git] / src / client / buffermodel.cpp
index df5d99f..2fc222e 100644 (file)
 
 BufferModel::BufferModel(NetworkModel *parent)
   : QSortFilterProxyModel(parent),
-    _selectionModelSynchronizer(new SelectionModelSynchronizer(this)),
-    _propertyMapper(new ModelPropertyMapper(this))
+    _selectionModelSynchronizer(this),
+    _propertyMapper(this)
 {
   setSourceModel(parent);
 
   // initialize the Property Mapper
-  _propertyMapper->setModel(this);
-  delete _propertyMapper->selectionModel();
-  MappedSelectionModel *mappedSelectionModel = new MappedSelectionModel(this);
-  _propertyMapper->setSelectionModel(mappedSelectionModel);
-  synchronizeSelectionModel(mappedSelectionModel);
-  
-  connect(_selectionModelSynchronizer, SIGNAL(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)),
-         this, SLOT(setCurrentIndex(QModelIndex, QItemSelectionModel::SelectionFlags)));
+  _propertyMapper.setModel(this);
+  _selectionModelSynchronizer.addRegularSelectionModel(_propertyMapper.selectionModel());
+  connect(_propertyMapper.selectionModel(), SIGNAL(currentChanged(QModelIndex, QModelIndex)),
+         this, SLOT(currentChanged(QModelIndex, QModelIndex)));
 }
 
 BufferModel::~BufferModel() {
 }
 
 bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const {
-  Q_UNUSED(sourceRow)
-    
+  Q_UNUSED(sourceRow);
+  // hide childs of buffers and everything below
   if(parent.data(NetworkModel::ItemTypeRole) == NetworkModel::BufferItemType)
     return false;
   else
@@ -56,40 +52,26 @@ bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) con
 }
 
 void BufferModel::synchronizeSelectionModel(MappedSelectionModel *selectionModel) {
-  selectionModelSynchronizer()->addSelectionModel(selectionModel);
+  _selectionModelSynchronizer.addSelectionModel(selectionModel);
 }
 
 void BufferModel::synchronizeView(QAbstractItemView *view) {
   MappedSelectionModel *mappedSelectionModel = new MappedSelectionModel(view->model());
-  selectionModelSynchronizer()->addSelectionModel(mappedSelectionModel);
+  _selectionModelSynchronizer.addSelectionModel(mappedSelectionModel);
   Q_ASSERT(mappedSelectionModel);
   delete view->selectionModel();
   view->setSelectionModel(mappedSelectionModel);
 }
 
 void BufferModel::mapProperty(int column, int role, QObject *target, const QByteArray &property) {
-  propertyMapper()->addMapping(column, role, target, property);
+  _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)
-  Buffer *newCurrentBuffer;
-  NetworkModel *networkModel = qobject_cast<NetworkModel *>(parent());
-  if(networkModel->isBufferIndex(mapToSource(index)) && currentBuffer != (newCurrentBuffer = networkModel->getBufferByIndex(mapToSource(index)))) {
-    currentBuffer = newCurrentBuffer;
-    networkModel->bufferActivity(Buffer::NoActivity, currentBuffer);
-    emit bufferSelected(currentBuffer);
-    emit selectionChanged(index);
-  }
+QModelIndex BufferModel::currentIndex() {
+  return propertyMapper()->selectionModel()->currentIndex();
 }
 
-void BufferModel::selectBuffer(Buffer *buffer) {
-  QModelIndex index = (qobject_cast<NetworkModel *>(parent()))->bufferIndex(buffer->bufferInfo());
-  if(!index.isValid()) {
-    qWarning() << "BufferModel::selectBuffer(): unknown Buffer has been selected.";
-    return;
-  }
-  // SUPER UGLY!
-  setCurrentIndex(mapFromSource(index), 0);
+void BufferModel::currentChanged(const QModelIndex &current, const QModelIndex &previous) {
+  Q_UNUSED(current);
+  setData(previous, qVariantFromValue((int)BufferItem::NoActivity), NetworkModel::BufferActivityRole);
 }