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))
49 : QMenu(tr("Build server filter ..."), parent)
52 d->gameMode = server.gameMode().name();
55 addAction(
this, tr(
"Show only servers with ping lower than %1").arg(d->maxPing),
56 SLOT(applyPingFilter()));
57 if (!d->filter.gameModes.contains(d->gameMode, Qt::CaseInsensitive))
59 addAction(
this, tr(
"Filter by game mode \"%1\"").arg(d->gameMode),
60 SLOT(applyGameModeFilter()));
62 if (!d->filter.gameModesExcluded.contains(d->gameMode, Qt::CaseInsensitive))
64 addAction(
this, tr(
"Hide game mode \"%1\"").arg(d->gameMode),
65 SLOT(applyGameModeExcludedFilter()));
68 QMenu* includeWads =
new QMenu(tr(
"Include WAD ..."),
this);
69 QMenu* excludeWads =
new QMenu(tr(
"Exclude WAD ..."),
this);
71 QStringList wads = server.allWadNames();
72 foreach (
const QString& wad, wads)
74 if (!d->filter.wadsExcluded.contains(wad, Qt::CaseInsensitive))
76 mkExcludeWadAction(excludeWads, wad);
78 if (!d->filter.wads.contains(wad, Qt::CaseInsensitive))
80 mkIncludeWadAction(includeWads, wad);
84 if (!excludeWads->isEmpty())
88 if (!includeWads->isEmpty())
94 ServerFilterBuilderMenu::~ServerFilterBuilderMenu()
98 QAction* ServerFilterBuilderMenu::addAction(QMenu* menu,
const QString& text,
const char* slot)
100 QAction* action =
new QAction(menu);
101 action->setText(text);
102 this->connect(action, SIGNAL(triggered()), slot);
103 menu->addAction(action);
107 void ServerFilterBuilderMenu::applyGameModeExcludedFilter()
109 if (!d->filter.gameModesExcluded.contains(d->gameMode, Qt::CaseInsensitive))
111 d->filter.gameModesExcluded << d->gameMode;
115 void ServerFilterBuilderMenu::applyGameModeFilter()
117 if (!d->filter.gameModes.contains(d->gameMode, Qt::CaseInsensitive))
119 d->filter.gameModes << d->gameMode;
123 void ServerFilterBuilderMenu::applyPingFilter()
125 d->filter.maxPing = d->maxPing;
128 void ServerFilterBuilderMenu::excludeWadFromAction()
130 QAction* action =
static_cast<QAction*
>(sender());
139 void ServerFilterBuilderMenu::includeWadFromAction()
141 QAction* action =
static_cast<QAction*
>(sender());
145 QAction* ServerFilterBuilderMenu::mkExcludeWadAction(QMenu* menu,
const QString& wadName)
147 return addAction(menu, wadName, SLOT(excludeWadFromAction()));
150 QAction* ServerFilterBuilderMenu::mkIncludeWadAction(QMenu* menu,
const QString& wadName)
152 return addAction(menu, wadName, SLOT(includeWadFromAction()));
Structure describing server filter.
unsigned maxPing
Maximum allowed ping.
A representation of a server for a given game.