24 #include <QHBoxLayout>
26 #include <QMouseEvent>
29 #include "serversstatuswidget.h"
30 #include "serverapi/masterclient.h"
31 #include "serverapi/playerslist.h"
32 #include "serverapi/server.h"
34 ServersStatusWidget::ServersStatusWidget(
const QPixmap &icon,
MasterClient *serverList) : QLabel(),
35 bMasterIsEnabled(false), icon(icon), numBots(0), numPlayers(0), serverList(serverList)
38 QImage iconImage = icon.toImage();
39 int width = iconImage.width();
40 int height = iconImage.height();
41 for (
int x = 0; x < width; ++x)
43 for (
int y = 0; y < height; ++y)
45 QRgb pixel = iconImage.pixel(x, y);
46 int alpha = qAlpha(pixel);
47 int gray = qGray(pixel);
49 pixel = qRgba(gray, gray, gray, alpha);
51 iconImage.setPixel(x, y, pixel);
55 iconDisabled = QPixmap::fromImage(iconImage);
59 setFrameShape(QFrame::Panel);
60 setFrameShadow(QFrame::Sunken);
62 setFrameShape(QFrame::NoFrame);
66 setToolTip(tr(
"Players-Bots Servers"));
73 connect(serverList, SIGNAL(listUpdated()),
this, SLOT(registerServers()));
76 void ServersStatusWidget::addServer(
const ServerPtr &server)
80 numBots += players.numBots();
84 void ServersStatusWidget::mousePressEvent(QMouseEvent* event)
86 if (event->button() == Qt::LeftButton)
88 emit clicked(serverList);
92 void ServersStatusWidget::paintEvent(QPaintEvent *event)
95 p.setRenderHint(QPainter::SmoothPixmapTransform);
96 p.drawPixmap(2, 2, 18, 18, bMasterIsEnabled ? icon : iconDisabled);
99 QLabel::paintEvent(event);
102 void ServersStatusWidget::registerServers()
108 if (serverList != NULL)
110 foreach(ServerPtr server, serverList->servers())
112 connect(server.data(), SIGNAL(begunRefreshing(ServerPtr)),
this, SLOT(removeServer(ServerPtr)), Qt::DirectConnection);
113 connect(server.data(), SIGNAL(updated(ServerPtr,
int)),
this, SLOT(addServer(ServerPtr)), Qt::DirectConnection);
118 void ServersStatusWidget::removeServer(
const ServerPtr &server)
122 numBots -= players.numBots();
128 this->bMasterIsEnabled = bEnabled;
132 void ServersStatusWidget::updateDisplay()
134 if (bMasterIsEnabled)
136 setText(QString(
"%1-%2 %3").arg(numPlayers).arg(numBots).arg(serverList != NULL ? serverList->numServers() : 0));
Abstract base for all MasterClients.
int numClients() const
Overall number of people and bots on the server.