forked from bitcoin/bitcoin
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Expand file tree
/
Copy pathinformationwidget.cpp
More file actions
129 lines (102 loc) · 4.34 KB
/
informationwidget.cpp
File metadata and controls
129 lines (102 loc) · 4.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// Copyright (c) 2011-2021 The Bitcoin Core developers
// Copyright (c) 2014-2026 The Dash Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
#include <qt/informationwidget.h>
#include <qt/forms/ui_informationwidget.h>
#include <chainparams.h>
#include <interfaces/node.h>
#include <qt/clientmodel.h>
#include <qt/guiutil.h>
#include <qt/guiutil_font.h>
#include <QDateTime>
namespace {
constexpr QChar nonbreaking_hyphen(8209);
} // anonymous namespace
InformationWidget::InformationWidget(QWidget* parent) :
QWidget(parent),
ui(new Ui::InformationWidget)
{
ui->setupUi(this);
GUIUtil::setFont({ui->label_9,
ui->label_10,
ui->labelMempoolTitle,
ui->labelNetwork},
{GUIUtil::FontWeight::Bold, 16});
for (auto* element : {ui->label_10, ui->labelNetwork, ui->labelMempoolTitle}) {
element->setContentsMargins(0, 10, 0, 0);
}
}
InformationWidget::~InformationWidget()
{
delete ui;
}
void InformationWidget::setClientModel(ClientModel* model)
{
clientModel = model;
if (clientModel) {
// Keep up to date with client
setNumConnections(model->getNumConnections());
connect(model, &ClientModel::numConnectionsChanged, this, &InformationWidget::setNumConnections);
updateNetworkState();
connect(model, &ClientModel::networkActiveChanged, this, &InformationWidget::setNetworkActive);
connect(model, &ClientModel::mempoolSizeChanged, this, &InformationWidget::setMempoolSize);
// Provide initial values
ui->blocksDir->setText(model->blocksDir());
ui->blocksDir->setToolTip(ui->blocksDir->toolTip().arg(QString(nonbreaking_hyphen) + "blocksdir"));
ui->dataDir->setText(model->dataDir());
ui->dataDir->setToolTip(ui->dataDir->toolTip().arg(QString(nonbreaking_hyphen) + "datadir"));
ui->clientUserAgent->setText(model->formatSubVersion());
ui->clientVersion->setText(model->formatFullVersion());
ui->networkName->setText(QString::fromStdString(Params().NetworkIDString()));
ui->startupTime->setText(model->formatClientStartupTime());
}
}
void InformationWidget::updateNetworkState()
{
if (!clientModel) return;
QString connections = QString::number(clientModel->getNumConnections()) + " (";
connections += tr("In:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_IN)) + " / ";
connections += tr("Out:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_OUT)) + ")";
if(!clientModel->node().getNetworkActive()) {
connections += " (" + tr("Network activity disabled") + ")";
}
ui->numberOfConnections->setText(connections);
QString local_addresses;
std::map<CNetAddr, LocalServiceInfo> hosts = clientModel->getNetLocalAddresses();
for (const auto& [addr, info] : hosts) {
local_addresses += QString::fromStdString(addr.ToStringAddr());
if (!addr.IsI2P()) local_addresses += ":" + QString::number(info.nPort);
local_addresses += ", ";
}
local_addresses.chop(2); // remove last ", "
if (local_addresses.isEmpty()) local_addresses = tr("None");
ui->localAddresses->setText(local_addresses);
}
void InformationWidget::setNumConnections(int count)
{
if (!clientModel)
return;
updateNetworkState();
}
void InformationWidget::setNetworkActive(bool networkActive)
{
updateNetworkState();
}
void InformationWidget::setNumBlocks(int count, const QDateTime& blockDate, const QString& blockHash, double nVerificationProgress, bool headers)
{
if (!headers) {
ui->numberOfBlocks->setText(QString::number(count));
ui->lastBlockTime->setText(blockDate.toString());
ui->lastBlockHash->setText(blockHash);
}
}
void InformationWidget::setMempoolSize(long numberOfTxs, size_t dynUsage, size_t maxUsage)
{
ui->mempoolNumberTxs->setText(QString::number(numberOfTxs));
const auto cur_usage_str = dynUsage < 1000000 ?
QObject::tr("%1 kB").arg(dynUsage / 1000.0, 0, 'f', 2) :
QObject::tr("%1 MB").arg(dynUsage / 1000000.0, 0, 'f', 2);
const auto max_usage_str = QObject::tr("%1 MB").arg(maxUsage / 1000000.0, 0, 'f', 2);
ui->mempoolSize->setText(cur_usage_str + " / " + max_usage_str);
}