X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnetworkmodelactionprovider.cpp;h=6061e38261c23406a92c4c82f587de05e3acf2e5;hp=9d4c2d19fab200424244ceab621a3c52fe1f04c7;hb=efb5981cf15bee1de651abcf757ab763117e82b4;hpb=a680b6fd6d62e39f9bc197ad856d9b438f179ba4 diff --git a/src/uisupport/networkmodelactionprovider.cpp b/src/uisupport/networkmodelactionprovider.cpp index 9d4c2d19..6061e382 100644 --- a/src/uisupport/networkmodelactionprovider.cpp +++ b/src/uisupport/networkmodelactionprovider.cpp @@ -1,22 +1,22 @@ /*************************************************************************** -* Copyright (C) 2005-08 by the Quassel Project * -* devel@quassel-irc.org * -* * -* This program is free software; you can redistribute it and/or modify * -* it under the terms of the GNU General Public License as published by * -* the Free Software Foundation; either version 2 of the License, or * -* (at your option) version 3. * -* * -* This program is distributed in the hope that it will be useful, * -* but WITHOUT ANY WARRANTY; without even the implied warranty of * -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -* GNU General Public License for more details. * -* * -* You should have received a copy of the GNU General Public License * -* along with this program; if not, write to the * -* Free Software Foundation, Inc., * -* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * -***************************************************************************/ + * Copyright (C) 2005-09 by the Quassel Project * + * devel@quassel-irc.org * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) version 3. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ #include #include @@ -24,10 +24,12 @@ #include "networkmodelactionprovider.h" +#include "buffermodel.h" #include "buffersettings.h" #include "iconloader.h" -#include "identity.h" +#include "clientidentity.h" #include "network.h" +#include "util.h" NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) : AbstractActionProvider(parent), @@ -40,7 +42,8 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) registerAction(BufferJoin, tr("Join")); registerAction(BufferPart, tr("Part")); - registerAction(BufferRemove, tr("Delete Buffer...")); + registerAction(BufferRemove, tr("Delete Buffer(s)...")); + registerAction(BufferSwitchTo, tr("Show Buffer")); registerAction(HideJoin, tr("Joins"), true); registerAction(HidePart, tr("Parts"), true); @@ -48,11 +51,15 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) registerAction(HideNick, tr("Nick Changes"), true); registerAction(HideMode, tr("Mode Changes"), true); registerAction(HideDayChange, tr("Day Changes"), true); - registerAction(HideApplyToAll, tr("Apply to All Chat Views...")); + registerAction(HideApplyToAll, tr("Set as Default...")); + registerAction(HideUseDefaults, tr("Use Defaults...")); registerAction(JoinChannel, tr("Join Channel...")); - registerAction(NickCtcpWhois, tr("Whois")); + registerAction(NickQuery, tr("Start Query")); + registerAction(NickSwitchTo, tr("Show Query")); + registerAction(NickWhois, tr("Whois")); + registerAction(NickCtcpVersion, tr("Version")); registerAction(NickCtcpTime, tr("Time")); registerAction(NickCtcpPing, tr("Ping")); @@ -62,10 +69,9 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) registerAction(NickDeop, tr("Take Operator Status")); registerAction(NickVoice, tr("Give Voice")); registerAction(NickDevoice, tr("Take Voice")); - registerAction(NickKick, tr("Kick")); - registerAction(NickBan, tr("Ban")); - registerAction(NickKickBan, tr("Kickban")); - registerAction(NickQuery, tr("Query")); + registerAction(NickKick, tr("Kick From Channel")); + registerAction(NickBan, tr("Ban From Channel")); + registerAction(NickKickBan, tr("Kick && Ban")); registerAction(HideBufferTemporarily, tr("Hide Buffer(s) Temporarily")); registerAction(HideBufferPermanently, tr("Hide Buffer(s) Permanently")); @@ -74,8 +80,6 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) connect(_actionCollection, SIGNAL(actionTriggered(QAction *)), SLOT(actionTriggered(QAction *))); - action(HideApplyToAll)->setDisabled(true); - QMenu *hideEventsMenu = new QMenu(); hideEventsMenu->addAction(action(HideJoin)); hideEventsMenu->addAction(action(HidePart)); @@ -85,13 +89,38 @@ NetworkModelActionProvider::NetworkModelActionProvider(QObject *parent) hideEventsMenu->addAction(action(HideDayChange)); hideEventsMenu->addSeparator(); hideEventsMenu->addAction(action(HideApplyToAll)); + hideEventsMenu->addAction(action(HideUseDefaults)); _hideEventsMenuAction = new Action(tr("Hide Events"), 0); _hideEventsMenuAction->setMenu(hideEventsMenu); + + QMenu *nickCtcpMenu = new QMenu(); + nickCtcpMenu->addAction(action(NickCtcpPing)); + nickCtcpMenu->addAction(action(NickCtcpVersion)); + nickCtcpMenu->addAction(action(NickCtcpTime)); + nickCtcpMenu->addAction(action(NickCtcpFinger)); + _nickCtcpMenuAction = new Action(tr("CTCP"), 0); + _nickCtcpMenuAction->setMenu(nickCtcpMenu); + + QMenu *nickModeMenu = new QMenu(); + nickModeMenu->addAction(action(NickOp)); + nickModeMenu->addAction(action(NickDeop)); + nickModeMenu->addAction(action(NickVoice)); + nickModeMenu->addAction(action(NickDevoice)); + nickModeMenu->addSeparator(); + nickModeMenu->addAction(action(NickKick)); + nickModeMenu->addAction(action(NickBan)); + nickModeMenu->addAction(action(NickKickBan)); + _nickModeMenuAction = new Action(tr("Actions"), 0); + _nickModeMenuAction->setMenu(nickModeMenu); } NetworkModelActionProvider::~NetworkModelActionProvider() { _hideEventsMenuAction->menu()->deleteLater(); _hideEventsMenuAction->deleteLater(); + _nickCtcpMenuAction->menu()->deleteLater(); + _nickCtcpMenuAction->deleteLater(); + _nickModeMenuAction->menu()->deleteLater(); + _nickModeMenuAction->deleteLater(); } void NetworkModelActionProvider::registerAction(ActionType type, const QString &text, bool checkable) { @@ -116,26 +145,30 @@ void NetworkModelActionProvider::addActions(QMenu *menu, BufferId bufId, QObject if(!bufId.isValid()) return; _messageFilter = 0; + _contextItem = QString(); addActions(menu, Client::networkModel()->bufferIndex(bufId), receiver, method); } -void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, QObject *receiver, const char *method) { - if(!filter) - return; - _messageFilter = filter; - QList indexes; - foreach(BufferId bufId, filter->containedBuffers()) - indexes << Client::networkModel()->bufferIndex(bufId); - addActions(menu, indexes, receiver, method); -} - void NetworkModelActionProvider::addActions(QMenu *menu, const QModelIndex &index, QObject *receiver, const char *method, bool isCustomBufferView) { if(!index.isValid()) return; _messageFilter = 0; + _contextItem = QString(); addActions(menu, QList() << index, receiver, method, isCustomBufferView); } +void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, QObject *receiver, const char *slot) { + addActions(menu, filter, msgBuffer, QString(), receiver, slot); +} + +void NetworkModelActionProvider::addActions(QMenu *menu, MessageFilter *filter, BufferId msgBuffer, const QString &chanOrNick, QObject *receiver, const char *method) { + if(!filter) + return; + _messageFilter = filter; + _contextItem = chanOrNick; + addActions(menu, QList() << Client::networkModel()->bufferIndex(msgBuffer), receiver, method); +} + // add a list of actions sensible for the current item(s) void NetworkModelActionProvider::addActions(QMenu *menu, const QList &indexList, @@ -164,15 +197,48 @@ void NetworkModelActionProvider::addActions(QMenu *menu, case NetworkModel::BufferItemType: addBufferItemActions(menu, index, isCustomBufferView); break; - + case NetworkModel::IrcUserItemType: + addIrcUserActions(menu, index); + break; default: return; } } else { // ChatView actions + if(_contextItem.isEmpty()) { + // a) query buffer: handle like ircuser + // 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 + 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 + } + } } } @@ -205,16 +271,16 @@ void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelI menu->addSeparator(); addAction(HideBufferTemporarily, menu, isCustomBufferView); addAction(HideBufferPermanently, menu, isCustomBufferView); - addAction(BufferRemove, menu, index); + addAction(BufferRemove, menu, index, InactiveState); break; case BufferInfo::QueryBuffer: { - IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); - if(ircUser) { - addIrcUserActions(menu, ircUser, false); + //IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); + //if(ircUser) { + addIrcUserActions(menu, index); menu->addSeparator(); - } + //} addHideEventsMenu(menu, bufferInfo.bufferId()); menu->addSeparator(); addAction(HideBufferTemporarily, menu, isCustomBufferView); @@ -229,9 +295,29 @@ void NetworkModelActionProvider::addBufferItemActions(QMenu *menu, const QModelI } } -void NetworkModelActionProvider::addIrcUserActions(QMenu *menu, IrcUser *ircUser, bool isNickView) { +void NetworkModelActionProvider::addIrcUserActions(QMenu *menu, const QModelIndex &index) { + // this can be called: a) as a nicklist context menu (index has IrcUserItemType) + // b) as a query buffer context menu (index has BufferItemType and is a QueryBufferItem) + // c) right-click in a query chatview (same as b), index will be the corresponding QueryBufferItem) + // d) right-click on some nickname (_contextItem will be non-null, _filter -> chatview, index -> message buffer) + if(_contextItem.isNull()) { + // cases a, b, c + bool haveQuery = _indexList.count() == 1 && findQueryBuffer(index).isValid(); + NetworkModel::ItemType itemType = static_cast(index.data(NetworkModel::ItemTypeRole).toInt()); + addAction(_nickModeMenuAction, menu, itemType == NetworkModel::IrcUserItemType); + addAction(_nickCtcpMenuAction, menu); + menu->addSeparator(); + addAction(NickQuery, menu, itemType == NetworkModel::IrcUserItemType && !haveQuery && _indexList.count() == 1); + addAction(NickSwitchTo, menu, itemType == NetworkModel::IrcUserItemType && haveQuery); + menu->addSeparator(); + addAction(NickWhois, menu, true); + + } else if(!_contextItem.isEmpty() && _messageFilter) { + // case d + // TODO + } } /******** Helper Functions ***********************************************************************/ @@ -273,14 +359,25 @@ Action * NetworkModelActionProvider::addAction(Action *action , QMenu *menu, boo } void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, BufferId bufferId) { - addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter()); + if(BufferSettings(bufferId).hasFilter()) + addHideEventsMenu(menu, BufferSettings(bufferId).messageFilter()); + else + addHideEventsMenu(menu); } void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, MessageFilter *msgFilter) { - addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter()); + if(BufferSettings(msgFilter->idString()).hasFilter()) + addHideEventsMenu(menu, BufferSettings(msgFilter->idString()).messageFilter()); + else + addHideEventsMenu(menu); } void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, int filter) { + action(HideApplyToAll)->setEnabled(filter != -1); + action(HideUseDefaults)->setEnabled(filter != -1); + if(filter == -1) + filter = BufferSettings().messageFilter(); + action(HideJoin)->setChecked(filter & Message::Join); action(HidePart)->setChecked(filter & Message::Part); action(HideQuit)->setChecked(filter & Message::Quit); @@ -291,6 +388,44 @@ void NetworkModelActionProvider::addHideEventsMenu(QMenu *menu, int filter) { menu->addAction(_hideEventsMenuAction); } +QString NetworkModelActionProvider::nickName(const QModelIndex &index) const { + IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); + if(ircUser) + return ircUser->nick(); + + BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); + if(!bufferInfo.isValid()) + return QString(); + if(!bufferInfo.type() == BufferInfo::QueryBuffer) + return QString(); + + return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe +} + +BufferId NetworkModelActionProvider::findQueryBuffer(const QModelIndex &index, const QString &predefinedNick) const { + NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); + if(!networkId.isValid()) + return BufferId(); + + QString nick = predefinedNick.isEmpty() ? nickName(index) : predefinedNick; + if(nick.isEmpty()) + return BufferId(); + + return findQueryBuffer(networkId, nick); +} + +BufferId NetworkModelActionProvider::findQueryBuffer(NetworkId networkId, const QString &nick) const { + return Client::networkModel()->bufferId(networkId, nick); +} + +void NetworkModelActionProvider::handleExternalAction(ActionType type, QAction *action) { + Q_UNUSED(type); + if(_receiver && _method) { + if(!QMetaObject::invokeMethod(_receiver, _method, Q_ARG(QAction *, action))) + qWarning() << "NetworkModelActionProvider::handleExternalAction(): Could not invoke slot" << _receiver << _method; + } +} + /******** Handle Actions *************************************************************************/ void NetworkModelActionProvider::actionTriggered(QAction *action) { @@ -337,73 +472,120 @@ void NetworkModelActionProvider::handleNetworkAction(ActionType type, QAction *) } void NetworkModelActionProvider::handleBufferAction(ActionType type, QAction *) { - foreach(QModelIndex index, _indexList) { - BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); - if(!bufferInfo.isValid()) - continue; + if(type == BufferRemove) { + removeBuffers(_indexList); + } else { - switch(type) { - case BufferJoin: - Client::instance()->userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName())); - break; - case BufferPart: - { - QString reason = Client::identity(Client::network(bufferInfo.networkId())->identity())->partReason(); - Client::instance()->userInput(bufferInfo, QString("/PART %1").arg(reason)); - break; - } - case BufferRemove: - { - int res = QMessageBox::question(0, tr("Remove buffer permanently?"), - tr("Do you want to delete the buffer \"%1\" permanently? This will delete all related data, including all backlog " - "data, from the core's database!").arg(bufferInfo.bufferName()), - QMessageBox::Yes|QMessageBox::No, QMessageBox::No); - if(res == QMessageBox::Yes) { - Client::removeBuffer(bufferInfo.bufferId()); + foreach(QModelIndex index, _indexList) { + BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); + if(!bufferInfo.isValid()) + continue; + + switch(type) { + case BufferJoin: + Client::userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName())); + break; + case BufferPart: + { + QString reason = Client::identity(Client::network(bufferInfo.networkId())->identity())->partReason(); + Client::userInput(bufferInfo, QString("/PART %1").arg(reason)); + break; } - break; + case BufferSwitchTo: + Client::bufferModel()->switchToBuffer(bufferInfo.bufferId()); + break; + default: + break; } - default: - break; } } } -void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *action) { - Message::Type msgType; - switch(type) { - case HideJoin: - msgType = Message::Join; break; - case HidePart: - msgType = Message::Part; break; - case HideQuit: - msgType = Message::Quit; break; - case HideNick: - msgType = Message::Nick; break; - case HideMode: - msgType = Message::Mode; break; - case HideDayChange: - msgType = Message::DayChange; break; - case HideApplyToAll: - // TODO implement "apply to all" for hiding messages - break; - default: - return; +void NetworkModelActionProvider::removeBuffers(const QModelIndexList &indexList) { + QList inactive; + foreach(QModelIndex index, indexList) { + BufferInfo info = index.data(NetworkModel::BufferInfoRole).value(); + if(info.isValid()) { + if(info.type() == BufferInfo::QueryBuffer + || (info.type() == BufferInfo::ChannelBuffer && !index.data(NetworkModel::ItemActiveRole).toBool())) + inactive << info; + } } - - if(_messageFilter) - BufferSettings(_messageFilter->idString()).filterMessage(msgType, action->isChecked()); - else { - foreach(QModelIndex index, _indexList) { - BufferId bufferId = index.data(NetworkModel::BufferIdRole).value(); - if(!bufferId.isValid()) - continue; - BufferSettings(bufferId).filterMessage(msgType, action->isChecked()); + QString msg; + if(inactive.count()) { + msg = tr("Do you want to delete the following buffer(s) permanently?", 0, inactive.count()); + msg += "
    "; + foreach(BufferInfo info, inactive) + msg += QString("
  • %1
  • ").arg(info.bufferName()); + msg += "
