23 #include "serverlistcontextmenu.h" 25 #include "gui/entity/serverlistfilterinfo.h" 26 #include "gui/widgets/serverfilterbuildermenu.h" 27 #include "gui/serverlist.h" 28 #include "core/customservers.h" 29 #include "serverapi/server.h" 30 #include "clipboard.h" 31 #include "strings.hpp" 32 #include <QApplication> 33 #include <QModelIndex> 36 DClass<ServerListContextMenu>
43 QAction *clearAdditionalSorting;
44 QAction *findMissingWads;
46 QAction *openUrlInDefaultBrowser;
49 QAction *removeAdditionalSortingForColumn;
50 QAction *showJoinCommandLine;
51 QAction *sortAdditionallyAscending;
52 QAction *sortAdditionallyDescending;
53 QAction *toggleServerPinned;
56 ServerPtr serverAtIndex;
57 QModelIndex modelIndex;
59 QList<ServerPtr> servers;
62 bool isServerPinned()
const 64 return CustomServers::isServerPinned(
65 CustomServerInfo::fromServer(serverAtIndex.data()));
68 void togglePinAllServers()
70 bool toggleTo = !isServerPinned();
71 foreach (
const ServerPtr &server, servers)
73 CustomServers::setServerPinned(
74 CustomServerInfo::fromServer(server.data()),
76 server->setCustom(toggleTo);
85 const QModelIndex &modelIndex,
86 const QList<ServerPtr> &servers,
90 d->serverAtIndex = serverAtIndex;
93 d->serverFilter = filter;
94 d->modelIndex = modelIndex;
99 ServerListContextMenu::~ServerListContextMenu()
104 QMenu* ServerListContextMenu::createCopyMenu(QWidget* parent)
106 QMenu *copyMenu =
new QMenu(tr(
"Copy"), parent);
107 d->copyAddress = copyMenu->addAction(tr(
"Copy Address"));
109 if (!d->serverAtIndex->email().isEmpty())
111 d->copyEmail = copyMenu->addAction(tr(
"Copy E-Mail"));
114 if (!d->serverAtIndex->webSite().isEmpty())
116 d->copyUrl = copyMenu->addAction(tr(
"Copy URL"));
119 d->copyName = copyMenu->addAction(tr(
"Copy Name"));
124 void ServerListContextMenu::createMembers()
126 d->menu =
new QMenu();
127 this->connect(d->menu, SIGNAL(aboutToHide()), SIGNAL(aboutToHide()));
128 this->connect(d->menu, SIGNAL(triggered(QAction*)), SIGNAL(triggered(QAction*)));
130 d->refresh = d->menu->addAction(tr(
"Refresh"));
131 d->join = d->menu->addAction(tr(
"Join"));
132 d->showJoinCommandLine = d->menu->addAction(tr(
"Show join command line"));
133 d->findMissingWads = d->menu->addAction(tr(
"Find missing WADs"));
136 const QString& webSite = d->serverAtIndex->webSite();
139 if (bShouldAllowOpenUrl)
141 d->openUrlInDefaultBrowser = d->menu->addAction(tr(
"Open URL in browser"));
145 QString pinnedLabel = !d->isServerPinned() ? tr(
"Pin") : tr (
"Unpin");
146 d->toggleServerPinned = d->menu->addAction(pinnedLabel);
149 QMenu* copyMenu = createCopyMenu(d->menu);
150 d->menu->addMenu(copyMenu);
154 if (d->serverAtIndex->isKnown() && !d->filterBuilder->isEmpty())
156 d->menu->addMenu(d->filterBuilder);
160 if(d->serverAtIndex->hasRcon())
162 d->menu->addSeparator();
163 d->rcon = d->menu->addAction(tr(
"Remote Console"));
167 d->menu->addSeparator();
168 if (!d->parent->isSortingByColumn(d->modelIndex.column()))
170 d->sortAdditionallyAscending = d->menu->addAction(tr(
"Sort additionally ascending"));
171 d->sortAdditionallyDescending = d->menu->addAction(tr(
"Sort additionally descending"));
173 if (d->parent->isSortingAdditionallyByColumn(d->modelIndex.column()))
175 d->removeAdditionalSortingForColumn = d->menu->addAction(
176 tr(
"Remove additional sorting for column"));
178 if (d->parent->isAnyColumnSortedAdditionally())
180 d->clearAdditionalSorting = d->menu->addAction(tr(
"Clear additional sorting"));
184 void ServerListContextMenu::initializeMembers()
186 d->clearAdditionalSorting = NULL;
187 d->removeAdditionalSortingForColumn = NULL;
188 d->sortAdditionallyAscending = NULL;
189 d->sortAdditionallyDescending = NULL;
190 d->copyAddress = NULL;
194 d->filterBuilder = NULL;
195 d->findMissingWads = NULL;
198 d->openUrlInDefaultBrowser = NULL;
201 d->showJoinCommandLine = NULL;
202 d->toggleServerPinned = NULL;
205 const QModelIndex &ServerListContextMenu::modelIndex()
const 207 return d->modelIndex;
210 void ServerListContextMenu::popup(
const QPoint& point)
212 d->menu->popup(point);
215 ServerPtr ServerListContextMenu::server()
const 217 return d->serverAtIndex;
220 const QList<ServerPtr> &ServerListContextMenu::servers()
const 227 assert(d->filterBuilder);
228 return d->filterBuilder->filter();
233 if (resultAction == NULL)
239 if(resultAction == d->refresh)
243 else if(resultAction == d->join)
247 else if (resultAction == d->showJoinCommandLine)
249 return ShowJoinCommandLine;
251 else if (resultAction == d->openUrlInDefaultBrowser)
255 else if(resultAction == d->copyAddress)
257 QString addr = QString(
"%1:%2").arg(d->serverAtIndex->address().toString()).arg(d->serverAtIndex->port());
261 else if (resultAction == d->copyEmail)
266 else if(resultAction == d->copyName)
271 else if (resultAction == d->copyUrl)
276 else if(resultAction == d->findMissingWads)
278 return FindMissingWADs;
280 else if(resultAction == d->rcon)
282 return OpenRemoteConsole;
284 else if(resultAction == d->sortAdditionallyAscending)
286 return SortAdditionallyAscending;
288 else if(resultAction == d->sortAdditionallyDescending)
290 return SortAdditionallyDescending;
292 else if(resultAction == d->clearAdditionalSorting)
294 return ClearAdditionalSorting;
296 else if(resultAction == d->removeAdditionalSortingForColumn)
298 return RemoveAdditionalSortingForColumn;
300 else if(resultAction == d->toggleServerPinned)
302 d->togglePinAllServers();
303 return TogglePinServers;
Structure describing server filter.
static void setText(const QString &text)
Sets text both in clipboard and selection modes.
static bool isUrlSafe(const QString &url)
Unsafe URLs begin with file:// and this functions returns false for such URLs.