Status pills. This doesn't build yet.
This commit is contained in:
@ -47,6 +47,7 @@
|
||||
#include "gui/Platform.h"
|
||||
|
||||
#include "gui/widgets/LabeledToolButton.h"
|
||||
#include "widgets/ServerStatus.h"
|
||||
|
||||
#include "gui/dialogs/SettingsDialog.h"
|
||||
#include "gui/dialogs/NewInstanceDialog.h"
|
||||
@ -216,29 +217,9 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
|
||||
connect(MMC->instances().get(), SIGNAL(dataIsInvalid()), SLOT(selectionBad()));
|
||||
|
||||
m_statusLeft = new QLabel(tr("No instance selected"), this);
|
||||
m_statusRight = new QLabel(tr("No status available"), this);
|
||||
m_statusRefresh = new QToolButton(this);
|
||||
m_statusRefresh->setCheckable(true);
|
||||
m_statusRefresh->setToolButtonStyle(Qt::ToolButtonIconOnly);
|
||||
m_statusRefresh->setIcon(QIcon::fromTheme("refresh"));
|
||||
|
||||
m_statusRight = new ServerStatus(this);
|
||||
statusBar()->addPermanentWidget(m_statusLeft, 1);
|
||||
statusBar()->addPermanentWidget(m_statusRight, 0);
|
||||
statusBar()->addPermanentWidget(m_statusRefresh, 0);
|
||||
|
||||
// Start status checker
|
||||
{
|
||||
connect(MMC->statusChecker().get(), &StatusChecker::statusLoaded, this,
|
||||
&MainWindow::updateStatusUI);
|
||||
connect(MMC->statusChecker().get(), &StatusChecker::statusLoadingFailed, this,
|
||||
&MainWindow::updateStatusFailedUI);
|
||||
|
||||
connect(m_statusRefresh, &QAbstractButton::clicked, this, &MainWindow::reloadStatus);
|
||||
connect(&statusTimer, &QTimer::timeout, this, &MainWindow::reloadStatus);
|
||||
statusTimer.setSingleShot(true);
|
||||
|
||||
reloadStatus();
|
||||
}
|
||||
|
||||
// Add "manage accounts" button, right align
|
||||
QWidget *spacer = new QWidget();
|
||||
@ -620,60 +601,6 @@ void MainWindow::updateNewsLabel()
|
||||
}
|
||||
}
|
||||
|
||||
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 MainWindow::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 MainWindow::updateStatusUI()
|
||||
{
|
||||
auto statusChecker = MMC->statusChecker();
|
||||
auto statuses = statusChecker->getStatusEntries();
|
||||
|
||||
QString status = makeStatusString(statuses);
|
||||
m_statusRefresh->setChecked(false);
|
||||
|
||||
m_statusRight->setText(status);
|
||||
|
||||
statusTimer.start(60 * 1000);
|
||||
}
|
||||
|
||||
void MainWindow::updateStatusFailedUI()
|
||||
{
|
||||
m_statusRight->setText(makeStatusString(QMap<QString, QString>()));
|
||||
m_statusRefresh->setChecked(false);
|
||||
|
||||
statusTimer.start(60 * 1000);
|
||||
}
|
||||
|
||||
void MainWindow::updateAvailable(QString repo, QString versionName, int versionId)
|
||||
{
|
||||
UpdateDialog dlg;
|
||||
|
@ -171,12 +171,6 @@ slots:
|
||||
|
||||
void updateNewsLabel();
|
||||
|
||||
void updateStatusUI();
|
||||
|
||||
void updateStatusFailedUI();
|
||||
|
||||
void reloadStatus();
|
||||
|
||||
/*!
|
||||
* Runs the DownloadUpdateTask and installs updates.
|
||||
*/
|
||||
@ -207,11 +201,8 @@ private:
|
||||
|
||||
QLabel *m_statusLeft;
|
||||
QLabel *m_statusRight;
|
||||
QToolButton *m_statusRefresh;
|
||||
|
||||
QMenu *accountMenu;
|
||||
QToolButton *accountMenuButton;
|
||||
QAction *manageAccountsAction;
|
||||
|
||||
QTimer statusTimer;
|
||||
};
|
||||
|
125
gui/widgets/ServerStatus.cpp
Normal file
125
gui/widgets/ServerStatus.cpp
Normal file
@ -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);
|
||||
}
|
32
gui/widgets/ServerStatus.h
Normal file
32
gui/widgets/ServerStatus.h
Normal file
@ -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;
|
||||
};
|
Reference in New Issue
Block a user