X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnetworkmodelcontroller.cpp;h=cb882f81b1dd3df5c0ce8f5f02d1c19deafc642f;hp=8a1d90a82ae5a9ee5a699ee486203299f4090acb;hb=f19fea582ace1d8f3dfe29c1096c48758079e56e;hpb=4e9b713cf4941e9d1d8341ed2dea3cbdf4a22a8a diff --git a/src/uisupport/networkmodelcontroller.cpp b/src/uisupport/networkmodelcontroller.cpp index 8a1d90a8..cb882f81 100644 --- a/src/uisupport/networkmodelcontroller.cpp +++ b/src/uisupport/networkmodelcontroller.cpp @@ -35,6 +35,8 @@ #include "clientidentity.h" #include "network.h" #include "util.h" +#include "clientignorelistmanager.h" +#include "client.h" NetworkModelController::NetworkModelController(QObject *parent) : QObject(parent), @@ -115,7 +117,7 @@ QString NetworkModelController::nickName(const QModelIndex &index) const { BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); if(!bufferInfo.isValid()) return QString(); - if(!bufferInfo.type() == BufferInfo::QueryBuffer) + if(bufferInfo.type() != BufferInfo::QueryBuffer) return QString(); return bufferInfo.bufferName(); // FIXME this might break with merged queries maybe @@ -232,11 +234,14 @@ void NetworkModelController::handleBufferAction(ActionType type, QAction *) { removeBuffers(indexList()); } else { + QList bufferList; // create temp list because model indexes might change foreach(QModelIndex index, indexList()) { BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); - if(!bufferInfo.isValid()) - continue; + if(bufferInfo.isValid()) + bufferList << bufferInfo; + } + foreach(BufferInfo bufferInfo, bufferList) { switch(type) { case BufferJoin: Client::userInput(bufferInfo, QString("/JOIN %1").arg(bufferInfo.bufferName())); @@ -273,6 +278,8 @@ void NetworkModelController::handleHideAction(ActionType type, QAction *action) filter |= Message::Mode; if(NetworkModelController::action(HideDayChange)->isChecked()) filter |= Message::DayChange; + if(NetworkModelController::action(HideTopic)->isChecked()) + filter |= Message::Topic; switch(type) { case HideJoin: @@ -281,6 +288,7 @@ void NetworkModelController::handleHideAction(ActionType type, QAction *action) case HideNick: case HideMode: case HideDayChange: + case HideTopic: if(_messageFilter) BufferSettings(_messageFilter->idString()).setMessageFilter(filter); else { @@ -339,14 +347,14 @@ void NetworkModelController::handleGeneralAction(ActionType type, QAction *actio break; case ShowIgnoreList: if(networkId.isValid()) - emit showIgnoreList(networkId); + emit showIgnoreList(QString()); break; default: break; } } -void NetworkModelController::handleNickAction(ActionType type, QAction *) { +void NetworkModelController::handleNickAction(ActionType type, QAction *action) { foreach(QModelIndex index, indexList()) { NetworkId networkId = index.data(NetworkModel::NetworkIdRole).value(); if(!networkId.isValid()) @@ -358,6 +366,9 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *) { if(!bufferInfo.isValid()) continue; + // the validity of that cast is checked on contextmenu creation, take care + IrcUser *ircUser = qobject_cast(index.data(NetworkModel::IrcUserRole).value()); + switch(type) { case NickWhois: Client::userInput(bufferInfo, QString("/WHOIS %1 %1").arg(nick)); @@ -402,6 +413,38 @@ void NetworkModelController::handleNickAction(ActionType type, QAction *) { case NickQuery: Client::userInput(bufferInfo, QString("/QUERY %1").arg(nick)); break; + case NickIgnoreUser: + Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore, + action->text(), + false, IgnoreListManager::SoftStrictness, + IgnoreListManager::NetworkScope, + ircUser->network()->networkName(), true); + break; + case NickIgnoreHost: + Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore, + action->text(), + false, IgnoreListManager::SoftStrictness, + IgnoreListManager::NetworkScope, + ircUser->network()->networkName(), true); + break; + case NickIgnoreDomain: + Client::ignoreListManager()->requestAddIgnoreListItem(IgnoreListManager::SenderIgnore, + action->text(), + false, IgnoreListManager::SoftStrictness, + IgnoreListManager::NetworkScope, + ircUser->network()->networkName(), true); + break; + case NickIgnoreCustom: + // forward that to mainwin since we can access the settingspage only from there + emit showIgnoreList(ircUser->hostmask()); + break; + case NickIgnoreToggleEnabled0: + case NickIgnoreToggleEnabled1: + case NickIgnoreToggleEnabled2: + case NickIgnoreToggleEnabled3: + case NickIgnoreToggleEnabled4: + Client::ignoreListManager()->requestToggleIgnoreRule(action->text()); + break; default: qWarning() << "Unhandled nick action"; }