"; + msg += tr("Note: This will delete all related data, including all backlog data, from the core's database and cannot be undone."); + if(inactive.count() != indexList.count()) + msg += tr("
Active channel buffers cannot be deleted, please part the channel first."); + + if(QMessageBox::question(0, tr("Remove buffers permanently?"), msg, QMessageBox::Yes|QMessageBox::No, QMessageBox::No) == QMessageBox::Yes) { + foreach(BufferInfo info, inactive) + Client::removeBuffer(info.bufferId()); } } } +void NetworkModelActionProvider::handleHideAction(ActionType type, QAction *action) { + Q_UNUSED(action) + + int filter = 0; + if(NetworkModelActionProvider::action(HideJoin)->isChecked()) + filter |= Message::Join; + if(NetworkModelActionProvider::action(HidePart)->isChecked()) + filter |= Message::Part; + if(NetworkModelActionProvider::action(HideQuit)->isChecked()) + filter |= Message::Quit; + if(NetworkModelActionProvider::action(HideNick)->isChecked()) + filter |= Message::Nick; + if(NetworkModelActionProvider::action(HideMode)->isChecked()) + filter |= Message::Mode; + if(NetworkModelActionProvider::action(HideDayChange)->isChecked()) + filter |= Message::DayChange; + + switch(type) { + case HideJoin: + case HidePart: + case HideQuit: + case HideNick: + case HideMode: + case HideDayChange: + if(_messageFilter) + BufferSettings(_messageFilter->idString()).setMessageFilter(filter); + else { + foreach(QModelIndex index, _indexList) { + BufferId bufferId = index.data(NetworkModel::BufferIdRole).value(); + if(!bufferId.isValid()) + continue; + BufferSettings(bufferId).setMessageFilter(filter); + } + } + return; + case HideApplyToAll: + BufferSettings().setMessageFilter(filter); + case HideUseDefaults: + if(_messageFilter) + BufferSettings(_messageFilter->idString()).removeFilter(); + else { + foreach(QModelIndex index, _indexList) { + BufferId bufferId = index.data(NetworkModel::BufferIdRole).value(); + if(!bufferId.isValid()) + continue; + BufferSettings(bufferId).removeFilter(); + } + } + return; + default: + return; + }; +} + void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *action) { + Q_UNUSED(action) + if(!_indexList.count()) return; NetworkId networkId = _indexList.at(0).data(NetworkModel::NetworkIdRole).value(); @@ -411,17 +593,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: @@ -436,14 +618,63 @@ void NetworkModelActionProvider::handleGeneralAction(ActionType type, QAction *a } void NetworkModelActionProvider::handleNickAction(ActionType type, QAction *) { + foreach(QModelIndex index, _indexList) { + NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); + if(!networkId.isValid()) + continue; + QString nick = nickName(index); + if(nick.isEmpty()) + continue; + BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); + if(!bufferInfo.isValid()) + continue; - -} - -void NetworkModelActionProvider::handleExternalAction(ActionType type, QAction *action) { - Q_UNUSED(type); - if(_receiver && _method) { - if(!QMetaObject::invokeMethod(_receiver, _method, Q_ARG(QAction *, action))) - qWarning() << "NetworkModelActionProvider::handleExternalAction(): Could not invoke slot" << _receiver << _method; + switch(type) { + case NickWhois: + Client::userInput(bufferInfo, QString("/WHOIS %1 %1").arg(nick)); + break; + case NickCtcpVersion: + Client::userInput(bufferInfo, QString("/CTCP %1 VERSION").arg(nick)); + break; + case NickCtcpPing: + Client::userInput(bufferInfo, QString("/CTCP %1 PING").arg(nick)); + break; + case NickCtcpTime: + Client::userInput(bufferInfo, QString("/CTCP %1 TIME").arg(nick)); + break; + case NickCtcpFinger: + Client::userInput(bufferInfo, QString("/CTCP %1 FINGER").arg(nick)); + break; + case NickOp: + Client::userInput(bufferInfo, QString("/OP %1").arg(nick)); + break; + case NickDeop: + Client::userInput(bufferInfo, QString("/DEOP %1").arg(nick)); + break; + case NickVoice: + Client::userInput(bufferInfo, QString("/VOICE %1").arg(nick)); + break; + case NickDevoice: + Client::userInput(bufferInfo, QString("/DEVOICE %1").arg(nick)); + break; + case NickKick: + Client::userInput(bufferInfo, QString("/KICK %1").arg(nick)); + break; + case NickBan: + Client::userInput(bufferInfo, QString("/BAN %1").arg(nick)); + break; + case NickKickBan: + Client::userInput(bufferInfo, QString("/BAN %1").arg(nick)); + Client::userInput(bufferInfo, QString("/KICK %1").arg(nick)); + break; + case NickSwitchTo: + Client::bufferModel()->switchToBuffer(findQueryBuffer(networkId, nick)); + break; + case NickQuery: + Client::userInput(bufferInfo, QString("/QUERY %1").arg(nick)); + break; + default: + qWarning() << "Unhandled nick action"; + } } }