mirror of
https://github.com/dashpay/dash.git
synced 2024-12-25 20:12:57 +01:00
show rotating spinner when block download out of date, tick otherwise
This commit is contained in:
parent
5df0b03c95
commit
8dcffd4d07
@ -14,7 +14,7 @@ Designer: FatCow Web Hosting
|
|||||||
License: Creative Commons Attribution (by)
|
License: Creative Commons Attribution (by)
|
||||||
Site: http://findicons.com/icon/163938/book_open
|
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
|
Icon Pack: Human-O2
|
||||||
Designer: schollidesign
|
Designer: schollidesign
|
||||||
License: GNU/GPL
|
License: GNU/GPL
|
||||||
@ -52,9 +52,8 @@ Designer: Jack Cai
|
|||||||
License: Creative Commons Attribution No Derivatives (by-nd)
|
License: Creative Commons Attribution No Derivatives (by-nd)
|
||||||
Site: http://findicons.com/icon/175944/home?id=176221#
|
Site: http://findicons.com/icon/175944/home?id=176221#
|
||||||
|
|
||||||
Icon: src/qt/res/icons/synced.png,
|
Icon: scripts/img/reload.xcf (modified),src/qt/res/movies/update_spinner.mng
|
||||||
src/qt/res/icons/notsynced.png
|
Icon Pack: Kids
|
||||||
Icon Pack: Gloss: Basic
|
Designer: Everaldo (Everaldo Coelho)
|
||||||
Designer: Momenticons
|
License: GNU/GPL
|
||||||
License: Creative Commons Attribution (by)
|
Site: http://findicons.com/icon/17102/reload?id=17102
|
||||||
Site: http://www.momenticons.com/
|
|
||||||
|
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="overview">res/icons/overview.png</file>
|
||||||
<file alias="export">res/icons/export.png</file>
|
<file alias="export">res/icons/export.png</file>
|
||||||
<file alias="synced">res/icons/synced.png</file>
|
<file alias="synced">res/icons/synced.png</file>
|
||||||
<file alias="notsynced">res/icons/notsynced.png</file>
|
<file alias="remove">res/icons/remove.png</file>
|
||||||
<file>res/icons/remove.png</file>
|
|
||||||
</qresource>
|
</qresource>
|
||||||
<qresource prefix="/images">
|
<qresource prefix="/images">
|
||||||
<file alias="about">res/images/about.png</file>
|
<file alias="about">res/images/about.png</file>
|
||||||
</qresource>
|
</qresource>
|
||||||
|
<qresource prefix="/movies">
|
||||||
|
<file alias="update_spinner">res/movies/update_spinner.mng</file>
|
||||||
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <QProgressBar>
|
#include <QProgressBar>
|
||||||
#include <QStackedWidget>
|
#include <QStackedWidget>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QMovie>
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
@ -107,17 +108,35 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
|
|||||||
// Create status bar
|
// Create status bar
|
||||||
statusBar();
|
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 = new QLabel();
|
||||||
labelConnections->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
|
||||||
labelConnections->setMinimumWidth(150);
|
|
||||||
labelConnections->setMaximumWidth(150);
|
|
||||||
labelConnections->setToolTip(tr("Number of connections to other clients"));
|
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 = new QLabel();
|
||||||
labelBlocks->setFrameStyle(QFrame::Panel | QFrame::Sunken);
|
frameBlocksLayout->addWidget(labelBlocks);
|
||||||
labelBlocks->setMinimumWidth(150);
|
frameBlocksLayout->addStretch();
|
||||||
labelBlocks->setMaximumWidth(150);
|
|
||||||
labelBlocks->setToolTip(tr("Number of blocks in the block chain"));
|
|
||||||
|
|
||||||
// Progress bar for blocks download
|
// Progress bar for blocks download
|
||||||
progressBarLabel = new QLabel(tr("Synchronizing with network..."));
|
progressBarLabel = new QLabel(tr("Synchronizing with network..."));
|
||||||
@ -128,11 +147,13 @@ BitcoinGUI::BitcoinGUI(QWidget *parent):
|
|||||||
|
|
||||||
statusBar()->addWidget(progressBarLabel);
|
statusBar()->addWidget(progressBarLabel);
|
||||||
statusBar()->addWidget(progressBar);
|
statusBar()->addWidget(progressBar);
|
||||||
statusBar()->addPermanentWidget(labelConnections);
|
statusBar()->addPermanentWidget(frameConnections);
|
||||||
statusBar()->addPermanentWidget(labelBlocks);
|
statusBar()->addPermanentWidget(frameBlocks);
|
||||||
|
|
||||||
createTrayIcon();
|
createTrayIcon();
|
||||||
|
|
||||||
|
syncIconMovie = new QMovie(":/movies/update_spinner", "mng", this);
|
||||||
|
|
||||||
gotoOverviewPage();
|
gotoOverviewPage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -285,8 +306,8 @@ void BitcoinGUI::setNumConnections(int count)
|
|||||||
case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
|
case 7: case 8: case 9: icon = ":/icons/connect_3"; break;
|
||||||
default: icon = ":/icons/connect_4"; break;
|
default: icon = ":/icons/connect_4"; break;
|
||||||
}
|
}
|
||||||
labelConnections->setTextFormat(Qt::RichText);
|
labelConnectionsIcon->setPixmap(QIcon(icon).pixmap(16,16));
|
||||||
labelConnections->setText("<img src=\""+icon+"\"> " + tr("%n connection(s)", "", count));
|
labelConnections->setText(tr("%n connection(s)", "", count));
|
||||||
}
|
}
|
||||||
|
|
||||||
void BitcoinGUI::setNumBlocks(int count)
|
void BitcoinGUI::setNumBlocks(int count)
|
||||||
@ -313,13 +334,13 @@ void BitcoinGUI::setNumBlocks(int count)
|
|||||||
QDateTime lastBlockDate = clientModel->getLastBlockDate();
|
QDateTime lastBlockDate = clientModel->getLastBlockDate();
|
||||||
int secs = lastBlockDate.secsTo(now);
|
int secs = lastBlockDate.secsTo(now);
|
||||||
QString text;
|
QString text;
|
||||||
QString icon = ":/icons/notsynced";
|
bool spinning = true;
|
||||||
|
|
||||||
// "Up to date" icon, and outdated icon
|
// "Up to date" icon, and outdated icon
|
||||||
if(secs < 30*60)
|
if(secs < 30*60)
|
||||||
{
|
{
|
||||||
text = "Up to date";
|
text = "Up to date";
|
||||||
icon = ":/icons/synced";
|
spinning = false;
|
||||||
}
|
}
|
||||||
else if(secs < 60*60)
|
else if(secs < 60*60)
|
||||||
{
|
{
|
||||||
@ -334,9 +355,20 @@ void BitcoinGUI::setNumBlocks(int count)
|
|||||||
text = tr("%n day(s) ago","",secs/(60*60*24));
|
text = tr("%n day(s) ago","",secs/(60*60*24));
|
||||||
}
|
}
|
||||||
tooltip += QString("\n");
|
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);
|
labelBlocks->setToolTip(tooltip);
|
||||||
progressBarLabel->setToolTip(tooltip);
|
progressBarLabel->setToolTip(tooltip);
|
||||||
progressBar->setToolTip(tooltip);
|
progressBar->setToolTip(tooltip);
|
||||||
|
@ -57,6 +57,7 @@ private:
|
|||||||
QLabel *labelConnections;
|
QLabel *labelConnections;
|
||||||
QLabel *labelConnectionsIcon;
|
QLabel *labelConnectionsIcon;
|
||||||
QLabel *labelBlocks;
|
QLabel *labelBlocks;
|
||||||
|
QLabel *labelBlocksIcon;
|
||||||
QLabel *progressBarLabel;
|
QLabel *progressBarLabel;
|
||||||
QProgressBar *progressBar;
|
QProgressBar *progressBar;
|
||||||
|
|
||||||
@ -74,6 +75,8 @@ private:
|
|||||||
QSystemTrayIcon *trayIcon;
|
QSystemTrayIcon *trayIcon;
|
||||||
TransactionView *transactionView;
|
TransactionView *transactionView;
|
||||||
|
|
||||||
|
QMovie *syncIconMovie;
|
||||||
|
|
||||||
void createActions();
|
void createActions();
|
||||||
QWidget *createTabs();
|
QWidget *createTabs();
|
||||||
void createTrayIcon();
|
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 New Issue
Block a user