24 #include <QHBoxLayout> 26 #include <QMouseEvent> 30 #include "serversstatuswidget.h" 31 #include "gui/serverlist.h" 32 #include "plugins/engineplugin.h" 33 #include "serverapi/masterclient.h" 34 #include "serverapi/playerslist.h" 35 #include "serverapi/server.h" 36 #include "serverapi/serverlistcounttracker.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)
102 void ServersStatusWidget::paintEvent(QPaintEvent *event)
105 p.setRenderHint(QPainter::SmoothPixmapTransform);
106 p.drawPixmap(2, 2, 18, 18, enabled ? icon : iconDisabled);
109 QLabel::paintEvent(event);
112 void ServersStatusWidget::registerServerIfSamePlugin(ServerPtr server)
114 countTracker->registerServer(server);
117 void ServersStatusWidget::deregisterServerIfSamePlugin(
const ServerPtr &server)
119 countTracker->deregisterServer(server);
122 QString ServersStatusWidget::refreshedPercentAsText()
const 125 if (count.numServers == 0)
131 return tr(
"%1%").arg(count.refreshedPercent());
137 this->enabled = bEnabled;
141 void ServersStatusWidget::updateDisplay()
146 QString text = tr(
"%1 (%2+%3) / %4").arg(count.numPlayers).arg(count.numHumanPlayers)
147 .arg(count.numBots) .arg(count.numServers);
148 if (count.numRefreshing > 0)
150 text += tr(
" %1").arg(refreshedPercentAsText());