23 #include "serverlistcontextmenu.h" 25 #include "clipboard.h" 26 #include "customservers.h" 27 #include "gui/entity/serverlistfilterinfo.h" 28 #include "gui/serverlist.h" 29 #include "gui/widgets/serverfilterbuildermenu.h" 30 #include "serverapi/server.h" 31 #include "strings.hpp" 33 #include <QApplication> 34 #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 for (
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())
110 d->copyEmail = copyMenu->addAction(tr(
"Copy E-Mail"));
112 if (!d->serverAtIndex->webSite().isEmpty())
113 d->copyUrl = copyMenu->addAction(tr(
"Copy URL"));
115 d->copyName = copyMenu->addAction(tr(
"Copy Name"));
120 void ServerListContextMenu::createMembers()
122 d->menu =
new QMenu();
123 this->connect(d->menu, SIGNAL(aboutToHide()), SIGNAL(aboutToHide()));
124 this->connect(d->menu, SIGNAL(triggered(QAction*)), SIGNAL(triggered(QAction*)));
126 d->refresh = d->menu->addAction(tr(
"Refresh"));
127 d->join = d->menu->addAction(tr(
"Join"));
128 d->showJoinCommandLine = d->menu->addAction(tr(
"Show join command line"));
129 d->findMissingWads = d->menu->addAction(tr(
"Find missing WADs"));
132 const QString &webSite = d->serverAtIndex->webSite();
135 if (bShouldAllowOpenUrl)
136 d->openUrlInDefaultBrowser = d->menu->addAction(tr(
"Open URL in browser"));
139 QString pinnedLabel = !d->isServerPinned() ? tr(
"Pin") : tr (
"Unpin");
140 d->toggleServerPinned = d->menu->addAction(pinnedLabel);
143 QMenu *copyMenu = createCopyMenu(d->menu);
144 d->menu->addMenu(copyMenu);
148 if (d->serverAtIndex->isKnown() && !d->filterBuilder->isEmpty())
149 d->menu->addMenu(d->filterBuilder);
152 if (d->serverAtIndex->hasRcon())
154 d->menu->addSeparator();
155 d->rcon = d->menu->addAction(tr(
"Remote Console"));
159 d->menu->addSeparator();
160 if (!d->parent->isSortingByColumn(d->modelIndex.column()))
162 d->sortAdditionallyAscending = d->menu->addAction(tr(
"Sort additionally ascending"));
163 d->sortAdditionallyDescending = d->menu->addAction(tr(
"Sort additionally descending"));
165 if (d->parent->isSortingAdditionallyByColumn(d->modelIndex.column()))
167 d->removeAdditionalSortingForColumn = d->menu->addAction(
168 tr(
"Remove additional sorting for column"));
170 if (d->parent->isAnyColumnSortedAdditionally())
171 d->clearAdditionalSorting = d->menu->addAction(tr(
"Clear additional sorting"));
174 void ServerListContextMenu::initializeMembers()
176 d->clearAdditionalSorting =
nullptr;
177 d->removeAdditionalSortingForColumn =
nullptr;
178 d->sortAdditionallyAscending =
nullptr;
179 d->sortAdditionallyDescending =
nullptr;
180 d->copyAddress =
nullptr;
181 d->copyEmail =
nullptr;
182 d->copyName =
nullptr;
183 d->copyUrl =
nullptr;
184 d->filterBuilder =
nullptr;
185 d->findMissingWads =
nullptr;
188 d->openUrlInDefaultBrowser =
nullptr;
190 d->refresh =
nullptr;
191 d->showJoinCommandLine =
nullptr;
192 d->toggleServerPinned =
nullptr;
195 const QModelIndex &ServerListContextMenu::modelIndex()
const 197 return d->modelIndex;
200 void ServerListContextMenu::popup(
const QPoint &point)
202 d->menu->popup(point);
205 ServerPtr ServerListContextMenu::server()
const 207 return d->serverAtIndex;
210 const QList<ServerPtr> &ServerListContextMenu::servers()
const 217 assert(d->filterBuilder);
218 return d->filterBuilder->filter();
223 if (resultAction ==
nullptr)
227 if (resultAction == d->refresh)
229 else if (resultAction == d->join)
231 else if (resultAction == d->showJoinCommandLine)
232 return ShowJoinCommandLine;
233 else if (resultAction == d->openUrlInDefaultBrowser)
235 else if (resultAction == d->copyAddress)
237 QString addr = QString(
"%1:%2").arg(d->serverAtIndex->address().toString()).arg(d->serverAtIndex->port());
241 else if (resultAction == d->copyEmail)
246 else if (resultAction == d->copyName)
251 else if (resultAction == d->copyUrl)
256 else if (resultAction == d->findMissingWads)
257 return FindMissingWADs;
258 else if (resultAction == d->rcon)
259 return OpenRemoteConsole;
260 else if (resultAction == d->sortAdditionallyAscending)
261 return SortAdditionallyAscending;
262 else if (resultAction == d->sortAdditionallyDescending)
263 return SortAdditionallyDescending;
264 else if (resultAction == d->clearAdditionalSorting)
265 return ClearAdditionalSorting;
266 else if (resultAction == d->removeAdditionalSortingForColumn)
267 return RemoveAdditionalSortingForColumn;
268 else if (resultAction == d->toggleServerPinned)
270 d->togglePinAllServers();
271 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.