25 #include <QHBoxLayout>
27 #include <QMouseEvent>
30 #include "gui/serverlist.h"
31 #include "plugins/engineplugin.h"
32 #include "serverapi/masterclient.h"
33 #include "serverapi/playerslist.h"
34 #include "serverapi/server.h"
35 #include "serverapi/serverlistcounttracker.h"
36 #include "serversstatuswidget.h"
39 : QLabel(), enabled(false), icon(plugin->icon())
41 this->plugin = plugin;
44 this->countTracker->setPluginFilter(plugin);
45 this->serverList = serverList;
47 countTracker->connect(serverList, SIGNAL(serverRegistered(ServerPtr)),
48 SLOT(registerServer(ServerPtr)));
49 countTracker->connect(serverList, SIGNAL(serverDeregistered(ServerPtr)),
50 SLOT(deregisterServer(ServerPtr)));
51 this->connect(countTracker, SIGNAL(updated()), SLOT(updateDisplay()));
52 this->connect(countTracker, SIGNAL(updated()), SIGNAL(counterUpdated()));
55 QImage iconImage = icon.toImage();
56 int width = iconImage.width();
57 int height = iconImage.height();
58 for (
int x = 0; x < width; ++x)
60 for (
int y = 0; y < height; ++y)
62 QRgb pixel = iconImage.pixel(x, y);
63 int alpha = qAlpha(pixel);
64 int gray = qGray(pixel);
66 pixel = qRgba(gray, gray, gray, alpha);
68 iconImage.setPixel(x, y, pixel);
72 iconDisabled = QPixmap::fromImage(iconImage);
76 setFrameShape(QFrame::Panel);
77 setFrameShadow(QFrame::Sunken);
79 setFrameShape(QFrame::NoFrame);
83 setToolTip(tr(
"Players (Humans + Bots) / Servers Refreshed%"));
91 return countTracker->count();
94 void ServersStatusWidget::mousePressEvent(QMouseEvent *event)
96 if (event->button() == Qt::LeftButton)
100 void ServersStatusWidget::paintEvent(QPaintEvent *event)
103 p.setRenderHint(QPainter::SmoothPixmapTransform);
104 p.drawPixmap(2, 2, 18, 18, enabled ? icon : iconDisabled);
107 QLabel::paintEvent(event);
110 QString ServersStatusWidget::refreshedPercentAsText()
const
113 if (count.numServers == 0)
116 return tr(
"%1%").arg(count.refreshedPercent());
121 this->enabled = bEnabled;
125 void ServersStatusWidget::updateDisplay()
130 QString text = tr(
"%1 (%2+%3) / %4").arg(count.numPlayers).arg(count.numHumanPlayers)
131 .arg(count.numBots).arg(count.numServers);
132 if (count.numRefreshing > 0)
133 text += tr(
" %1").arg(refreshedPercentAsText());