+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));
+ }
+}
+
+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>();
+}
+
+void BufferModel::newBuffers(const QModelIndex& parent, int start, int end)
+{
+ if (parent.data(NetworkModel::ItemTypeRole) != NetworkModel::NetworkItemType)
+ return;
+
+ for (int row = start; row <= end; row++) {
+ QModelIndex child = parent.model()->index(row, 0, parent);
+ newBuffer(child.data(NetworkModel::BufferIdRole).value<BufferId>());
+ }
+}
+
+void BufferModel::newBuffer(BufferId bufferId)
+{
+ BufferInfo bufferInfo = Client::networkModel()->bufferInfo(bufferId);
+ if (_bufferToSwitchTo.first == bufferInfo.networkId() && _bufferToSwitchTo.second == bufferInfo.bufferName()) {
+ _bufferToSwitchTo.first = 0;
+ _bufferToSwitchTo.second.clear();
+ switchToBuffer(bufferId);
+ }
+}
+
+void BufferModel::switchToBufferAfterCreation(NetworkId network, const QString& name)
+{
+ _bufferToSwitchTo = qMakePair(network, name);