X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnickview.cpp;h=3153ba8b571d4a39081076f85a952c778c5000a6;hp=c1f0ab8bfb23cd8ed7696b222a4f4ab8dea2f6fd;hb=1aef6bf0d3d2a7ef469b9a9f68ceb891cc8a896c;hpb=2d19986a8bafafec55b5d3b0474f7d76eb5f33b2 diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index c1f0ab8b..3153ba8b 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -40,8 +40,10 @@ NickView::NickView(QWidget *parent) setContextMenuPolicy(Qt::CustomContextMenu); - connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), + connect(this, SIGNAL(customContextMenuRequested(const QPoint&)), this, SLOT(showContextMenu(const QPoint&))); + connect(this, SIGNAL(activated( const QModelIndex& )), + this, SLOT(startQuery( const QModelIndex& ))); } NickView::~NickView() { @@ -67,53 +69,76 @@ void NickView::rowsInserted(const QModelIndex &index, int start, int end) { expandAll(); // FIXME We need to do this more intelligently. Maybe a pimped TreeView? } +QString NickView::nickFromModelIndex(const QModelIndex & index) { + QString nick = index.sibling(index.row(), 0).data().toString(); + return nick; +} + +BufferInfo NickView::bufferInfoFromModelIndex(const QModelIndex & index) { + BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); + return bufferInfo; +} + void NickView::showContextMenu(const QPoint & pos ) { QModelIndex index = indexAt(pos); - QString username = index.sibling(index.row(), 0).data().toString(); - BufferInfo bufferInfo = index.data(NetworkModel::BufferInfoRole).value(); + if(index.data(NetworkModel::ItemTypeRole) != NetworkModel::IrcUserItemType) return; + + QString nick = nickFromModelIndex(index); QMenu nickContextMenu(this); QAction *whoisAction = nickContextMenu.addAction(tr("WHOIS")); QAction *versionAction = nickContextMenu.addAction(tr("VERSION")); - versionAction->setEnabled(false); QAction *pingAction = nickContextMenu.addAction(tr("PING")); - pingAction->setEnabled(false); nickContextMenu.addSeparator(); QMenu *modeMenu = nickContextMenu.addMenu(tr("Modes")); - QAction *opAction = modeMenu->addAction(tr("Op %1").arg(username)); - QAction *deOpAction = modeMenu->addAction(tr("Deop %1").arg(username)); - QAction *voiceAction = modeMenu->addAction(tr("Voice %1").arg(username)); - QAction *deVoiceAction = modeMenu->addAction(tr("Devoice %1").arg(username)); + QAction *opAction = modeMenu->addAction(tr("Op %1").arg(nick)); + QAction *deOpAction = modeMenu->addAction(tr("Deop %1").arg(nick)); + QAction *voiceAction = modeMenu->addAction(tr("Voice %1").arg(nick)); + QAction *deVoiceAction = modeMenu->addAction(tr("Devoice %1").arg(nick)); QMenu *kickBanMenu = nickContextMenu.addMenu(tr("Kick/Ban")); - QAction *kickAction = kickBanMenu->addAction(tr("Kick %1").arg(username)); - QAction *kickBanAction = kickBanMenu->addAction(tr("Kickban %1").arg(username)); + //TODO: add kick message from network identity (kick reason) + QAction *kickAction = kickBanMenu->addAction(tr("Kick %1").arg(nick)); + QAction *kickBanAction = kickBanMenu->addAction(tr("Kickban %1").arg(nick)); + kickBanMenu->setEnabled(false); QAction *ignoreAction = nickContextMenu.addAction(tr("Ignore")); ignoreAction->setEnabled(false); nickContextMenu.addSeparator(); QAction *queryAction = nickContextMenu.addAction(tr("Query")); - queryAction->setEnabled(false); QAction *dccChatAction = nickContextMenu.addAction(tr("DCC-Chat")); dccChatAction->setEnabled(false); QAction *sendFileAction = nickContextMenu.addAction(tr("Send file")); sendFileAction->setEnabled(false); - QAction *result = nickContextMenu.exec(QCursor::pos()); + QAction *action = nickContextMenu.exec(QCursor::pos()); + BufferInfo bufferInfo = bufferInfoFromModelIndex(index); + + if(action == whoisAction) { executeCommand(bufferInfo, QString("/WHOIS %1 %1").arg(nick)); } + else if(action == versionAction) { executeCommand(bufferInfo, QString("/CTCP %1 VERSION").arg(nick)); } + else if(action == pingAction) { executeCommand(bufferInfo, QString("/CTCP %1 PING ").arg(nick)); } + + else if(action == opAction) { executeCommand(bufferInfo, QString("/OP %1").arg(nick)); } + else if(action == deOpAction) { executeCommand(bufferInfo, QString("/DEOP %1").arg(nick)); } + else if(action == voiceAction) { executeCommand(bufferInfo, QString("/VOICE %1").arg(nick)); } + else if(action == deVoiceAction) { executeCommand(bufferInfo, QString("/DEVOICE %1").arg(nick)); } - if(result == whoisAction) { Client::instance()->userInput(bufferInfo, "/WHOIS " + username + " " + username); } - else if(result == versionAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " VERSION"); } - else if(result == pingAction) { Client::instance()->userInput(bufferInfo, "/CTCP " + username + " PING"); } + else if(action == kickAction) { executeCommand(bufferInfo, QString("/KICK %1").arg(nick)); } + else if(action == kickBanAction) { executeCommand(bufferInfo, QString("/KICKBAN %1").arg(nick)); } + else if(action == queryAction) { executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); } - else if(result == opAction) { Client::instance()->userInput(bufferInfo, "/OP " + username); } - else if(result == deOpAction) { Client::instance()->userInput(bufferInfo, "/DEOP " + username); } - else if(result == voiceAction) { Client::instance()->userInput(bufferInfo, "/VOICE " + username); } - else if(result == deVoiceAction) { Client::instance()->userInput(bufferInfo, "/DEVOICE " + username); } +} + +void NickView::startQuery(const QModelIndex & index) { + QString nick = nickFromModelIndex(index); + BufferInfo bufferInfo = bufferInfoFromModelIndex(index); + executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); +} - else if(result == kickAction) { Client::instance()->userInput(bufferInfo, "/KICK " + username); } - else if(result == kickBanAction) { Client::instance()->userInput(bufferInfo, "/KICKBAN " + username); } +void NickView::executeCommand(const BufferInfo & bufferInfo, const QString & command) { + Client::instance()->userInput(bufferInfo, command); }