From: Sebastian Goth Date: Sat, 30 Jan 2010 23:43:01 +0000 (+0100) Subject: Provide join-and-switch-to methods for join/query X-Git-Tag: 0.6-beta1~57 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=69d6228bb5e53882df1da8fc46d2fb11f061cb98 Provide join-and-switch-to methods for join/query Now we can switch to a new query/channel automatically after it got created on the core. --- diff --git a/src/client/buffermodel.cpp b/src/client/buffermodel.cpp index 1ae0c2e9..f24d03f0 100644 --- a/src/client/buffermodel.cpp +++ b/src/client/buffermodel.cpp @@ -36,6 +36,7 @@ BufferModel::BufferModel(NetworkModel *parent) this, SLOT(debug_currentChanged(const QModelIndex &, const QModelIndex &))); } connect(Client::instance(), SIGNAL(networkCreated(NetworkId)), this, SLOT(newNetwork(NetworkId))); + connect(this, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(newBuffers(const QModelIndex &, int, int))); } bool BufferModel::filterAcceptsRow(int sourceRow, const QModelIndex &parent) const { @@ -102,18 +103,42 @@ void BufferModel::switchToBufferIndex(const QModelIndex &bufferIdx) { qWarning() << "BufferModel::switchToBufferIndex(const QModelIndex &):" << bufferIdx << "does not belong to BufferModel or NetworkModel"; } -void BufferModel::switchToOrJoinBuffer(NetworkId networkId, const QString &name) { +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()) - Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(name)); - } else - Client::userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(name)); + 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(); } + +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.child(row, 0); + newBuffer(child.data(NetworkModel::BufferIdRole).value()); + } +} + +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); + } +} diff --git a/src/client/buffermodel.h b/src/client/buffermodel.h index d863dc95..dbc614de 100644 --- a/src/client/buffermodel.h +++ b/src/client/buffermodel.h @@ -23,6 +23,7 @@ #include #include +#include #include "network.h" #include "networkmodel.h" @@ -52,15 +53,22 @@ public slots: void setCurrentIndex(const QModelIndex &newCurrent); void switchToBuffer(const BufferId &bufferId); void switchToBufferIndex(const QModelIndex &bufferIdx); - void switchToOrJoinBuffer(NetworkId network, const QString &bufferName); + void switchToOrJoinBuffer(NetworkId network, const QString &bufferName, bool isQuery = false); + void switchToOrStartQuery(NetworkId network, const QString &nick) { + switchToOrJoinBuffer(network, nick, true); + } private slots: void debug_currentChanged(QModelIndex current, QModelIndex previous); void newNetwork(NetworkId id); void networkConnectionChanged(Network::ConnectionState state); + void newBuffers(const QModelIndex &parent, int start, int end); private: + void newBuffer(BufferId bufferId); + SelectionModelSynchronizer _selectionModelSynchronizer; + QPair _bufferToSwitchTo; }; #endif // BUFFERMODEL_H