show rotating spinner when block download out of date, tick otherwise
This commit is contained in:
parent
5df0b03c95
commit
8dcffd4d07
9 changed files with 101 additions and 24 deletions
|
@ -14,7 +14,7 @@ Designer: FatCow Web Hosting
|
|||
License: Creative Commons Attribution (by)
|
||||
Site: http://findicons.com/icon/163938/book_open
|
||||
|
||||
Icon: src/qt/res/icons/connect*.png
|
||||
Icon: src/qt/res/icons/connect*.png, src/qt/res/icons/synced.png
|
||||
Icon Pack: Human-O2
|
||||
Designer: schollidesign
|
||||
License: GNU/GPL
|
||||
|
@ -52,9 +52,8 @@ Designer: Jack Cai
|
|||
License: Creative Commons Attribution No Derivatives (by-nd)
|
||||
Site: http://findicons.com/icon/175944/home?id=176221#
|
||||
|
||||
Icon: src/qt/res/icons/synced.png,
|
||||
src/qt/res/icons/notsynced.png
|
||||
Icon Pack: Gloss: Basic
|
||||
Designer: Momenticons
|
||||
License: Creative Commons Attribution (by)
|
||||
Site: http://www.momenticons.com/
|
||||
Icon: scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng
|
||||
Icon Pack: Kids
|
||||
Designer: Everaldo (Everaldo Coelho)
|
||||
License: GNU/GPL
|
||||
Site: http://findicons.com/icon/17102/reload?id=17102
|
||||
|
|
BIN
scripts/img/reload.xcf
Normal file
BIN
scripts/img/reload.xcf
Normal file
Binary file not shown.
BIN
scripts/img/reload_scaled.png
Normal file
BIN
scripts/img/reload_scaled.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 905 B |
41
scripts/make_spinner.py
Executable file
41
scripts/make_spinner.py
Executable file
|
@ -0,0 +1,41 @@
|
|||
#!/usr/bin/env python
|
||||
# W.J. van der Laan, 2011
|
||||
# Make spinning .mng animation from a .png
|
||||
# Requires imagemagick 6.7+
|
||||
from __future__ import division
|
||||
from os import path
|
||||
from PIL import Image
|
||||
from subprocess import Popen
|
||||
|
||||
SRC='img/reload_scaled.png'
|
||||
DST='../src/qt/res/movies/update_spinner.mng'
|
||||
TMPDIR='/tmp'
|
||||
TMPNAME='tmp-%03i.png'
|
||||
NUMFRAMES=35
|
||||
FRAMERATE=10.0
|
||||
CONVERT='convert'
|
||||
CLOCKWISE=True
|
||||
|
||||
im_src = Image.open(SRC)
|
||||
|
||||
if CLOCKWISE:
|
||||
im_src = im_src.transpose(Image.FLIP_LEFT_RIGHT)
|
||||
|
||||
def frame_to_filename(frame):
|
||||
return path.join(TMPDIR, TMPNAME % frame)
|
||||
|
||||
frame_files = []
|
||||
for frame in xrange(NUMFRAMES):
|
||||
rotation = (frame + 0.5) / NUMFRAMES * 360.0
|
||||
if CLOCKWISE:
|
||||
rotation = -rotation
|
||||
im_new = im_src.rotate(rotation, Image.BICUBIC)
|
||||
outfile = frame_to_filename(frame)
|
||||
im_new.save(outfile, 'png')
|
||||
frame_files.append(outfile)
|
||||
|
||||
p = Popen([CONVERT, "-delay", str(FRAMERATE), "-dispose", "2"] + frame_files + [DST])
|
||||
p.communicate()
|
||||
|
||||
|
||||
|
|
@ -30,10 +30,12 @@
|
|||
<file alias="overview">res/icons/overview.png</file>
|
||||
<file alias="export">res/icons/export.png</file>
|
||||
<file alias="synced">res/icons/synced.png</file>
|
||||
<file alias="notsynced">res/icons/notsynced.png</file>
|
||||
<file>res/icons/remove.png</file>
|
||||
<file alias="remove">res/icons/remove.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/images">
|
||||
<file alias="about">res/images/about.png</file>
|
||||
</qresource>
|
||||
<qresource prefix="/movies">
|
||||
<file alias="update_spinner">res/movies/update_spinner.mng</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include <QProgressBar>
|
||||
#include <QStackedWidget>
|
||||
#include <QDateTime>
|
||||
#include <QMovie>
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
|
@ -107,17 +108,35 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
|
|||
// Create status bar
|
||||
statusBar();
|
||||
|
||||
// Status bar "Connections" notification
|
||||
QFrame *frameConnections = new QFrame();
|
||||
frameConnections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||
frameConnections->setMinimumWidth(150);
|
||||
frameConnections->setMaximumWidth(150);
|
||||
QHBoxLayout *frameConnectionsLayout = new QHBoxLayout(frameConnections);
|
||||
frameConnectionsLayout->setContentsMargins(3,0,3,0);
|
||||
frameConnectionsLayout->setSpacing(3);
|
||||
labelConnectionsIcon = new QLabel();
|
||||
labelConnectionsIcon->setToolTip(tr("Number of connections to other clients"));
|
||||
frameConnectionsLayout->addWidget(labelConnectionsIcon);
|
||||
labelConnections = new QLabel();
|
||||
labelConnections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||
labelConnections->setMinimumWidth(150);
|
||||
labelConnections->setMaximumWidth(150);
|
||||
labelConnections->setToolTip(tr("Number of connections to other clients"));
|
||||
frameConnectionsLayout->addWidget(labelConnections);
|
||||
frameConnectionsLayout->addStretch();
|
||||
|
||||
// Status bar "Blocks" notification
|
||||
QFrame *frameBlocks = new QFrame();
|
||||
frameBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||
frameBlocks->setMinimumWidth(150);
|
||||
frameBlocks->setMaximumWidth(150);
|
||||
QHBoxLayout *frameBlocksLayout = new QHBoxLayout(frameBlocks);
|
||||
frameBlocksLayout->setContentsMargins(3,0,3,0);
|
||||
frameBlocksLayout->setSpacing(3);
|
||||
labelBlocksIcon = new QLabel();
|
||||
frameBlocksLayout->addWidget(labelBlocksIcon);
|
||||
labelBlocks = new QLabel();
|
||||
labelBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
||||
labelBlocks->setMinimumWidth(150);
|
||||
labelBlocks->setMaximumWidth(150);
|
||||
labelBlocks->setToolTip(tr("Number of blocks in the block chain"));
|
||||
frameBlocksLayout->addWidget(labelBlocks);
|
||||
frameBlocksLayout->addStretch();
|
||||
|
||||
// Progress bar for blocks download
|
||||
progressBarLabel = new QLabel(tr("Synchronizing with network..."));
|
||||
|
@ -128,11 +147,13 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
|
|||
|
||||
statusBar()->addWidget(progressBarLabel);
|
||||
statusBar()->addWidget(progressBar);
|
||||
statusBar()->addPermanentWidget(labelConnections);
|
||||
statusBar()->addPermanentWidget(labelBlocks);
|
||||
statusBar()->addPermanentWidget(frameConnections);
|
||||
statusBar()->addPermanentWidget(frameBlocks);
|
||||
|
||||
createTrayIcon();
|
||||
|
||||
syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this);
|
||||
|
||||
gotoOverviewPage();
|
||||
}
|
||||
|
||||
|
@ -285,8 +306,8 @@ void BitcoinGUI::setNumConnections(int count)
|
|||
case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
|
||||
default: icon = ":/icons/connect_4"; break;
|
||||
}
|
||||
labelConnections->setTextFormat(Qt::RichText);
|
||||
labelConnections->setText("<img src=\""+icon+"\"> " + tr("%n connection(s)", "", count));
|
||||
labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(16,16));
|
||||
labelConnections->setText(tr("%n connection(s)", "", count));
|
||||
}
|
||||
|
||||
void BitcoinGUI::setNumBlocks(int count)
|
||||
|
@ -313,13 +334,13 @@ void BitcoinGUI::setNumBlocks(int count)
|
|||
QDateTime lastBlockDate = clientModel->getLastBlockDate();
|
||||
int secs = lastBlockDate.secsTo(now);
|
||||
QString text;
|
||||
QString icon = ":/icons/notsynced";
|
||||
bool spinning = true;
|
||||
|
||||
// "Up to date" icon, and outdated icon
|
||||
if(secs < 30*60)
|
||||
{
|
||||
text = "Up to date";
|
||||
icon = ":/icons/synced";
|
||||
spinning = false;
|
||||
}
|
||||
else if(secs < 60*60)
|
||||
{
|
||||
|
@ -334,9 +355,20 @@ void BitcoinGUI::setNumBlocks(int count)
|
|||
text = tr("%n day(s) ago","",secs/(60*60*24));
|
||||
}
|
||||
tooltip += QString("\n");
|
||||
tooltip += tr("Last block was generated %1.").arg(QLocale::system().toString(lastBlockDate));
|
||||
tooltip += tr("Last received block was generated %1.").arg(text);
|
||||
|
||||
labelBlocks->setText("<img src=\""+icon+"\"> " + text);
|
||||
if(spinning)
|
||||
{
|
||||
labelBlocksIcon->setMovie(syncIconMovie);
|
||||
syncIconMovie->start();
|
||||
}
|
||||
else
|
||||
{
|
||||
labelBlocksIcon->setPixmap(QIcon(":/icons/synced").pixmap(16,16));
|
||||
}
|
||||
labelBlocks->setText(text);
|
||||
|
||||
labelBlocksIcon->setToolTip(tooltip);
|
||||
labelBlocks->setToolTip(tooltip);
|
||||
progressBarLabel->setToolTip(tooltip);
|
||||
progressBar->setToolTip(tooltip);
|
||||
|
|
|
@ -57,6 +57,7 @@ private:
|
|||
QLabel *labelConnections;
|
||||
QLabel *labelConnectionsIcon;
|
||||
QLabel *labelBlocks;
|
||||
QLabel *labelBlocksIcon;
|
||||
QLabel *progressBarLabel;
|
||||
QProgressBar *progressBar;
|
||||
|
||||
|
@ -74,6 +75,8 @@ private:
|
|||
QSystemTrayIcon *trayIcon;
|
||||
TransactionView *transactionView;
|
||||
|
||||
QMovie *syncIconMovie;
|
||||
|
||||
void createActions();
|
||||
QWidget *createTabs();
|
||||
void createTrayIcon();
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 698 B |
BIN
src/qt/res/movies/update_spinner.mng
Normal file
BIN
src/qt/res/movies/update_spinner.mng
Normal file
Binary file not shown.
Loading…
Reference in a new issue