23 #include "serverlistcontextmenu.h" 25 #include "gui/entity/serverlistfilterinfo.h" 26 #include "gui/widgets/serverfilterbuildermenu.h" 27 #include "gui/serverlist.h" 28 #include "serverapi/server.h" 30 #include <QApplication> 32 #include <QModelIndex> 35 DClass<ServerListContextMenu>
42 QAction *clearAdditionalSorting;
43 QAction *findMissingWads;
45 QAction *openUrlInDefaultBrowser;
48 QAction *removeAdditionalSortingForColumn;
49 QAction *showJoinCommandLine;
50 QAction *sortAdditionallyAscending;
51 QAction *sortAdditionallyDescending;
55 QModelIndex modelIndex;
63 const QModelIndex &modelIndex,
ServerList *parent)
68 d->serverFilter = filter;
69 d->modelIndex = modelIndex;
74 ServerListContextMenu::~ServerListContextMenu()
79 QMenu* ServerListContextMenu::createCopyMenu(QWidget* parent)
81 QMenu *copyMenu =
new QMenu(tr(
"Copy"), parent);
82 d->copyAddress = copyMenu->addAction(tr(
"Copy Address"));
84 if (!d->pServer->email().isEmpty())
86 d->copyEmail = copyMenu->addAction(tr(
"Copy E-Mail"));
89 if (!d->pServer->webSite().isEmpty())
91 d->copyUrl = copyMenu->addAction(tr(
"Copy URL"));
94 d->copyName = copyMenu->addAction(tr(
"Copy Name"));
99 void ServerListContextMenu::createMembers()
101 d->menu =
new QMenu();
102 this->connect(d->menu, SIGNAL(aboutToHide()), SIGNAL(aboutToHide()));
103 this->connect(d->menu, SIGNAL(triggered(QAction*)), SIGNAL(triggered(QAction*)));
105 d->refresh = d->menu->addAction(tr(
"Refresh"));
106 d->join = d->menu->addAction(tr(
"Join"));
107 d->showJoinCommandLine = d->menu->addAction(tr(
"Show join command line"));
108 d->findMissingWads = d->menu->addAction(tr(
"Find missing WADs"));
111 const QString& webSite = d->pServer->webSite();
114 if (bShouldAllowOpenUrl)
116 d->openUrlInDefaultBrowser = d->menu->addAction(tr(
"Open URL in browser"));
120 QMenu* copyMenu = createCopyMenu(d->menu);
121 d->menu->addMenu(copyMenu);
125 if (d->pServer->isKnown() && !d->filterBuilder->isEmpty())
127 d->menu->addMenu(d->filterBuilder);
131 if(d->pServer->hasRcon())
133 d->menu->addSeparator();
134 d->rcon = d->menu->addAction(tr(
"Remote Console"));
138 d->menu->addSeparator();
139 if (!d->parent->isSortingByColumn(d->modelIndex.column()))
141 d->sortAdditionallyAscending = d->menu->addAction(tr(
"Sort additionally ascending"));
142 d->sortAdditionallyDescending = d->menu->addAction(tr(
"Sort additionally descending"));
144 if (d->parent->isSortingAdditionallyByColumn(d->modelIndex.column()))
146 d->removeAdditionalSortingForColumn = d->menu->addAction(
147 tr(
"Remove additional sorting for column"));
149 if (d->parent->isAnyColumnSortedAdditionally())
151 d->clearAdditionalSorting = d->menu->addAction(tr(
"Clear additional sorting"));
155 void ServerListContextMenu::initializeMembers()
157 d->clearAdditionalSorting = NULL;
158 d->removeAdditionalSortingForColumn = NULL;
159 d->sortAdditionallyAscending = NULL;
160 d->sortAdditionallyDescending = NULL;
161 d->copyAddress = NULL;
165 d->filterBuilder = NULL;
166 d->findMissingWads = NULL;
169 d->openUrlInDefaultBrowser = NULL;
172 d->showJoinCommandLine = NULL;
175 const QModelIndex &ServerListContextMenu::modelIndex()
const 177 return d->modelIndex;
180 void ServerListContextMenu::popup(
const QPoint& point)
182 d->menu->popup(point);
185 ServerPtr ServerListContextMenu::server()
const 192 assert(d->filterBuilder);
193 return d->filterBuilder->filter();
198 if (resultAction == NULL)
204 if(resultAction == d->refresh)
208 else if(resultAction == d->join)
212 else if (resultAction == d->showJoinCommandLine)
214 return ShowJoinCommandLine;
216 else if (resultAction == d->openUrlInDefaultBrowser)
220 else if(resultAction == d->copyAddress)
222 QString addr = QString(
"%1:%2").arg(d->pServer->address().toString()).arg(d->pServer->port());
223 QApplication::clipboard()->setText(addr);
226 else if (resultAction == d->copyEmail)
228 QApplication::clipboard()->setText(d->pServer->email());
231 else if(resultAction == d->copyName)
233 QApplication::clipboard()->setText(d->pServer->name());
236 else if (resultAction == d->copyUrl)
238 QApplication::clipboard()->setText(d->pServer->webSite());
241 else if(resultAction == d->findMissingWads)
243 return FindMissingWADs;
245 else if(resultAction == d->rcon)
247 return OpenRemoteConsole;
249 else if(resultAction == d->sortAdditionallyAscending)
251 return SortAdditionallyAscending;
253 else if(resultAction == d->sortAdditionallyDescending)
255 return SortAdditionallyDescending;
257 else if(resultAction == d->clearAdditionalSorting)
259 return ClearAdditionalSorting;
261 else if(resultAction == d->removeAdditionalSortingForColumn)
263 return RemoveAdditionalSortingForColumn;
Structure describing server filter.
static bool isUrlSafe(const QString &url)
Unsafe URLs begin with file:// and this functions returns false for such URLs.