pollymc/application/widgets/ServerStatus.cpp

182 lines
3.8 KiB
C++
Raw Normal View History

2014-05-16 02:02:54 +05:30
#include "ServerStatus.h"
2014-05-17 19:53:48 +05:30
#include "LineSeparator.h"
#include "IconLabel.h"
2015-02-09 06:21:14 +05:30
#include "status/StatusChecker.h"
2014-05-16 02:02:54 +05:30
#include "MultiMC.h"
#include <QHBoxLayout>
#include <QFrame>
#include <QLabel>
#include <QMap>
#include <QToolButton>
2014-05-17 19:53:48 +05:30
#include <QAction>
#include <QDesktopServices>
class ClickableLabel : public QLabel
{
Q_OBJECT
public:
ClickableLabel(QWidget *parent) : QLabel(parent)
{
setCursor(Qt::PointingHandCursor);
}
~ClickableLabel(){};
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event)
{
emit clicked();
}
};
class ClickableIconLabel : public IconLabel
{
Q_OBJECT
public:
ClickableIconLabel(QWidget *parent, QIcon icon, QSize size) : IconLabel(parent, icon, size)
{
setCursor(Qt::PointingHandCursor);
}
~ClickableIconLabel(){};
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event)
{
emit clicked();
}
};
2014-05-16 02:02:54 +05:30
2014-05-17 19:53:48 +05:30
ServerStatus::ServerStatus(QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f)
2014-05-16 02:02:54 +05:30
{
2014-05-17 19:53:48 +05:30
layout = new QHBoxLayout(this);
layout->setContentsMargins(0, 0, 0, 0);
goodIcon = MMC->getThemedIcon("status-good");
yellowIcon = MMC->getThemedIcon("status-yellow");
badIcon = MMC->getThemedIcon("status-bad");
2014-05-17 19:53:48 +05:30
addStatus("minecraft.net", tr("Web"));
addLine();
addStatus("account.mojang.com", tr("Account"));
addLine();
addStatus("skins.minecraft.net", tr("Skins"));
addLine();
addStatus("authserver.mojang.com", tr("Auth"));
addLine();
addStatus("sessionserver.mojang.com", tr("Session"));
2014-05-16 02:02:54 +05:30
m_statusRefresh = new QToolButton(this);
m_statusRefresh->setCheckable(true);
m_statusRefresh->setToolButtonStyle(Qt::ToolButtonIconOnly);
m_statusRefresh->setIcon(MMC->getThemedIcon("refresh"));
2014-05-17 19:53:48 +05:30
layout->addWidget(m_statusRefresh);
setLayout(layout);
2014-05-16 02:02:54 +05:30
// Start status checker
m_statusChecker.reset(new StatusChecker());
2014-05-16 02:02:54 +05:30
{
auto reloader = m_statusChecker.get();
2014-05-17 19:53:48 +05:30
connect(reloader, &StatusChecker::statusChanged, this, &ServerStatus::StatusChanged);
connect(reloader, &StatusChecker::statusLoading, this, &ServerStatus::StatusReloading);
2014-05-16 02:02:54 +05:30
connect(m_statusRefresh, &QAbstractButton::clicked, this, &ServerStatus::reloadStatus);
m_statusChecker->startTimer(60000);
2014-05-16 02:02:54 +05:30
reloadStatus();
}
}
2014-05-17 19:53:48 +05:30
ServerStatus::~ServerStatus()
2014-05-16 02:02:54 +05:30
{
}
2014-05-17 19:53:48 +05:30
void ServerStatus::reloadStatus()
2014-05-16 02:02:54 +05:30
{
m_statusChecker->reloadStatus();
2014-05-16 02:02:54 +05:30
}
2014-05-17 19:53:48 +05:30
void ServerStatus::addLine()
2014-05-16 02:02:54 +05:30
{
layout->addWidget(new LineSeparator(this, Qt::Vertical));
2014-05-16 02:02:54 +05:30
}
2014-05-17 19:53:48 +05:30
void ServerStatus::addStatus(QString key, QString name)
2014-05-16 02:02:54 +05:30
{
{
auto label = new ClickableIconLabel(this, badIcon, QSize(16, 16));
2014-05-17 19:53:48 +05:30
label->setToolTip(key);
serverLabels[key] = label;
layout->addWidget(label);
connect(label,SIGNAL(clicked()),SLOT(clicked()));
2014-05-17 19:53:48 +05:30
}
{
auto label = new ClickableLabel(this);
2014-05-17 19:53:48 +05:30
label->setText(name);
label->setToolTip(key);
layout->addWidget(label);
connect(label,SIGNAL(clicked()),SLOT(clicked()));
2014-05-16 02:02:54 +05:30
}
}
void ServerStatus::clicked()
{
QDesktopServices::openUrl(QUrl("https://help.mojang.com/"));
}
void ServerStatus::setStatus(QString key, int value)
2014-05-16 02:02:54 +05:30
{
2014-05-17 19:53:48 +05:30
if (!serverLabels.contains(key))
return;
IconLabel *label = serverLabels[key];
switch(value)
{
case 0:
label->setIcon(goodIcon);
break;
case 1:
label->setIcon(yellowIcon);
break;
default:
case 2:
label->setIcon(badIcon);
break;
}
2014-05-16 02:02:54 +05:30
}
2014-05-17 19:53:48 +05:30
void ServerStatus::StatusChanged(const QMap<QString, QString> statusEntries)
2014-05-16 02:02:54 +05:30
{
auto convertStatus = [&](QString status)->int
2014-05-17 19:53:48 +05:30
{
if (status == "green")
return 0;
2014-05-17 19:53:48 +05:30
else if (status == "yellow")
return 1;
2014-05-17 19:53:48 +05:30
else if (status == "red")
return 2;
return 2;
2014-05-17 19:53:48 +05:30
}
;
auto iter = statusEntries.begin();
while (iter != statusEntries.end())
{
QString key = iter.key();
auto value = convertStatus(iter.value());
2014-05-17 19:53:48 +05:30
setStatus(key, value);
iter++;
}
2014-05-16 02:02:54 +05:30
}
2014-05-17 19:53:48 +05:30
void ServerStatus::StatusReloading(bool is_reloading)
2014-05-16 02:02:54 +05:30
{
2014-05-17 19:53:48 +05:30
m_statusRefresh->setChecked(is_reloading);
2014-05-16 02:02:54 +05:30
}
#include "ServerStatus.moc"