summaryrefslogtreecommitdiffstats
path: root/gui/widgets
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2014-05-15 22:32:54 +0200
committerPetr Mrázek <peterix@gmail.com>2014-05-15 23:20:38 +0200
commit927217c7f06017db23b232f055dd5343e39d871f (patch)
tree0b1ce7a96285ebcfaa36084b150393a1eae1f1bf /gui/widgets
parenta6a5241e120ac0f5bc43e8460379091979af850c (diff)
downloadMultiMC-927217c7f06017db23b232f055dd5343e39d871f.tar
MultiMC-927217c7f06017db23b232f055dd5343e39d871f.tar.gz
MultiMC-927217c7f06017db23b232f055dd5343e39d871f.tar.lz
MultiMC-927217c7f06017db23b232f055dd5343e39d871f.tar.xz
MultiMC-927217c7f06017db23b232f055dd5343e39d871f.zip
Status pills. This doesn't build yet.
Diffstat (limited to 'gui/widgets')
-rw-r--r--gui/widgets/ServerStatus.cpp125
-rw-r--r--gui/widgets/ServerStatus.h32
2 files changed, 157 insertions, 0 deletions
diff --git a/gui/widgets/ServerStatus.cpp b/gui/widgets/ServerStatus.cpp
new file mode 100644
index 00000000..1b1bb6f7
--- /dev/null
+++ b/gui/widgets/ServerStatus.cpp
@@ -0,0 +1,125 @@
+#include "ServerStatus.h"
+#include "logic/status/StatusChecker.h"
+
+#include "MultiMC.h"
+
+#include <QHBoxLayout>
+#include <QFrame>
+#include <QLabel>
+#include <QMap>
+#include <QToolButton>
+
+ServerStatus::ServerStatus(QWidget *parent, Qt::WindowFlags f)
+ :QWidget(parent, f)
+{
+ clear();
+ goodIcon = QPixmap(":/icons/multimc/48x48/status-good.png");
+ goodIcon.setDevicePixelRatio(2.0);
+ badIcon = QPixmap(":/icons/multimc/48x48/status-bad.png");
+ badIcon.setDevicePixelRatio(2.0);
+ addStatus(tr("No status available"), false);
+ m_statusRefresh = new QToolButton(this);
+ m_statusRefresh->setCheckable(true);
+ m_statusRefresh->setToolButtonStyle(Qt::ToolButtonIconOnly);
+ m_statusRefresh->setIcon(QIcon::fromTheme("refresh"));
+ // Start status checker
+ {
+ connect(MMC->statusChecker().get(), &StatusChecker::statusLoaded, this,
+ &ServerStatus::updateStatusUI);
+ connect(MMC->statusChecker().get(), &StatusChecker::statusLoadingFailed, this,
+ &ServerStatus::updateStatusFailedUI);
+
+ connect(m_statusRefresh, &QAbstractButton::clicked, this, &ServerStatus::reloadStatus);
+ connect(&statusTimer, &QTimer::timeout, this, &ServerStatus::reloadStatus);
+ statusTimer.setSingleShot(true);
+
+ reloadStatus();
+ }
+
+}
+
+ServerStatus::addLine()
+{
+ auto line = new QFrame(this);
+ line->setFrameShape(QFrame::VLine);
+ line->setFrameShadow(QFrame::Sunken);
+ layout->addWidget(line);
+}
+
+ServerStatus::addStatus(QString name, bool online)
+{
+ auto label = new QLabel(this);
+ label->setText(name);
+ if(online)
+ label->setPixmap(goodIcon);
+ else
+ label->setPixmap(badIcon);
+ layout->addWidget(label);
+}
+
+ServerStatus::clear()
+{
+ if(layout)
+ delete layout;
+ layout = new QHBoxLayout(this);
+}
+
+void ServerStatus::StatusChanged(QMap<QString, QString> statusEntries)
+{
+ clear();
+ int howmany = statusEntries.size();
+ int index = 0;
+ auto iter = statusEntries.begin();
+ while (iter != statusEntries.end())
+ {
+ addStatus();
+ index++;
+ }
+}
+
+static QString convertStatus(const QString &status)
+{
+ QString ret = "?";
+
+ if (status == "green")
+ ret = "↑";
+ else if (status == "yellow")
+ ret = "-";
+ else if (status == "red")
+ ret = "↓";
+
+ return "<span style=\"font-size:11pt; font-weight:600;\">" + ret + "</span>";
+}
+
+void ServerStatus::reloadStatus()
+{
+ m_statusRefresh->setChecked(true);
+ MMC->statusChecker()->reloadStatus();
+ // updateStatusUI();
+}
+
+static QString makeStatusString(const QMap<QString, QString> statuses)
+{
+ QString status = "";
+ status += "Web: " + convertStatus(statuses["minecraft.net"]);
+ status += " Account: " + convertStatus(statuses["account.mojang.com"]);
+ status += " Skins: " + convertStatus(statuses["skins.minecraft.net"]);
+ status += " Auth: " + convertStatus(statuses["authserver.mojang.com"]);
+ status += " Session: " + convertStatus(statuses["sessionserver.mojang.com"]);
+
+ return status;
+}
+
+void ServerStatus::updateStatusUI()
+{
+ m_statusRefresh->setChecked(false);
+ MMC->statusChecker()->getStatusEntries();
+ statusTimer.start(60 * 1000);
+}
+
+void ServerStatus::updateStatusFailedUI()
+{
+ m_statusRefresh->setChecked(false);
+ StatusChanged();
+ statusTimer.start(60 * 1000);
+}
diff --git a/gui/widgets/ServerStatus.h b/gui/widgets/ServerStatus.h
new file mode 100644
index 00000000..a116d3d4
--- /dev/null
+++ b/gui/widgets/ServerStatus.h
@@ -0,0 +1,32 @@
+#pragma once
+#include <QWidget>
+#include <memory>
+
+class QToolButton;
+class QHBoxLayout;
+
+class ServerStatus: public QWidget
+{
+ Q_OBJECT
+public:
+ explicit ServerStatus(QWidget *parent = nullptr, Qt::WindowFlags f = 0);
+ virtual ~ServerStatus() {};
+public slots:
+ void updateStatusUI();
+
+ void updateStatusFailedUI();
+
+ void reloadStatus();
+ void StatusChanged();
+
+private: /* methods */
+ clear();
+ addLine();
+ addStatus(QString name, bool online);
+private: /* data */
+ QHBoxLayout * layout = nullptr;
+ QToolButton *m_statusRefresh = nullptr;
+ QPixmap goodIcon;
+ QPixmap badIcon;
+ QTimer statusTimer;
+};