From 927217c7f06017db23b232f055dd5343e39d871f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Thu, 15 May 2014 22:32:54 +0200 Subject: [PATCH] Status pills. This doesn't build yet. --- gui/MainWindow.cpp | 77 +----- gui/MainWindow.h | 9 - gui/widgets/ServerStatus.cpp | 125 +++++++++ gui/widgets/ServerStatus.h | 32 +++ resources/multimc/16x16/status-bad.png | Bin 0 -> 643 bytes resources/multimc/16x16/status-good.png | Bin 0 -> 714 bytes resources/multimc/22x22/status-bad.png | Bin 0 -> 968 bytes resources/multimc/22x22/status-good.png | Bin 0 -> 994 bytes resources/multimc/24x24/status-bad.png | Bin 0 -> 1102 bytes resources/multimc/24x24/status-good.png | Bin 0 -> 1066 bytes resources/multimc/32x32/status-bad.png | Bin 0 -> 1422 bytes resources/multimc/32x32/status-good.png | Bin 0 -> 1400 bytes resources/multimc/48x48/status-bad.png | Bin 0 -> 2389 bytes resources/multimc/48x48/status-good.png | Bin 0 -> 2248 bytes resources/multimc/64x64/status-bad.png | Bin 0 -> 2827 bytes resources/multimc/64x64/status-good.png | Bin 0 -> 2954 bytes resources/multimc/multimc.qrc | 16 ++ resources/multimc/scalable/status-bad.svg | 142 ++++++++++ resources/multimc/scalable/status-good.svg | 201 ++++++++++++++ resources/sources/status-bad.svg | 262 ------------------ resources/sources/status-good.svg | 293 --------------------- resources/sources/status-terrible.svg | 262 ------------------ 22 files changed, 518 insertions(+), 901 deletions(-) create mode 100644 gui/widgets/ServerStatus.cpp create mode 100644 gui/widgets/ServerStatus.h create mode 100644 resources/multimc/16x16/status-bad.png create mode 100644 resources/multimc/16x16/status-good.png create mode 100644 resources/multimc/22x22/status-bad.png create mode 100644 resources/multimc/22x22/status-good.png create mode 100644 resources/multimc/24x24/status-bad.png create mode 100644 resources/multimc/24x24/status-good.png create mode 100644 resources/multimc/32x32/status-bad.png create mode 100644 resources/multimc/32x32/status-good.png create mode 100644 resources/multimc/48x48/status-bad.png create mode 100644 resources/multimc/48x48/status-good.png create mode 100644 resources/multimc/64x64/status-bad.png create mode 100644 resources/multimc/64x64/status-good.png create mode 100644 resources/multimc/scalable/status-bad.svg create mode 100644 resources/multimc/scalable/status-good.svg delete mode 100644 resources/sources/status-bad.svg delete mode 100644 resources/sources/status-good.svg delete mode 100644 resources/sources/status-terrible.svg diff --git a/gui/MainWindow.cpp b/gui/MainWindow.cpp index 58491a7ec..725bf1759 100644 --- a/gui/MainWindow.cpp +++ b/gui/MainWindow.cpp @@ -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 "" + ret + ""; -} - -void MainWindow::reloadStatus() -{ - m_statusRefresh->setChecked(true); - MMC->statusChecker()->reloadStatus(); - // updateStatusUI(); -} - -static QString makeStatusString(const QMap 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())); - m_statusRefresh->setChecked(false); - - statusTimer.start(60 * 1000); -} - void MainWindow::updateAvailable(QString repo, QString versionName, int versionId) { UpdateDialog dlg; diff --git a/gui/MainWindow.h b/gui/MainWindow.h index d610a87d0..ad160da73 100644 --- a/gui/MainWindow.h +++ b/gui/MainWindow.h @@ -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; }; diff --git a/gui/widgets/ServerStatus.cpp b/gui/widgets/ServerStatus.cpp new file mode 100644 index 000000000..1b1bb6f79 --- /dev/null +++ b/gui/widgets/ServerStatus.cpp @@ -0,0 +1,125 @@ +#include "ServerStatus.h" +#include "logic/status/StatusChecker.h" + +#include "MultiMC.h" + +#include +#include +#include +#include +#include + +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 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 "" + ret + ""; +} + +void ServerStatus::reloadStatus() +{ + m_statusRefresh->setChecked(true); + MMC->statusChecker()->reloadStatus(); + // updateStatusUI(); +} + +static QString makeStatusString(const QMap 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 000000000..a116d3d49 --- /dev/null +++ b/gui/widgets/ServerStatus.h @@ -0,0 +1,32 @@ +#pragma once +#include +#include + +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; +}; diff --git a/resources/multimc/16x16/status-bad.png b/resources/multimc/16x16/status-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..5b3f20518930b93e40ac9245a581ef6935bff8ef GIT binary patch literal 643 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 QssI2007*qoM6N<$f?}r2hyVZp literal 0 HcmV?d00001 diff --git a/resources/multimc/24x24/status-bad.png b/resources/multimc/24x24/status-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..d1547a4744ae6b20201a74267c5ac1b71b364704 GIT binary patch literal 1102 zcmV-U1hM;xP)(^b8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11ItN7K~zYIwU%FKTXhu2KfjxM=XSNuR*W*H;vXDiNJ`V{47=J2 zKJD3;JV+hPE(%-07S{Gbq09uVEaH?lpcZ8c+d~oQQ&AkW+p=b^-4Lfv)G?>dtgF-& zm*34jKHQu1HcjSUJaD<;p5OU?&)?sP5)m57$4W&#=+Mw!g1Clu4Y*Kn;k1UrGR(dy za-|W5sz;Dh%4&fj7X~$0W#Bg8cAyLtgQo;&&>9Xb!W&~E`acP#lxn>J;~HYkz&(Hs zs2W2LSOm@k=X|31GISplnQKV!nNlxDAZvlO3215*ca8iCdpv$UYB}0(l8`MxKSF0iBPt z(ux*vxme`e_3PQ5NMM>K+Y<@SD8&ZHp>O|wOw+`5T@GclG#@!aLhGvi2H=z*?e~!` zcy%Lec{G$`1+;0+Og_&UrB;z7cI>Evk7P1jOQ-2sUar=zV*i8R1WS>p;jPWkw7I5B zjDTdihQu(8D)>Sj@QVBa{04U#Zcw=YOCnFfGr*RuHHvVzgmdnB-m03+wLZl7;0(uRIJQN&Q2ShJkWc1P{ zoX$=TWwX_8X%BVR)@|G9+q;+NCntF%l!4>GWzYunAtLO7*IxlS78;fxK@JB4*KgZ$ zA*8zi(r??+13u}4YY)0B+pTK*p~##Iz2AV&0YBFP zZ6v<{?*r$3@ZMZ#tF2j?FDlgvj4OzB0B!hdvtEk+1m=LR0fBj-J9o2{S&<&4tP%|2 z-|3bK+zV_9^uGgF@P|=A3mh(^b8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11E)zuK~zYIot8~#TvZgufA_w5Gx?Y#PDzGn1=Cgxk%0s<)9NZ+ zBp?G;sC!AXuxJso6B5ylX|y61nwU0V92AwJh(*lCjo?C(nL!ssLgX~#$sBjAz4ldBlXv1YRJ z!SX^$#$EzyRJj~z?8lQn3@)C9kOvVDe1SzLSOvg{!N>rMi)ZDMn0*D*k59I-VKW$7 zsaS>R8iYMi|Jy0RvIDmxFcSeIQ}}etM|ZB36i`{8jW)BiG!q`O)>NC3`6e??f>SRHWh(Y{gcD7if1UO z<22t3g6d$pahe++-k`H%Tja!xCpdEWNO^DzOjLs9D~+)^Hh`tz*wMgY7(Y2q&zTAm;B~igz6N-G!TB5SaqoEu$-? zN9NYU)5@h#+YizQxHtq?zrh9p|2Xik6NrcyL~)Nl@)T^1dqv kauv}ztj)@2rGH!g1GoR@@u}sCEdT%j07*qoM6N<$f_OCNhX4Qo literal 0 HcmV?d00001 diff --git a/resources/multimc/32x32/status-bad.png b/resources/multimc/32x32/status-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2c9d4f7852a6ec135b9134521dc221d68ccb24 GIT binary patch literal 1422 zcmV;91#$X`P)J8MWuo6pvDjVpCtp5^e-7^}A> z;I$CCu5j=M`|EVq(1lN-2Omdgik-y_{*8CjXDVo>#?fhxoQiR_Z2_-_us(3EPJaz| z;;vLcJN5zIz+W{ZQki4ti5TCzseq9X?hm}0r?&&WxT8(tR(lVB!25}asd*lGF~&cy zDBzbNtk3aAp59Ml13GS#ykWEW9saQ(;(=@=a*f655V~qf*n8LDo@L0}sh3tv7j~eS zkoDr+o)DU+*%S~sSff9Wjmh^#PG=9-~~F5^WjUxw}^kweBL2GLwvMcjuR6TF~%4tCMM#JaydSe;@?U!J6bT0 zrkHnHe7;G1g1DCtpQ6(b*?yFGrUm#n;(6khQYls{m6)}Lh^L89w~#liQmMo(rBXbf z`pWt~O#Bw{akl5b#CNgv9(*Pfu7GaLT)ymA)v5;v2K4kK2h`Kk!-|fZ6jME0-N#h6qc3dvb8l zrqNMfPm?cOQ80;L;071+5A(gqx-AxZdo~Ik*n)puyy)!s_>xF8*6otRJl;%}bGgP} z>Y8PM4H0Xw8-1gr_6-g;cfM#>lauxh4(b~nwR;tE_{74p&{5Z3hx>n7E*&IXTLI9> zgJE1MmzN}5!-~bC6GKBTmCJ@L?EzW4y0EO~=96j0%qrxoC1LhBip8SiLqo<^Xhc~7 z5%W}YbIBOxpUVK}EOfZ#$oCBnF3E|8h(7H~b&Cz=|zG~$b-L73v$=^-L zr{;LzRAwk$GM4WN;r^J88v-4Ct7n6*LuE4>_esl+XPEw{DB)6r;zuMLGGl6l*g(USl6FFMH)vH<7 zc85^tNCwDVDR1(k#fg?JNlBx7xr4(eZ})QAYTpi_^8>c!cuaCCg_u;FkW^n4WAlvk c+`{$ze}B8NDK>hd&j0`b07*qoM6N<$f;%L+(*OVf literal 0 HcmV?d00001 diff --git a/resources/multimc/32x32/status-good.png b/resources/multimc/32x32/status-good.png new file mode 100644 index 0000000000000000000000000000000000000000..1a805e68ba793bb6bed79fcef67bed49d0a76678 GIT binary patch literal 1400 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 Hu0mjf={`>Z literal 0 HcmV?d00001 diff --git a/resources/multimc/48x48/status-good.png b/resources/multimc/48x48/status-good.png new file mode 100644 index 0000000000000000000000000000000000000000..df7cb59b6166081381b1cf24a61bb879f432240d GIT binary patch literal 2248 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 A^Z)<= literal 0 HcmV?d00001 diff --git a/resources/multimc/multimc.qrc b/resources/multimc/multimc.qrc index d3068ff44..1df22c29c 100644 --- a/resources/multimc/multimc.qrc +++ b/resources/multimc/multimc.qrc @@ -87,6 +87,22 @@ 48x48/news.png 64x64/news.png + + 16x16/status-bad.png + 24x24/status-bad.png + 22x22/status-bad.png + 32x32/status-bad.png + 48x48/status-bad.png + 64x64/status-bad.png + + + 16x16/status-good.png + 24x24/status-good.png + 22x22/status-good.png + 32x32/status-good.png + 48x48/status-good.png + 64x64/status-good.png + 16x16/refresh.png 22x22/refresh.png diff --git a/resources/multimc/scalable/status-bad.svg b/resources/multimc/scalable/status-bad.svg new file mode 100644 index 000000000..9f47307e0 --- /dev/null +++ b/resources/multimc/scalable/status-bad.svg @@ -0,0 +1,142 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/resources/multimc/scalable/status-good.svg b/resources/multimc/scalable/status-good.svg new file mode 100644 index 000000000..0a35c80f4 --- /dev/null +++ b/resources/multimc/scalable/status-good.svg @@ -0,0 +1,201 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/resources/sources/status-bad.svg b/resources/sources/status-bad.svg deleted file mode 100644 index 54334e066..000000000 --- a/resources/sources/status-bad.svg +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/resources/sources/status-good.svg b/resources/sources/status-good.svg deleted file mode 100644 index 3b3118064..000000000 --- a/resources/sources/status-good.svg +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/resources/sources/status-terrible.svg b/resources/sources/status-terrible.svg deleted file mode 100644 index b0de7bfdb..000000000 --- a/resources/sources/status-terrible.svg +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - -