/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel Project *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#include <QAbstractItemView>
#include "client.h"
-#include "mappedselectionmodel.h"
#include "networkmodel.h"
#include "quassel.h"
connect(_selectionModelSynchronizer.selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(debug_currentChanged(const QModelIndex &, const QModelIndex &)));
}
+ connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(newNetwork(NetworkId)));
}
bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const {
return false;
}
-void BufferModel::synchronizeSelectionModel(MappedSelectionModel *selectionModel) {
- _selectionModelSynchronizer.addSelectionModel(selectionModel);
+void BufferModel::newNetwork(NetworkId id) {
+ const Network *net = Client::network(id);
+ Q_ASSERT(net);
+ connect(net, SIGNAL(connectionStateSet(Network::ConnectionState)),
+ this, SLOT(networkConnectionChanged(Network::ConnectionState)));
+}
+
+void BufferModel::networkConnectionChanged(Network::ConnectionState state) {
+ switch(state) {
+ case Network::Connecting:
+ case Network::Initializing:
+ if(currentIndex().isValid())
+ return;
+ {
+ Network *net = qobject_cast<Network *>(sender());
+ Q_ASSERT(net);
+ setCurrentIndex(mapFromSource(Client::networkModel()->networkIndex(net->networkId())));
+ }
+ break;
+ default:
+ return;
+ }
}
void BufferModel::synchronizeView(QAbstractItemView *view) {
- MappedSelectionModel *mappedSelectionModel = new MappedSelectionModel(view->model());
- _selectionModelSynchronizer.addSelectionModel(mappedSelectionModel);
- Q_ASSERT(mappedSelectionModel);
- delete view->selectionModel();
- view->setSelectionModel(mappedSelectionModel);
+ _selectionModelSynchronizer.synchronizeSelectionModel(view->selectionModel());
}
void BufferModel::setCurrentIndex(const QModelIndex &newCurrent) {
qWarning() << "BufferModel::switchToBufferIndex(const QModelIndex &):" << bufferIdx << "does not belong to BufferModel or NetworkModel";
}
+void BufferModel::switchToOrJoinBuffer(NetworkId networkId, const QString &name) {
+ BufferId bufId = Client::networkModel()->bufferId(networkId, name);
+ if(bufId.isValid()) {
+ QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId);
+ switchToBuffer(bufId);
+ if(!targetIdx.data(NetworkModel::ItemActiveRole).toBool())
+ Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(name));
+ } else
+ Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(name));
+}
+
void BufferModel::debug_currentChanged(QModelIndex current, QModelIndex previous) {
Q_UNUSED(previous);
qDebug() << "Switched current Buffer: " << current << current.data().toString() << "Buffer:" << current.data(NetworkModel::BufferIdRole).value<BufferId>();