serverdetailsdock.cpp
1 //------------------------------------------------------------------------------
2 // serverdetailsdock.cpp
3 //------------------------------------------------------------------------------
4 //
5 // This library is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU Lesser General Public
7 // License as published by the Free Software Foundation; either
8 // version 2.1 of the License, or (at your option) any later version.
9 //
10 // This library is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 // Lesser General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public
16 // License along with this library; if not, write to the Free Software
17 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
18 // 02110-1301 USA
19 //
20 //------------------------------------------------------------------------------
21 // Copyright (C) 2014 Braden "Blzut3" Obrzut <admin@maniacsvault.net>
22 //------------------------------------------------------------------------------
23 #include "serverdetailsdock.h"
24 #include "ui_serverdetailsdock.h"
25 
26 #include "serverapi/playerslist.h"
27 #include "serverapi/server.h"
28 #include "serverapi/serverptr.h"
30 #include "serverapi/tooltips/servertooltip.h"
31 #include "serverapi/tooltips/tooltipgenerator.h"
32 
33 #include <QAction>
34 #include <QScopedPointer>
35 
36 DClass<ServerDetailsDock> : public Ui::ServerDetailsDock
37 {
38 public:
39  QString bold(const QString &inner) const
40  {
41  return QString("<b>%1</b>").arg(inner);
42  }
43 
44  QString div(const QString &inner) const
45  {
46  return QString(R"(<div style="white-space: pre;">%1</div>)")
47  .arg(inner);
48  }
49 
50  QString italic(const QString &inner) const
51  {
52  return QString("<i>%1</i>").arg(inner);
53  }
54 };
55 
56 DPointered(ServerDetailsDock)
57 
58 ServerDetailsDock::ServerDetailsDock(QWidget *parent) : QDockWidget(parent)
59 {
60  d->setupUi(this);
61  this->toggleViewAction()->setIcon(QIcon(":/icons/server_details.png"));
62 
63  clear();
64 }
65 
66 ServerDetailsDock::~ServerDetailsDock()
67 {
68 }
69 
70 void ServerDetailsDock::clear()
71 {
72  d->lblServer->setText(d->italic(tr("No server selected.")));
73  d->generalArea->setText("");
74  d->playersArea->setText("");
75  d->dmflagsArea->setText("");
76 }
77 
78 void ServerDetailsDock::displaySelection(QList<ServerPtr> &selectedServers)
79 {
80  ServerPtr server = selectServer(selectedServers);
81  if (server == nullptr)
82  {
83  clear();
84  return;
85  }
86 
87  d->lblServer->setText(server->name().toHtmlEscaped());
88  QScopedPointer<TooltipGenerator> tooltipGenerator(server->tooltipGenerator());
89 
90  QString generalHtml;
91  generalHtml += tooltipGenerator->generalInfoHTML();
92  generalHtml += tr("<b>Address:</b> %1\n").arg(server->addressWithPort());
93  const QString portInfo = ServerTooltip::createPortToolTip(server);
94  if (!portInfo.isEmpty())
95  generalHtml += "\n" + portInfo + "\n";
96  generalHtml = d->div(generalHtml);
97  generalHtml += d->div(server->customDetails());
98  d->generalArea->setText(generalHtml);
99 
100  QString playersHtml;
101  playersHtml += d->div(tooltipGenerator->gameInfoTableHTML());
102  if (server->players().numClients() != 0)
103  playersHtml += d->div(tooltipGenerator->playerTableHTML());
104  else
105  playersHtml += d->bold(tr("No players on this server."));
106 
107  d->playersArea->setText(playersHtml);
108 
109  QString dmflagsHtml = tooltipGenerator->dmflagsHTML();
110  if (dmflagsHtml.isEmpty())
111  dmflagsHtml = d->bold(tr("DMFlags unknown or no DMFlags set."));
112  d->dmflagsArea->setText(dmflagsHtml);
113 }
114 
115 ServerPtr ServerDetailsDock::selectServer(QList<ServerPtr> &selectedServers)
116 {
117  if (selectedServers.count() == 0)
118  return ServerPtr();
119  if (!selectedServers[0]->isKnown())
120  return ServerPtr();
121  return selectedServers[0];
122 }