5#include <bitcoin-build-config.h>
8#include <qt/forms/ui_modaloverlay.h>
10#include <chainparams.h>
13#include <QEasingCurve>
14#include <QPropertyAnimation>
15#include <QResizeEvent>
20 bestHeaderDate(QDateTime())
25 parent->installEventFilter(
this);
28 ui->closeButton->installEventFilter(
this);
33 ui->infoText->setVisible(
false);
34 ui->infoTextStrong->setText(tr(
"%1 is currently syncing. It will download headers and blocks from peers and validate them until reaching the tip of the block chain.").arg(CLIENT_NAME));
49 if (obj == parent()) {
50 if (ev->type() == QEvent::Resize) {
51 QResizeEvent * rev =
static_cast<QResizeEvent*
>(ev);
54 setGeometry(0, height(), width(), height());
60 else if (ev->type() == QEvent::ChildAdded) {
65 if (obj ==
ui->closeButton && ev->type() == QEvent::FocusOut &&
layerIsVisible) {
66 ui->closeButton->setFocus(Qt::OtherFocusReason);
69 return QWidget::eventFilter(obj, ev);
74 if (ev->type() == QEvent::ParentAboutToChange) {
75 if (parent()) parent()->removeEventFilter(
this);
77 else if (ev->type() == QEvent::ParentChange) {
79 parent()->installEventFilter(
this);
83 return QWidget::event(ev);
100 QDateTime currentDate = QDateTime::currentDateTime();
103 blockProcessTime.push_front(qMakePair(currentDate.toMSecsSinceEpoch(), nVerificationProgress));
107 double progressDelta = 0;
108 double progressPerHour = 0;
109 qint64 timeDelta = 0;
110 qint64 remainingMSecs = 0;
111 double remainingProgress = 1.0 - nVerificationProgress;
116 if (sample.first < (currentDate.toMSecsSinceEpoch() - 500 * 1000) || i ==
blockProcessTime.size() - 1) {
119 progressPerHour = (progressDelta > 0) ? progressDelta / (
double)timeDelta * 1000 * 3600 : 0;
120 remainingMSecs = (progressDelta > 0) ? remainingProgress / progressDelta * timeDelta : -1;
125 ui->progressIncreasePerH->setText(QString::number(progressPerHour * 100,
'f', 2)+
"%");
128 if(remainingMSecs >= 0) {
131 ui->expectedTimeLeft->setText(QObject::tr(
"unknown"));
134 static const int MAX_SAMPLES = 5000;
141 ui->newestBlockDate->setText(blockDate.toString());
144 ui->percentageProgress->setText(QString::number(nVerificationProgress*100,
'f', 2)+
"%");
160 ui->expectedTimeLeft->setText(tr(
"Unknown…"));
171 ui->numberOfBlocksLeft->setText(tr(
"Unknown. Pre-syncing Headers (%1, %2%)…").arg(height).arg(QString::number(100.0 / (height + est_headers_left) * height,
'f', 1)));
188 if (!isVisible() && !hide)
191 m_animation.setStartValue(QPoint(0, hide ? 0 : height()));
193 m_animation.setEndValue(QPoint(0, hide ? height() : 0));
194 m_animation.start(QAbstractAnimation::KeepWhenStopped);
198 ui->closeButton->setFocus(Qt::OtherFocusReason);
const CChainParams & Params()
Return the currently selected parameters.
const Consensus::Params & GetConsensus() const
Modal overlay to display information about the chain-sync state.
void showHide(bool hide=false, bool userRequested=false)
bool event(QEvent *ev) override
Tracks parent widget changes.
void tipUpdate(int count, const QDateTime &blockDate, double nVerificationProgress)
void UpdateHeaderSyncLabel()
ModalOverlay(bool enable_wallet, QWidget *parent)
void triggered(bool hidden)
void setKnownBestHeight(int count, const QDateTime &blockDate, bool presync)
QVector< QPair< qint64, double > > blockProcessTime
bool eventFilter(QObject *obj, QEvent *ev) override
void UpdateHeaderPresyncLabel(int height, const QDateTime &blockDate)
QPropertyAnimation m_animation
static constexpr int HEADER_HEIGHT_DELTA_SYNC
The required delta of headers to the estimated number of available headers until we show the IBD prog...
QString formatNiceTimeOffset(qint64 secs)
int64_t nPowTargetSpacing