serverdetailsdock.cpp
1 //------------------------------------------------------------------------------
2 // serverdetailsdock.cpp
3 //------------------------------------------------------------------------------
4 //
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
9 //
10 // This program 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
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU General Public License
16 // along with this program; 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 "Blzut3" <admin@maniacsvault.net>
22 //------------------------------------------------------------------------------
23 
24 #include <QBoxLayout>
25 
26 #include "serverdetailsdock.h"
27 #include "ui_serverdetailsdock.h"
28 #include "serverapi/playerslist.h"
29 #include "serverapi/server.h"
30 #include "serverapi/serverptr.h"
32 #include "serverapi/tooltips/tooltipgenerator.h"
33 
34 DClass<ServerDetailsDock> : public Ui::ServerDetailsDock
35 {
36 };
37 
38 DPointered(ServerDetailsDock)
39 
40 ServerDetailsDock::ServerDetailsDock(QWidget *parent) : QDockWidget(parent)
41 {
42  d->setupUi(this);
43  this->toggleViewAction()->setIcon(QIcon(":/icons/server_details.png"));
44 
45  clear();
46 }
47 
48 ServerDetailsDock::~ServerDetailsDock()
49 {
50 }
51 
52 void ServerDetailsDock::clear()
53 {
54  d->lblServer->setText("");
55  d->sbArea->setText("");
56  d->detailsArea->setText("");
57 }
58 
59 void ServerDetailsDock::displaySelection(QList<ServerPtr> &selectedServers)
60 {
61  ServerPtr server = selectServer(selectedServers);
62  if (server == NULL)
63  {
64  clear();
65  return;
66  }
67 
68  d->lblServer->setText(server->name());
69  TooltipGenerator* tooltipGenerator = server->tooltipGenerator();
70  if(server->players().numClients() != 0)
71  d->sbArea->setText(tooltipGenerator->playerTableHTML());
72  else
73  d->sbArea->setText(QString());
74  d->detailsArea->setText(QString("<div>%1</div>%2").arg(server->customDetails()).arg(tooltipGenerator->dmflagsHTML()));
75  delete tooltipGenerator;
76 }
77 
78 void ServerDetailsDock::reorientContentsBasingOnDimensions()
79 {
80  const int TOPTOBOTTOM_PREFERENCE_THRESHOLD = 100;
81  if (height() + TOPTOBOTTOM_PREFERENCE_THRESHOLD > width())
82  {
83  static_cast<QBoxLayout*>(d->dataLayout)->setDirection(QBoxLayout::TopToBottom);
84  }
85  else
86  {
87  static_cast<QBoxLayout*>(d->dataLayout)->setDirection(QBoxLayout::LeftToRight);
88  }
89 }
90 
91 void ServerDetailsDock::resizeEvent(QResizeEvent *event)
92 {
93  reorientContentsBasingOnDimensions();
94 }
95 
96 ServerPtr ServerDetailsDock::selectServer(QList<ServerPtr> &selectedServers)
97 {
98  if (selectedServers.count() == 0)
99  {
100  return ServerPtr();
101  }
102  if (!selectedServers[0]->isKnown())
103  {
104  return ServerPtr();
105  }
106  return selectedServers[0];
107 }
108 
virtual QString dmflagsHTML()
DMFLAGS listing for the current server.
virtual QString playerTableHTML()
Player table that is created when cursor hovers over players column.