23 #include "serverfilterbuildermenu.h"
25 #include "gui/entity/serverlistfilterinfo.h"
26 #include "serverapi/server.h"
29 DClass<ServerFilterBuilderMenu>
36 static void addIfNotContains(QStringList &target,
const QString &candidate)
38 if (!target.contains(candidate, Qt::CaseInsensitive))
47 : QMenu(tr("Build server filter ..."), parent)
50 d->gameMode = server.gameMode().name();
51 d->maxPing = server.ping();
53 addAction(
this, tr(
"Show only servers with ping lower than %1").arg(d->maxPing),
54 SLOT(applyPingFilter()));
55 if (!d->filter.gameModes.contains(d->gameMode, Qt::CaseInsensitive))
57 addAction(
this, tr(
"Filter by game mode \"%1\"").arg(d->gameMode),
58 SLOT(applyGameModeFilter()));
60 if (!d->filter.gameModesExcluded.contains(d->gameMode, Qt::CaseInsensitive))
62 addAction(
this, tr(
"Hide game mode \"%1\"").arg(d->gameMode),
63 SLOT(applyGameModeExcludedFilter()));
66 QMenu *includeWads =
new QMenu(tr(
"Include WAD ..."),
this);
67 QMenu *excludeWads =
new QMenu(tr(
"Exclude WAD ..."),
this);
69 QStringList wads = server.allWadNames();
70 for (
const QString &wad : wads)
72 if (!d->filter.wadsExcluded.contains(wad, Qt::CaseInsensitive))
73 mkExcludeWadAction(excludeWads, wad);
74 if (!d->filter.wads.contains(wad, Qt::CaseInsensitive))
75 mkIncludeWadAction(includeWads, wad);
78 if (!excludeWads->isEmpty())
80 if (!includeWads->isEmpty())
84 ServerFilterBuilderMenu::~ServerFilterBuilderMenu()
88 QAction *ServerFilterBuilderMenu::addAction(QMenu *menu,
const QString &text,
const char *slot)
90 auto action =
new QAction(menu);
91 action->setText(text);
92 this->connect(action, SIGNAL(triggered()), slot);
93 menu->addAction(action);
97 void ServerFilterBuilderMenu::applyGameModeExcludedFilter()
99 if (!d->filter.gameModesExcluded.contains(d->gameMode, Qt::CaseInsensitive))
100 d->filter.gameModesExcluded << d->gameMode;
103 void ServerFilterBuilderMenu::applyGameModeFilter()
105 if (!d->filter.gameModes.contains(d->gameMode, Qt::CaseInsensitive))
106 d->filter.gameModes << d->gameMode;
109 void ServerFilterBuilderMenu::applyPingFilter()
111 d->filter.maxPing = d->maxPing;
114 void ServerFilterBuilderMenu::excludeWadFromAction()
116 auto action =
static_cast<QAction *
>(sender());
125 void ServerFilterBuilderMenu::includeWadFromAction()
127 auto action =
static_cast<QAction *
>(sender());
131 QAction *ServerFilterBuilderMenu::mkExcludeWadAction(QMenu *menu,
const QString &wadName)
133 return addAction(menu, wadName, SLOT(excludeWadFromAction()));
136 QAction *ServerFilterBuilderMenu::mkIncludeWadAction(QMenu *menu,
const QString &wadName)
138 return addAction(menu, wadName, SLOT(includeWadFromAction()));