X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnetworkmodelactionprovider.cpp;h=12fd2e4ba2c25c25cbaddc24a027e9180adc64c9;hp=555535ef2645181adcb67e5435870c4af95fc395;hb=7ea9c498bfb975a95c11d6ddc28835840cf3353d;hpb=b24a38cf5f34f0a5e12c68d81fa4c67c849f33e9 diff --git a/src/uisupport/networkmodelactionprovider.cpp b/src/uisupport/networkmodelactionprovider.cpp index 555535ef..12fd2e4b 100644 --- a/src/uisupport/networkmodelactionprovider.cpp +++ b/src/uisupport/networkmodelactionprovider.cpp @@ -29,6 +29,7 @@ #include "iconloader.h" #include "identity.h" #include "network.h" +#include "util.h" NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) : AbstractActionProvider(parent), @@ -207,13 +208,36 @@ void NetworkModelActionProvider::addActions(QMenu *menu, // ChatView actions if(_contextItem.isEmpty()) { // a) query buffer: handle like ircuser - // b) general chatview: only react if _contextItem is set (i.e. we right-clicked on something) + // b) general chatview: handle like channel iff it displays a single buffer // NOTE stuff breaks probably with merged buffers, need to rework a lot around here then - // for now, use the item type of a random buffer... assuming we never mix channel and query buffers - //if(!_messageFilter->containedBuffers.count()) - // return; - //BufferId randomBuf = _messageFilter->containedBuffers.values().at(0); + if(_messageFilter->containedBuffers().count() == 1) { + // we can handle this like a single bufferItem + QModelIndex index = Client::networkModel()->bufferIndex(_messageFilter->containedBuffers().values().at(0)); + _indexList = QList() << index; + addBufferItemActions(menu, index); + return; + } else { + // TODO: actions for merged buffers... _indexList contains the index of the message we clicked on + } + } else { + // context item = chan or nick, _indexList = buf where the msg clicked on originated + if(isChannelName(_contextItem)) { + QModelIndex msgIdx = _indexList.at(0); + if(!msgIdx.isValid()) + return; + NetworkId networkId = msgIdx.data(NetworkModel::NetworkIdRole).value(); + BufferId bufId = Client::networkModel()->bufferId(networkId, _contextItem); + if(bufId.isValid()) { + QModelIndex targetIdx = Client::networkModel()->bufferIndex(bufId); + _indexList = QList() << targetIdx; + addAction(BufferJoin, menu, targetIdx, InactiveState); + addAction(BufferSwitchTo, menu, targetIdx, ActiveState); + } else + addAction(JoinChannel, menu); + } else { + // TODO: actions for a nick + } } } } @@ -506,6 +530,8 @@ void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *acti } void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *action) { + Q_UNUSED(action) + if(!_indexList.count()) return; NetworkId networkId = _indexList.at(0).data(NetworkModel::NetworkIdRole).value(); @@ -513,17 +539,17 @@ void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *a return; switch(type) { - case JoinChannel: - { - // FIXME no QInputDialog in Qtopia -# ifndef Q_WS_QWS - bool ok; - QString channelName = QInputDialog::getText(0, tr("Join Channel"), tr("Input channel name:"), QLineEdit::Normal, QString(), &ok); - if(ok && !channelName.isEmpty()) { - Client::instance()->userInput(BufferInfo::fakeStatusBuffer(networkId), - QString("/JOIN %1").arg(channelName)); + case JoinChannel: { + QString channelName = _contextItem; + if(channelName.isEmpty()) { + bool ok; + channelName = QInputDialog::getText(0, tr("Join Channel"), tr("Input channel name:"), QLineEdit::Normal, QString(), &ok); + if(!ok) + return; + } + if(!channelName.isEmpty()) { + Client::instance()->userInput(BufferInfo::fakeStatusBuffer(networkId), QString("/JOIN %1").arg(channelName)); } -# endif break; } case ShowChannelList: