#include "buffermodel.h"
-#include "networkmodel.h"
-#include "mappedselectionmodel.h"
-#include "buffer.h"
#include <QAbstractItemView>
+#include "client.h"
+#include "mappedselectionmodel.h"
+#include "networkmodel.h"
+#include "quassel.h"
+
BufferModel::BufferModel(NetworkModel *parent)
: QSortFilterProxyModel(parent),
_selectionModelSynchronizer(this)
{
setSourceModel(parent);
- if(QCoreApplication::instance()->arguments().contains("--debugbufferswitches")) {
+ if(Quassel::isOptionSet("debugbufferswitches")) {
connect(_selectionModelSynchronizer.selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(debug_currentChanged(const QModelIndex &, const QModelIndex &)));
}
view->setSelectionModel(mappedSelectionModel);
}
-QModelIndex BufferModel::currentIndex() {
- return standardSelectionModel()->currentIndex();
+void BufferModel::setCurrentIndex(const QModelIndex &newCurrent) {
+ _selectionModelSynchronizer.selectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::Current);
+ _selectionModelSynchronizer.selectionModel()->select(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
}
-void BufferModel::setCurrentIndex(const QModelIndex &newCurrent) {
- _selectionModelSynchronizer.selectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
- _selectionModelSynchronizer.selectionModel()->select(newCurrent, QItemSelectionModel::Current);
+void BufferModel::switchToBuffer(const BufferId &bufferId) {
+ QModelIndex source_index = Client::networkModel()->bufferIndex(bufferId);
+ setCurrentIndex(mapFromSource(source_index));
+}
+
+void BufferModel::switchToBufferIndex(const QModelIndex &bufferIdx) {
+ // we accept indexes that directly belong to us or our parent - nothing else
+ if(bufferIdx.model() == this) {
+ setCurrentIndex(bufferIdx);
+ return;
+ }
+
+ if(bufferIdx.model() == sourceModel()) {
+ setCurrentIndex(mapFromSource(bufferIdx));
+ return;
+ }
+
+ qWarning() << "BufferModel::switchToBufferIndex(const QModelIndex &):" << bufferIdx << "does not belong to BufferModel or NetworkModel";
}
void BufferModel::debug_currentChanged(QModelIndex current, QModelIndex previous) {