+
+void ContextMenuActionProvider::addIgnoreMenu(QMenu *menu, const QString &hostmask, const QMap<QString, bool> &ignoreMap) {
+ QMenu *ignoreMenu = _nickIgnoreMenuAction->menu();
+ ignoreMenu->clear();
+ QString nick = nickFromMask(hostmask);
+ QString ident = userFromMask(hostmask);
+ QString host = hostFromMask(hostmask);
+ QString domain = host;
+ QRegExp domainRx = QRegExp("(\\.[^.]+\\.\\w+)$");
+ if(domainRx.indexIn(host) != -1)
+ domain = domainRx.cap(1);
+ // we can't rely on who-data
+ // if we don't have the data, we skip actions where we would need it
+ bool haveWhoData = !ident.isEmpty() && !host.isEmpty();
+
+
+ ignoreMenu->addAction(tr("Add Ignore Rule"))->setEnabled(false);
+
+ if(haveWhoData) {
+ action(NickIgnoreUser)->setText(QString("*!%1@%2").arg(ident, host));
+ action(NickIgnoreHost)->setText(QString("*!*@%1").arg(host));
+ action(NickIgnoreDomain)->setText(domain.at(0) == '.' ? QString("*!%1@*%2").arg(ident, domain)
+ : QString("*!%1@%2").arg(ident, domain));
+
+ if(!ignoreMap.contains(action(NickIgnoreUser)->text()))
+ ignoreMenu->addAction(action(NickIgnoreUser));
+ if(!ignoreMap.contains(action(NickIgnoreHost)->text()))
+ ignoreMenu->addAction(action(NickIgnoreHost));
+ if(!ignoreMap.contains(action(NickIgnoreDomain)->text()))
+ ignoreMenu->addAction(action(NickIgnoreDomain));
+ }
+ ignoreMenu->addAction(action(NickIgnoreCustom));
+ ignoreMenu->addSeparator();
+
+ if(haveWhoData) {
+ QMap<QString, bool>::const_iterator ruleIter = ignoreMap.begin();
+ int counter = 0;
+ if(!ignoreMap.isEmpty())
+ ignoreMenu->addAction(tr("Existing Rules"))->setEnabled(false);
+ while(ruleIter != ignoreMap.constEnd()) {
+ if(counter < 5) {
+ ActionType type = static_cast<ActionType>(NickIgnoreToggleEnabled0 + counter*0x100000);
+ Action *act = action(type);
+ act->setText(ruleIter.key());
+ act->setChecked(ruleIter.value());
+ ignoreMenu->addAction(act);
+ }
+ counter++;
+ ruleIter++;
+ }
+ if(counter)
+ ignoreMenu->addSeparator();
+ }
+ ignoreMenu->addAction(action(ShowIgnoreList));
+ addAction(_nickIgnoreMenuAction, menu);
+}