Browse Source

Merge pull request #4463 from buinsky/b

Change appearance of speed labels in status bar
adaptive-webui-19844
sledgehammer999 9 years ago
parent
commit
e48649ac3e
  1. 239
      src/gui/statusbar.cpp
  2. 33
      src/gui/statusbar.h
  3. 5
      src/webui/www/private/index.html
  4. 9
      src/webui/www/public/css/Layout.css
  5. 14
      src/webui/www/public/scripts/client.js

239
src/gui/statusbar.cpp

@ -54,86 +54,91 @@ StatusBar::StatusBar(QStatusBar *bar)
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
connect(BitTorrent::Session::instance(), SIGNAL(speedLimitModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool))); connect(BitTorrent::Session::instance(), SIGNAL(speedLimitModeChanged(bool)), this, SLOT(updateAltSpeedsBtn(bool)));
container = new QWidget(bar); m_container = new QWidget(bar);
layout = new QHBoxLayout(container); m_layout = new QHBoxLayout(m_container);
layout->setContentsMargins(0, 0, 0, 0); m_layout->setContentsMargins(0,0,0,0);
container->setLayout(layout); m_container->setLayout(m_layout);
connecStatusLblIcon = new QPushButton(bar); m_connecStatusLblIcon = new QPushButton(bar);
connecStatusLblIcon->setFlat(true); m_connecStatusLblIcon->setFlat(true);
connecStatusLblIcon->setFocusPolicy(Qt::NoFocus); m_connecStatusLblIcon->setFocusPolicy(Qt::NoFocus);
connecStatusLblIcon->setCursor(Qt::PointingHandCursor); m_connecStatusLblIcon->setCursor(Qt::PointingHandCursor);
connecStatusLblIcon->setIcon(QIcon(":/icons/skin/firewalled.png")); m_connecStatusLblIcon->setIcon(QIcon(":/icons/skin/firewalled.png"));
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection status:") + QString::fromUtf8("</b><br>") + QString::fromUtf8("<i>") + tr("No direct connections. This may indicate network configuration problems.") + QString::fromUtf8("</i>")); m_connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection status:") + QString::fromUtf8("</b><br>") + QString::fromUtf8("<i>") + tr("No direct connections. This may indicate network configuration problems.") + QString::fromUtf8("</i>"));
dlSpeedLbl = new QPushButton(bar);
dlSpeedLbl->setIcon(QIcon(":/icons/skin/download.png"));
connect(dlSpeedLbl, SIGNAL(clicked()), this, SLOT(capDownloadSpeed()));
dlSpeedLbl->setFlat(true);
dlSpeedLbl->setFocusPolicy(Qt::NoFocus);
dlSpeedLbl->setCursor(Qt::PointingHandCursor);
upSpeedLbl = new QPushButton(bar); m_dlSpeedLbl = new QPushButton(bar);
upSpeedLbl->setIcon(QIcon(":/icons/skin/seeding.png")); m_dlSpeedLbl->setIcon(QIcon(":/icons/skin/download.png"));
connect(upSpeedLbl, SIGNAL(clicked()), this, SLOT(capUploadSpeed())); connect(m_dlSpeedLbl, SIGNAL(clicked()), this, SLOT(capDownloadSpeed()));
upSpeedLbl->setFlat(true); m_dlSpeedLbl->setFlat(true);
upSpeedLbl->setFocusPolicy(Qt::NoFocus); m_dlSpeedLbl->setFocusPolicy(Qt::NoFocus);
upSpeedLbl->setCursor(Qt::PointingHandCursor); m_dlSpeedLbl->setCursor(Qt::PointingHandCursor);
DHTLbl = new QLabel(tr("DHT: %1 nodes").arg(0), bar); m_dlSpeedLbl->setStyleSheet("text-align:left;");
DHTLbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); m_dlSpeedLbl->setMinimumWidth(200);
altSpeedsBtn = new QPushButton(bar); m_upSpeedLbl = new QPushButton(bar);
altSpeedsBtn->setFlat(true); m_upSpeedLbl->setIcon(QIcon(":/icons/skin/seeding.png"));
altSpeedsBtn->setFocusPolicy(Qt::NoFocus); connect(m_upSpeedLbl, SIGNAL(clicked()), this, SLOT(capUploadSpeed()));
altSpeedsBtn->setCursor(Qt::PointingHandCursor); m_upSpeedLbl->setFlat(true);
m_upSpeedLbl->setFocusPolicy(Qt::NoFocus);
m_upSpeedLbl->setCursor(Qt::PointingHandCursor);
m_upSpeedLbl->setStyleSheet("text-align:left;");
m_upSpeedLbl->setMinimumWidth(200);
m_DHTLbl = new QLabel(tr("DHT: %1 nodes").arg(0), bar);
m_DHTLbl->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
m_altSpeedsBtn = new QPushButton(bar);
m_altSpeedsBtn->setFlat(true);
m_altSpeedsBtn->setFocusPolicy(Qt::NoFocus);
m_altSpeedsBtn->setCursor(Qt::PointingHandCursor);
updateAltSpeedsBtn(pref->isAltBandwidthEnabled()); updateAltSpeedsBtn(pref->isAltBandwidthEnabled());
connect(altSpeedsBtn, SIGNAL(clicked()), this, SLOT(toggleAlternativeSpeeds())); connect(m_altSpeedsBtn, SIGNAL(clicked()), this, SLOT(toggleAlternativeSpeeds()));
// Because on some platforms the default icon size is bigger // Because on some platforms the default icon size is bigger
// and it will result in taller/fatter statusbar, even if the // and it will result in taller/fatter statusbar, even if the
// icons are actually 16x16 // icons are actually 16x16
connecStatusLblIcon->setIconSize(QSize(16, 16)); m_connecStatusLblIcon->setIconSize(QSize(16, 16));
dlSpeedLbl->setIconSize(QSize(16, 16)); m_dlSpeedLbl->setIconSize(QSize(16, 16));
upSpeedLbl->setIconSize(QSize(16, 16)); m_upSpeedLbl->setIconSize(QSize(16, 16));
altSpeedsBtn->setIconSize(QSize(28, 16)); m_altSpeedsBtn->setIconSize(QSize(28, 16));
// Set to the known maximum width(plus some padding) // Set to the known maximum width(plus some padding)
// so the speed widgets will take the rest of the space // so the speed widgets will take the rest of the space
connecStatusLblIcon->setMaximumWidth(16 + 6); m_connecStatusLblIcon->setMaximumWidth(16 + 6);
altSpeedsBtn->setMaximumWidth(28 + 6); m_altSpeedsBtn->setMaximumWidth(28 + 6);
statusSep1 = new QFrame(bar); m_statusSep1 = new QFrame(bar);
statusSep1->setFrameStyle(QFrame::VLine); m_statusSep1->setFrameStyle(QFrame::VLine);
statusSep1->setFrameShadow(QFrame::Raised); m_statusSep1->setFrameShadow(QFrame::Raised);
statusSep2 = new QFrame(bar); m_statusSep2 = new QFrame(bar);
statusSep2->setFrameStyle(QFrame::VLine); m_statusSep2->setFrameStyle(QFrame::VLine);
statusSep2->setFrameShadow(QFrame::Raised); m_statusSep2->setFrameShadow(QFrame::Raised);
statusSep3 = new QFrame(bar); m_statusSep3 = new QFrame(bar);
statusSep3->setFrameStyle(QFrame::VLine); m_statusSep3->setFrameStyle(QFrame::VLine);
statusSep3->setFrameShadow(QFrame::Raised); m_statusSep3->setFrameShadow(QFrame::Raised);
statusSep4 = new QFrame(bar); m_statusSep4 = new QFrame(bar);
statusSep4->setFrameStyle(QFrame::VLine); m_statusSep4->setFrameStyle(QFrame::VLine);
statusSep4->setFrameShadow(QFrame::Raised); m_statusSep4->setFrameShadow(QFrame::Raised);
layout->addWidget(DHTLbl); m_layout->addWidget(m_DHTLbl);
layout->addWidget(statusSep1); m_layout->addWidget(m_statusSep1);
layout->addWidget(connecStatusLblIcon); m_layout->addWidget(m_connecStatusLblIcon);
layout->addWidget(statusSep2); m_layout->addWidget(m_statusSep2);
layout->addWidget(altSpeedsBtn); m_layout->addWidget(m_altSpeedsBtn);
layout->addWidget(statusSep4); m_layout->addWidget(m_statusSep4);
layout->addWidget(dlSpeedLbl); m_layout->addWidget(m_dlSpeedLbl);
layout->addWidget(statusSep3); m_layout->addWidget(m_statusSep3);
layout->addWidget(upSpeedLbl); m_layout->addWidget(m_upSpeedLbl);
bar->addPermanentWidget(container); bar->addPermanentWidget(m_container);
container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
bar->setStyleSheet("QWidget {margin: 0;}"); bar->setStyleSheet("QWidget {margin: 0;}");
container->adjustSize(); m_container->adjustSize();
bar->adjustSize(); bar->adjustSize();
// Is DHT enabled // Is DHT enabled
DHTLbl->setVisible(pref->isDHTEnabled()); m_DHTLbl->setVisible(pref->isDHTEnabled());
refreshTimer = new QTimer(bar); m_refreshTimer = new QTimer(bar);
refreshStatusBar(); refreshStatusBar();
connect(refreshTimer, SIGNAL(timeout()), this, SLOT(refreshStatusBar())); connect(m_refreshTimer, SIGNAL(timeout()), this, SLOT(refreshStatusBar()));
refreshTimer->start(1500); m_refreshTimer->start(1500);
} }
StatusBar::~StatusBar() StatusBar::~StatusBar()
@ -143,83 +148,95 @@ StatusBar::~StatusBar()
QPushButton* StatusBar::connectionStatusButton() const QPushButton* StatusBar::connectionStatusButton() const
{ {
return connecStatusLblIcon; return m_connecStatusLblIcon;
} }
void StatusBar::showRestartRequired() void StatusBar::showRestartRequired()
{ {
// Restart required notification // Restart required notification
const QString restart_text = tr("qBittorrent needs to be restarted"); const QString restartText = tr("qBittorrent needs to be restarted");
QLabel *restartIconLbl = new QLabel(m_bar); QLabel *restartIconLbl = new QLabel(m_bar);
restartIconLbl->setPixmap(QPixmap(":/icons/oxygen/dialog-warning.png").scaled(QSize(24, 24))); restartIconLbl->setPixmap(QPixmap(":/icons/oxygen/dialog-warning.png").scaled(QSize(24,24)));
restartIconLbl->setToolTip(restart_text); restartIconLbl->setToolTip(restartText);
m_bar->insertWidget(0, restartIconLbl); m_bar->insertWidget(0, restartIconLbl);
QLabel *restartLbl = new QLabel(m_bar); QLabel *restartLbl = new QLabel(m_bar);
restartLbl->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); restartLbl->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
m_bar->insertWidget(1, restartLbl); m_bar->insertWidget(1, restartLbl);
QFontMetrics fm(restartLbl->font()); QFontMetrics fm(restartLbl->font());
restartLbl->setText(fm.elidedText(restart_text, Qt::ElideRight, restartLbl->width())); restartLbl->setText(fm.elidedText(restartText, Qt::ElideRight, restartLbl->width()));
Logger::instance()->addMessage(tr("qBittorrent was just updated and needs to be restarted for the changes to be effective."), Log::CRITICAL); Logger::instance()->addMessage(tr("qBittorrent was just updated and needs to be restarted for the changes to be effective."), Log::CRITICAL);
} }
void StatusBar::stopTimer() void StatusBar::stopTimer()
{ {
refreshTimer->stop(); m_refreshTimer->stop();
} }
void StatusBar::refreshStatusBar() void StatusBar::updateConnectionStatus(const BitTorrent::SessionStatus &sessionStatus)
{ {
// Update connection status
const BitTorrent::SessionStatus sessionStatus = BitTorrent::Session::instance()->status();
if (!BitTorrent::Session::instance()->isListening()) { if (!BitTorrent::Session::instance()->isListening()) {
connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/disconnected.png"))); m_connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/disconnected.png")));
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection Status:") + QString::fromUtf8("</b><br>") + tr("Offline. This usually means that qBittorrent failed to listen on the selected port for incoming connections.")); m_connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection Status:") + QString::fromUtf8("</b><br>") + tr("Offline. This usually means that qBittorrent failed to listen on the selected port for incoming connections."));
} }
else { else {
if (sessionStatus.hasIncomingConnections()) { if (sessionStatus.hasIncomingConnections()) {
// Connection OK // Connection OK
connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/connected.png"))); m_connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/connected.png")));
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection Status:") + QString::fromUtf8("</b><br>") + tr("Online")); m_connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection Status:") + QString::fromUtf8("</b><br>") + tr("Online"));
} }
else { else {
connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/firewalled.png"))); m_connecStatusLblIcon->setIcon(QIcon(QString::fromUtf8(":/icons/skin/firewalled.png")));
connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection status:") + QString::fromUtf8("</b><br>") + QString::fromUtf8("<i>") + tr("No direct connections. This may indicate network configuration problems.") + QString::fromUtf8("</i>")); m_connecStatusLblIcon->setToolTip(QString::fromUtf8("<b>") + tr("Connection status:") + QString::fromUtf8("</b><br>") + QString::fromUtf8("<i>") + tr("No direct connections. This may indicate network configuration problems.") + QString::fromUtf8("</i>"));
} }
} }
// Update Number of DHT nodes }
void StatusBar::updateDHTNodesNumber(const BitTorrent::SessionStatus &sessionStatus)
{
if (BitTorrent::Session::instance()->isDHTEnabled()) { if (BitTorrent::Session::instance()->isDHTEnabled()) {
DHTLbl->setVisible(true); m_DHTLbl->setVisible(true);
//statusSep1->setVisible(true); m_DHTLbl->setText(tr("DHT: %1 nodes").arg(QString::number(sessionStatus.dhtNodes())));
DHTLbl->setText(tr("DHT: %1 nodes").arg(QString::number(sessionStatus.dhtNodes())));
} }
else { else {
DHTLbl->setVisible(false); m_DHTLbl->setVisible(false);
//statusSep1->setVisible(false);
} }
// Update speed labels }
QString speedLbl = Utils::Misc::friendlyUnit(sessionStatus.payloadDownloadRate(), true) + " (" + Utils::Misc::friendlyUnit(sessionStatus.totalPayloadDownload()) + ")";
void StatusBar::updateSpeedLabels(const BitTorrent::SessionStatus &sessionStatus)
{
QString speedLbl = Utils::Misc::friendlyUnit(sessionStatus.payloadDownloadRate(), true);
int speedLimit = BitTorrent::Session::instance()->downloadRateLimit(); int speedLimit = BitTorrent::Session::instance()->downloadRateLimit();
if (speedLimit) if (speedLimit)
speedLbl = "[" + Utils::Misc::friendlyUnit(speedLimit, true) + "] " + speedLbl; speedLbl += " [" + Utils::Misc::friendlyUnit(speedLimit, true) + "]";
dlSpeedLbl->setText(speedLbl); speedLbl += " (" + Utils::Misc::friendlyUnit(sessionStatus.totalPayloadDownload()) + ")";
m_dlSpeedLbl->setText(speedLbl);
speedLimit = BitTorrent::Session::instance()->uploadRateLimit(); speedLimit = BitTorrent::Session::instance()->uploadRateLimit();
speedLbl = Utils::Misc::friendlyUnit(sessionStatus.payloadUploadRate(), true) + " (" + Utils::Misc::friendlyUnit(sessionStatus.totalPayloadUpload()) + ")"; speedLbl = Utils::Misc::friendlyUnit(sessionStatus.payloadUploadRate(), true);
if (speedLimit) if (speedLimit)
speedLbl = "[" + Utils::Misc::friendlyUnit(speedLimit, true) + "] " + speedLbl; speedLbl += " [" + Utils::Misc::friendlyUnit(speedLimit, true) + "]";
upSpeedLbl->setText(speedLbl); speedLbl += " (" + Utils::Misc::friendlyUnit(sessionStatus.totalPayloadUpload()) + ")";
m_upSpeedLbl->setText(speedLbl);
}
void StatusBar::refreshStatusBar()
{
const BitTorrent::SessionStatus sessionStatus = BitTorrent::Session::instance()->status();
updateConnectionStatus(sessionStatus);
updateDHTNodesNumber(sessionStatus);
updateSpeedLabels(sessionStatus);
} }
void StatusBar::updateAltSpeedsBtn(bool alternative) void StatusBar::updateAltSpeedsBtn(bool alternative)
{ {
if (alternative) { if (alternative) {
altSpeedsBtn->setIcon(QIcon(":/icons/slow.png")); m_altSpeedsBtn->setIcon(QIcon(":/icons/slow.png"));
altSpeedsBtn->setToolTip(tr("Click to switch to regular speed limits")); m_altSpeedsBtn->setToolTip(tr("Click to switch to regular speed limits"));
altSpeedsBtn->setDown(true); m_altSpeedsBtn->setDown(true);
} }
else { else {
altSpeedsBtn->setIcon(QIcon(":/icons/slow_off.png")); m_altSpeedsBtn->setIcon(QIcon(":/icons/slow_off.png"));
altSpeedsBtn->setToolTip(tr("Click to switch to alternative speed limits")); m_altSpeedsBtn->setToolTip(tr("Click to switch to alternative speed limits"));
altSpeedsBtn->setDown(false); m_altSpeedsBtn->setDown(false);
} }
refreshStatusBar(); refreshStatusBar();
} }
@ -235,12 +252,12 @@ void StatusBar::toggleAlternativeSpeeds()
void StatusBar::capDownloadSpeed() void StatusBar::capDownloadSpeed()
{ {
bool ok = false; bool ok = false;
int cur_limit = BitTorrent::Session::instance()->downloadRateLimit(); int curLimit = BitTorrent::Session::instance()->downloadRateLimit();
long new_limit = SpeedLimitDialog::askSpeedLimit(&ok, tr("Global Download Speed Limit"), cur_limit); long newLimit = SpeedLimitDialog::askSpeedLimit(&ok, tr("Global Download Speed Limit"), curLimit);
if (ok) { if (ok) {
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
bool alt = pref->isAltBandwidthEnabled(); bool alt = pref->isAltBandwidthEnabled();
if (new_limit <= 0) { if (newLimit <= 0) {
qDebug("Setting global download rate limit to Unlimited"); qDebug("Setting global download rate limit to Unlimited");
BitTorrent::Session::instance()->setDownloadRateLimit(-1); BitTorrent::Session::instance()->setDownloadRateLimit(-1);
if (!alt) if (!alt)
@ -249,12 +266,12 @@ void StatusBar::capDownloadSpeed()
pref->setAltGlobalDownloadLimit(-1); pref->setAltGlobalDownloadLimit(-1);
} }
else { else {
qDebug("Setting global download rate limit to %.1fKb/s", new_limit / 1024.); qDebug("Setting global download rate limit to %.1fKb/s", newLimit / 1024.);
BitTorrent::Session::instance()->setDownloadRateLimit(new_limit); BitTorrent::Session::instance()->setDownloadRateLimit(newLimit);
if (!alt) if (!alt)
pref->setGlobalDownloadLimit(new_limit / 1024.); pref->setGlobalDownloadLimit(newLimit / 1024.);
else else
pref->setAltGlobalDownloadLimit(new_limit / 1024.); pref->setAltGlobalDownloadLimit(newLimit / 1024.);
} }
refreshStatusBar(); refreshStatusBar();
} }
@ -263,12 +280,12 @@ void StatusBar::capDownloadSpeed()
void StatusBar::capUploadSpeed() void StatusBar::capUploadSpeed()
{ {
bool ok = false; bool ok = false;
int cur_limit = BitTorrent::Session::instance()->uploadRateLimit(); int curLimit = BitTorrent::Session::instance()->uploadRateLimit();
long new_limit = SpeedLimitDialog::askSpeedLimit(&ok, tr("Global Upload Speed Limit"), cur_limit); long newLimit = SpeedLimitDialog::askSpeedLimit(&ok, tr("Global Upload Speed Limit"), curLimit);
if (ok) { if (ok) {
Preferences* const pref = Preferences::instance(); Preferences* const pref = Preferences::instance();
bool alt = pref->isAltBandwidthEnabled(); bool alt = pref->isAltBandwidthEnabled();
if (new_limit <= 0) { if (newLimit <= 0) {
qDebug("Setting global upload rate limit to Unlimited"); qDebug("Setting global upload rate limit to Unlimited");
BitTorrent::Session::instance()->setUploadRateLimit(-1); BitTorrent::Session::instance()->setUploadRateLimit(-1);
if (!alt) if (!alt)
@ -277,12 +294,12 @@ void StatusBar::capUploadSpeed()
Preferences::instance()->setAltGlobalUploadLimit(-1); Preferences::instance()->setAltGlobalUploadLimit(-1);
} }
else { else {
qDebug("Setting global upload rate limit to %.1fKb/s", new_limit / 1024.); qDebug("Setting global upload rate limit to %.1fKb/s", newLimit / 1024.);
BitTorrent::Session::instance()->setUploadRateLimit(new_limit); BitTorrent::Session::instance()->setUploadRateLimit(newLimit);
if (!alt) if (!alt)
Preferences::instance()->setGlobalUploadLimit(new_limit / 1024.); Preferences::instance()->setGlobalUploadLimit(newLimit / 1024.);
else else
Preferences::instance()->setAltGlobalUploadLimit(new_limit / 1024.); Preferences::instance()->setAltGlobalUploadLimit(newLimit / 1024.);
} }
refreshStatusBar(); refreshStatusBar();
} }

33
src/gui/statusbar.h

@ -40,6 +40,11 @@ class QTimer;
class QPushButton; class QPushButton;
class QHBoxLayout; class QHBoxLayout;
namespace BitTorrent
{
class SessionStatus;
}
class StatusBar: public QObject class StatusBar: public QObject
{ {
Q_OBJECT Q_OBJECT
@ -61,18 +66,22 @@ public slots:
private: private:
QStatusBar *m_bar; QStatusBar *m_bar;
QPushButton *dlSpeedLbl; QPushButton *m_dlSpeedLbl;
QPushButton *upSpeedLbl; QPushButton *m_upSpeedLbl;
QLabel *DHTLbl; QLabel *m_DHTLbl;
QFrame *statusSep1; QFrame *m_statusSep1;
QFrame *statusSep2; QFrame *m_statusSep2;
QFrame *statusSep3; QFrame *m_statusSep3;
QFrame *statusSep4; QFrame *m_statusSep4;
QPushButton *connecStatusLblIcon; QPushButton *m_connecStatusLblIcon;
QPushButton *altSpeedsBtn; QPushButton *m_altSpeedsBtn;
QTimer *refreshTimer; QTimer *m_refreshTimer;
QWidget *container; QWidget *m_container;
QHBoxLayout *layout; QHBoxLayout *m_layout;
void updateConnectionStatus(const BitTorrent::SessionStatus &sessionStatus);
void updateDHTNodesNumber(const BitTorrent::SessionStatus &sessionStatus);
void updateSpeedLabels(const BitTorrent::SessionStatus &sessionStatus);
}; };
#endif // STATUSBAR_H #endif // STATUSBAR_H

5
src/webui/www/private/index.html

@ -136,9 +136,10 @@
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
<td style="cursor:pointer;"><img id="alternativeSpeedLimits" alt="QBT_TR(Alternative speed limits)QBT_TR" src="images/slow_off.png" /></td> <td style="cursor:pointer;"><img id="alternativeSpeedLimits" alt="QBT_TR(Alternative speed limits)QBT_TR" src="images/slow_off.png" /></td>
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
<td style="cursor:pointer; min-width: 200px"><img src="images/skin/download.png" alt="" style="padding-right: 5px; margin-bottom: -4px;"><span id="DlInfos"></span></td> <td class="speedLabel"><img src="images/skin/download.png" alt="" style="padding-right: 5px; margin-bottom: -4px;"><span id="DlInfos"></span></td>
<td class="statusBarSeparator"></td> <td class="statusBarSeparator"></td>
<td style="cursor:pointer; min-width: 200px"><img src="images/skin/seeding.png" alt="" style="padding-right: 5px; margin-bottom: -3px;"><span id="UpInfos"></span></td></tr> <td class="speedLabel"><img src="images/skin/seeding.png" alt="" style="padding-right: 5px; margin-bottom: -3px;"><span id="UpInfos"></span></td>
</tr>
</table> </table>
</div> </div>
</div> </div>

9
src/webui/www/public/css/Layout.css

@ -420,9 +420,14 @@ div.toolbox.divider { /* Have to specify div here for IE6's sake */
background: url(../images/skin/spinner.gif) no-repeat; background: url(../images/skin/spinner.gif) no-repeat;
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
#desktopFooter td { #desktopFooter td {
vertical-align: top; vertical-align: top;
text-align: center; text-align: left;
} }
td.speedLabel {
cursor:pointer;
min-width: 18em;
}

14
src/webui/www/public/scripts/client.js

@ -373,17 +373,15 @@ window.addEvent('load', function () {
} }
var processServerState = function () { var processServerState = function () {
var transfer_info = ""; var transfer_info = friendlyUnit(serverState.dl_info_speed, true);
if (serverState.dl_rate_limit > 0) if (serverState.dl_rate_limit > 0)
transfer_info += "[" + friendlyUnit(serverState.dl_rate_limit, true) + "] "; transfer_info += " [" + friendlyUnit(serverState.dl_rate_limit, true) + "]";
transfer_info += friendlyUnit(serverState.dl_info_speed, true); transfer_info += " (" + friendlyUnit(serverState.dl_info_data, false) + ")";
transfer_info += " (" + friendlyUnit(serverState.dl_info_data, false) + ")"
$("DlInfos").set('html', transfer_info); $("DlInfos").set('html', transfer_info);
transfer_info = ""; transfer_info = friendlyUnit(serverState.up_info_speed, true);
if (serverState.up_rate_limit > 0) if (serverState.up_rate_limit > 0)
transfer_info += "[" + friendlyUnit(serverState.up_rate_limit, true) + "] "; transfer_info += " [" + friendlyUnit(serverState.up_rate_limit, true) + "]";
transfer_info += friendlyUnit(serverState.up_info_speed, true) transfer_info += " (" + friendlyUnit(serverState.up_info_data, false) + ")";
transfer_info += " (" + friendlyUnit(serverState.up_info_data, false) + ")"
$("UpInfos").set('html', transfer_info); $("UpInfos").set('html', transfer_info);
if (speedInTitle) { if (speedInTitle) {
document.title = "QBT_TR([D:%1 U:%2])QBT_TR".replace("%1", friendlyUnit(serverState.dl_info_speed, true)).replace("%2", friendlyUnit(serverState.up_info_speed, true)); document.title = "QBT_TR([D:%1 U:%2])QBT_TR".replace("%1", friendlyUnit(serverState.dl_info_speed, true)).replace("%2", friendlyUnit(serverState.up_info_speed, true));

Loading…
Cancel
Save