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 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s7Sc;uILpV4%IBGajIv5xj zI14-?iy0W$-heQpT&aaA0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa}C44y8IAr`%JC);NPCyE@cH)ok0uw|FlrAN(Y8f}_mZ`pS2usyNhtE1><7s2Uz zUC!bcwMtft>296mo3W<3>Af!J6>$wNzG+c1Qn4~!zdkLW`1-@X7Kzsj*!R7?Q+>Yt z+}=g2zARRml;yaOai&>HlmmB`?~2w9Mebjn?c=L>U7lEqd{6ksq0-*i+`tsysDB_j zqo#f4?t*yV#48Ri^BjK)Jn3U}e$$_SK>LC6nzM&9L$6945Y~`uxWgHI=jQSq$s%)E z-4x3uyBLi4S0>)DU_Ht5fit2=M#%BN*R{F~dC_9Nx1YtVJfg9I+otIlzlSlqd3-}& zb6(S~zQu_WSw}x_Nr;TvptH7OUR&adb&p>xd#KkK*CPGVEXA$ojKu^FCbMhTCFjp+ zIqJ%AOkHioFS||!g}fc^jEu9R1M2g4mBk<2wB^z7TdqgHZ%v5YUwE%EuBmEG>Y`uy zG0j)6H($10Z@zQ&lGmQozZ(T@kh0FF#-w6C1EseN|V- z3094M$9FshKlJO~GClQpdaEh&={>{F4j;!tjx>L#PZojK80I(1KHxREW$^hyfAXut vl@mjFK5Cn&s5sqxwKTzch>WPW5;u*Iu7Cdl3qGY!3x5ZA81F7lY!E>{;5 z2D#QrD~g(qZQXyEVHfXmbHy0n0@E2KYVz5A3s$o#+1Fh8%e>Ah$K+Vjaiya-#B4rK z*SNGU@shXm$Nd{7n$6f}?W;A#Y5w;^g_qld#7(q>T+Pd8+glu%|KZ6Am9@HScYk#j z)37o*C3N(?z%TE)6EAVN-74_;cHm*ajF0S(dDig-*#x(!aVv0{OBL_A*i!EC|7qPu z9q&!rk%qr`41e*QT$gfmTdwDQ|L(eA@q3TwgwHBaolz|K`Iu!)?}dcTTlTqpE;9aj z&LVdCt{0ZKi$6Tett~$MeAjh7zpDO+(=BvE&n#9e?k+abH5Yu}BfNtDN*m)e+X=7Bi|`x=9~yc;ENyRnD!ty> SqRzm;z~JfX=d#Wzp$P!4%rrCr literal 0 HcmV?d00001 diff --git a/resources/multimc/22x22/status-bad.png b/resources/multimc/22x22/status-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..2707539e1995690d1c95e9b68cf1fe9ec232b9e1 GIT binary patch literal 968 zcmeAS@N?(olHy`uVBq!ia0y~yU=Rag4mJh`h9g^YtQi;>Sc;uILpV4%IBGajIv5xj zI14-?iy0U=TR@m`)uZG}1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<{OT|HeKLo9mNUiHtI<0^6d<9U@#vvsp|b(Jn&+IrPXpNn;}w?p>g2Zl}Rg?nFY zTf)w5DG^k(Zi*PE+k_i>x>v4DUSRpc_g1juCf*=Nf#|N=&dnRInPuNNt0u|+`}p?4 z)#CCJ_rBLYtKIkc+T$7ATUvVyB?m^Qlnx?l8*{(Ztq+)+??F*KF zMlBbuHkY#Pns99KjU)L#M9Za{b*@TU%Rc_IziB^TqI*Kx+#0dn8`eIqS@FpF&kc!$ zb*DD^C++#o|KYjf8;{SmU3c_SuAWSZznz9%iFJu zT05&DNiarNWX`O4*REfGZqlXhXA!fSvqJE?#0i5tn-2y^?d^Q|ZuQkEr&6zGg{n<1 z%&OYOczor{%$YuJOM?nm$CyQ|-un8|jXrChpAA2|kIe2YYmQKn(-nDi>XcWH;jyVx zr?S867vtJ^qsBb)x8O&P&v*4dK8*V%?_X1RK<CvNFpfA4@XXNBR^P3yxxZ`yzNevVhE z?bM(ZS8x54{=xKmPo3GZpWohSc;uILpV4%IBGajIv5xj zI14-?iy0U=TR@m`)uZG}1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xh zq!<{O<2_v*Lo9lyUiHn02^Bf;@qcapy&6mTpBpS@sHKW6RL}~xK4`=dl=b@9kCMlW zdbnG?!U`8|(YwR3YlZym$c!VCn*6*3RU{Y3W;hDUtnut-b=A6ZZHcaPmet&uGtNBO zS9$#CnHfv=^?W^WcTe^C{^Ijb@2+-XSsxJm*Ko_sgMrE!mom)H?rKPr)BT+BY(>D7 zJ4IKG?{kM;W;VMu*TI{q@W6V-2M)mt9yM>`6lI+y6m{&$+@girYxdo_+MV^R;Ev9} z(2nZ|N^HxI>|)&C@}QjCr1F)K-uwG{|GC4KmwgqwW}mpz`G}Ulit6Tax06ls&H=&P z89}mlZfIe&L*6sMdjwUcIem2${!^3v^0$IPO?cd-?)e&Dv* z#nzT`HR23gz>{A|KhAo;$xylRvhu*ajchB;gH?V{@{ym@#@<-0xFcoiieF{F3(oL# zv3y_q$NtM&k;(6UC&_pTRahR#d~CAh)rZ+r6&|JV%sMN`!@kBkYD28M)r;Me-&9uc z+uGXR@W1J@zr)EvK}n%UB4euBlN{fDY$wAf6-Z8a8`v=Orexo<{-Elu*Q_>H&t}ME z*3CS0PVCEt)D2LIK~xjyJVA>tp^t zUe(c|b2molw`H_N=MuhUPYxaBzSQ~h{PNTfFC8CNN9~+jsHCt*WOv>qPP;zU-I5m; zJP7+K_VIL~(QhM{#esZp><{$v=N0_veSBB@?UD728q)V?ENMQxBg_6UZ@`6`1)hcL zItnlTV3(JbO?~jM@xL46IratXmifqiY`>^=`a@OrLiW7KYj+oxvOaHq@L}7@ebv)4 zPI0eU&C&eU`OAUy^JmK38S6L>Zi-C0TJF=yk)@NCyh3tbMDyIL(D#o3A@6yOzQp|wg#WOdY27?LrxT{vD{}%^xdj9 zm3_yu2fGDoMBDa<$OSL8(f@UJVO-Bm4q=C;9o*Kpm=kU`*!!-KVo;rBq&E5LJO9hm zI&VBZVJk5DcSw2(&gE~8P31ECVj8-`Oj9SFo#oR*2z^23=9mOu6{1-oD!M< DVy4T8 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 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSc;uILpV4%IBGajIv5xj zI14-?iy0WW5Zh4mOMdn7ND?BR9!70>QlTy}47PPg%p zJ)_4JeNgP$H^+r%Sk~w~nqsyIt+E3n+}isABeYgS(ooqqqU zt=*m3U(9@;#n}|>d^qp^&${#X?{^9bN}W9JFfd9 z2Hq7?&ioN9=a`?@Ec$6wA}=yC+vCH`Abod*?8dE}8CfFby??lBIAcC9ep&1OWUnd9 ze2uHS`26njUTbbB?0z76@qow&*$nY{73LjB80??R^++e!3NVQ$aN5gmeZ;!U>yOw6 znGJ$EjUVNfuF+yNSfcpNK!B5R4#PJ~zQx;oEm`8&+;V5v_8sn=z$`k6<4A)eLvqN< z3`w^4%x5=_saaYXI-Wkju(M$a&y$?l(;6B3{Co_i`V<+7oc!ys`u)!Uuaz3? ziO+8L8z)CV#_rpr63)#rKby@`scbqV9#{>_)V#0qvsJh}b#_04%63A5C03v-^+ILdZ>VgCO*pUX!|WBF1yo5))_ zIlW%>m+iq6`M2LE>Q$5~=Tw?ZNoL)WdDh47yyVibi7I7pRy6ge7{z!me;FCK?%KMf z|IPPVyeBSyxc2OYEjyQa_cWyJYCB@kqxHi{_Cwbn#y@Q3Qh5P8{(CF=A2dENZLMin z!SWrKGsb8&)fRd+neomtL;5m8(W^ZkpoUG?mE*OJjX5r<7~CD#|^tIgKC?nf#^KujSr;aeMdl=j!T}DpMLC zA4t8x_C-4WYX>?jsx=l_kR@k%@y3MFtxnJMxRlhq1!a~$G^|h{Y z^=NmLGUWcq-W=EUkL6jzdd9}e1=i)8r$$bcTe?Pw=i&XA(>U*N=Wu=5&m8`tJ2G{>`Ip-)-|Gwv3=E#GelF{r G5}E)U;Nlhl literal 0 HcmV?d00001 diff --git a/resources/multimc/24x24/status-good.png b/resources/multimc/24x24/status-good.png new file mode 100644 index 0000000000000000000000000000000000000000..3545bc4c5276cdd01feda6ca99fe8294d9a32033 GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuJoSc;uILpV4%IBGajIv5xj zI14-?iy0WW5Y@(UGsk)#I8B=ASqObxTM>BispR>$ml zmh7`^=C=cP_Y}W-|Nq|3=kq>K=?FM=<#})6n)!!bsIX=p_YhKkF!Au@)e$H5Z}-QDR=C(Wp3z0&W$ZDXRb zMAXWN))!JOwgLZdYaZCdyj|Hqm{B?SN6BgT@^w>10>b6$W!>i={}{8VTyayNQLXE@ za*j=*8o|0r~)Xr!of%nHfw0XT3$P4Y`+PFR0zbKymqc=e1d~n?`y;Jse&C(B9Z|5BTEGoNTRwh^8+O^w1*p|q>SCQ&1`q0_DWS+0# z=XX5L?|I+;e>U4pv@!JW34pn+^3&53>zcX*jTX4y~eJv+|aCB@Nh|m^@0|U z$bts@LkbdG&SptQ#vPcv`3}$FniWe3v_51Q~4< zj=Vd#S@>UZ>V2hg!n60WUF9-A?zYZO6qw0$TX(VcQuk-q4qraCG~hP>CH5T_ zEaCePvN8U*_^@8MqeH@ljbrT;^Do_V)?Ybt(W-TmXTV#BPy4jli$pJ4t~q-ueQAC4 bKj!WKpMPBWv`d$Pfq}u()z4*}Q$iB}cr@pS 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 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa~N+@3CuArY-xug7=HNf%}NaNm0KuGwo#7YClWG55lxw^LNUIeFaV-rdUPcxhwi z2S2APF;jNY5~$NF!5l+IIoa9vU4nMFu?c&~M~hv)3`*GhY}OXKD}{curY z^>)<W!@!m9b}5B%=z zSXn7oX?VV4}qwQ{MwJ_t|iOvsLt@=Md^ggn^qyBu&Jw-d`nk_MX!otFa z$0XF%)E@N}S=vp0bl=O+I?AAb*^Kh2nth%%O*^LZ&tG(z|7P8kie;=n%pX-gniixP zrZsiO*0zr2o&MV=n6C+1c|><v%GIa|uWQIV6SMD4 z_|;YH>}+4YsIXtTeEIRgM#jUBA20J(Rc~t(=|1{w_vFcw=h+q<5Rb3F>pU&&a?cVS ztoC%-_%;sjy6U2W3(GDB#`{m!j}A2GjDNr;{)zwd-V?iY z#j2{!xMXiM)yM96@#e>mNggKG-cCAfbI)g5@y=uMuV$q-@Cs&ckgi?4_!}>uS^2(< z@X3?E@$$Wrmfcz{TJ+<{p-mS8ugA6ju8-7{Rf&mayl|p9F-B|pbd{LHT}KxQJ3H%5 zJ>91JmN9bot_^FRJ)4|)?2Oiv)vAf#EV_;^dhG0cEG)w%l2Pz;NOAE=iKp{VGd$NR z+41zmcV0fdlbvlHZsv2MkG&81#nbb2yV~K?>!g3woPMWXxF+P&;^gBw_x4l@{+!(0 z{7zPO>$^v;_R-6%%)Wj7d9an6O)q}iwMQ*~l-H@qw14{RE3_uOxtki%ZR8qrzz zkBIB&Uc4%G(L_(>;r>fUg@1bWd<~yhoyWW_?r^PS!96E_3uC*yGa|5Q`2yDzaYx$6fXJ(XH@nqc{0(fSNZJsP0lapm1vy3SZ%&9>#5k?b+P^@ z@B5xu{;c9bNSa2h(X{uR5C6^Rdz!s5*eKv$pYKD_leUTTRvu7R50^e|taRr4wA6C!*UUVz#KHtL6%-fz;_!Mci q&Ip+^AtYWj`E$>gJBPmhsjuI?QPZqy(Rl_21_n=8KbLh*2~7YyB)QW7 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 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}EX7WqAsieW95oy%9SjT% zoCO|{#S9F**Fl)kNn>^e0|SF(iEBhjaDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$ zQVa|%Up-wMLn2z&PLIuy2^BeB|NUIfH*I;fO}X3dhOHLiF=1VpxV6cHnTyp^z9wsx zfTOE?6jP;lhlJGUAdW2>A@W%-*hL(Lv|MX0C`t76`Y);#__M%!d!0#U+2p%#-rcdZ zJCn0%_WHbSwgz{08<)R(Uw_`V_*;ys(v_rFcm63{Y*m)H+B}g@=8=WaaSn?mg(|%d z#oU(7nE&7HoY%r-mGUYMwSwKjTiOjTbu0T?Ja7(=c0cfA?RV?$heoHbb@cq7z0SK~ z*G7GpZ3Zr$zYJXpSl$S^a0%!+9&k9o%Gf2vCG{+4hjfGGY8{Ps<;Q1q=S<_?6tkJ3 zwAS5P%b;_j3g3kZ?bBR2ETXHjk51G1Val_z;l1e0g)d|#_lv!^3uu^?_1@*>>j;$# zY_r}uJ8v}m5Vbq~aKGS*i~^O`)%~Y-?woHfy1?%K#lCHMNh?_vD%qIv-&)Hbw{20= zON}ME1s)HrVyDi#p#9(WUrv)Wg&tng1Nl)2h3cw;8xYsK)q2I~Ve?n^0X z6j;31^|`qIUgxoJmIR4o9xWM+hf3LERR5T%924S^kx?+5)^PjZ-x zTV2r<;p6@Zkz#Y%tvX$k&h(w1;3Yty|BtEcd|HYqR_B zM}M-uv{>_EqhN;CTKOG;2D!}dcIi!D7nAhijl#-Cku48dANoDsy2#o@uTcN)E@}Tg zfd*HZ?=wgIt4^H1RF&`j_EgDC;bl_|n#+BaV_bz|IcM&$P+S`1six=Wu}E7n=Ii|R zlF2<2H%TU6>z}`J$G-4GyU!lFeKt}e>#Wh8U0M&=TlBB{$C$npZP6}0be&^EVThFX zx6Nx5cU@HbeecpN;p6@c1{G-n4Hy6A?$~>&NITOkx6tB;)FI(FdX7iFHYu~rWR^@j zp5E!2R3i7nMYA>N)bBM?$tCvpW94NM?ls+KO1Ppg7W?pdfXt$cUyVd7es0Xn7G$^P zzsAn~!!BpCed_^LZ;j9MRE?ADc9?AwzoPg_YF@Eov< zybXnJ0>63xakx|*Ym?2+vgf|Ryt47iDRG7z`G5Vq^*0|(a<)_s2%NNXdz4?Yp~q(K z^?ITCt~a%eI3C=(VmoVF;Lno86;TfJxe`t9I;>XNEnA@)9;qMNJ>&E5T+>6b z4_a&8QV#EA*ylfi?d^UYo#uq24#c0zTy4X!q_~bX!$C ztozc})XMl|^+(g6`ZBqHy0EXZ?arlt+aByTNHN_p$!Vwi(?5@%rB=3flwFwYAjE3( z)L|2YuIaTdZmBfq56jq1qWA$dUE)vB%2Xp8N@_ zZNFT~?7vEZ`>gwgOUxwFVdQ I&MBb@05E86c>n+a literal 0 HcmV?d00001 diff --git a/resources/multimc/48x48/status-bad.png b/resources/multimc/48x48/status-bad.png new file mode 100644 index 0000000000000000000000000000000000000000..41c9cf22744aba58750410cc96da15d1e4f82aea GIT binary patch literal 2389 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 NJYD@<);T3K0RZVfPXPb` 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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/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 - - - - - - - - - - - - - - - -