+
+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)
+{
+ _selectionModelSynchronizer.synchronizeSelectionModel(view->selectionModel());
+}
+
+
+void BufferModel::setCurrentIndex(const QModelIndex &newCurrent)
+{
+ _selectionModelSynchronizer.selectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::Current);
+ _selectionModelSynchronizer.selectionModel()->select(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
+}
+
+
+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::switchToOrJoinBuffer(NetworkId networkId, const QString &name, bool isQuery)
+{
+ BufferId bufId = Client::networkModel()->bufferId(networkId, name);
+ if (bufId.isValid()) {
+ QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId);
+ switchToBuffer(bufId);
+ if (!targetIdx.data(NetworkModel::ItemActiveRole).toBool()) {
+ qDebug() << "switchToOrJoinBuffer failed to switch even though bufId:" << bufId << "is valid.";
+ Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString(isQuery ? "/QUERY %1" : "/JOIN %1").arg(name));
+ }
+ }
+ else {
+ _bufferToSwitchTo = qMakePair(networkId, name);
+ Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString(isQuery ? "/QUERY %1" : "/JOIN %1").arg(name));
+ }