PIVX Core  5.6.99
P2P Digital Currency
informationwidget.cpp
Go to the documentation of this file.
1 // Copyright (c) 2019-2022 The PIVX Core developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or https://www.opensource.org/licenses/mit-license.php.
4 
6 #include "qt/settings/forms/ui_informationwidget.h"
7 
8 #include "chainparams.h"
9 #include "clientmodel.h"
10 #include "db.h"
11 #include "guiutil.h"
12 #include "qtutils.h"
13 #include "util/system.h"
14 
15 #include <QDir>
16 
17 #define REQUEST_UPDATE_COUNTS 0
18 
20  PWidget(_window,parent),
22 {
23  ui->setupUi(this);
24 
25  this->setStyleSheet(parent->styleSheet());
26 
27  // Containers
28  setCssProperty(ui->left, "container");
29  ui->left->setContentsMargins(10,10,10,10);
30  setCssProperty({ui->layoutOptions1, ui->layoutOptions2, ui->layoutOptions3}, "container-options");
31 
32  // Title
33  setCssTitleScreen(ui->labelTitle);
34 
36  ui->labelTitleDataDir,
37  ui->labelTitleBerkeley,
38  ui->labelTitleAgent,
39  ui->labelTitleClient,
40  ui->labelTitleTime,
41  ui->labelTitleName,
42  ui->labelTitleConnections,
43  ui->labelTitleMasternodes,
44  ui->labelTitleBlockNumber,
45  ui->labelTitleBlockTime,
46  ui->labelTitleBlockHash,
47  ui->labelTitleNumberTransactions,
48  ui->labelInfoNumberTransactions,
49  ui->labelInfoClient,
50  ui->labelInfoAgent,
51  ui->labelInfoBerkeley,
52  ui->labelInfoDataDir,
53  ui->labelInfoTime,
54  ui->labelInfoConnections,
55  ui->labelInfoMasternodes,
56  ui->labelInfoBlockNumber
57  }, "text-main-settings");
58 
60  ui->labelTitleGeneral,
61  ui->labelTitleNetwork,
62  ui->labelTitleBlockchain,
63  ui->labelTitleMemory,
64 
65  },"text-title");
66 
67  // TODO: Mempool section is not currently implemented and instead, hidden for now
68  ui->labelTitleMemory->setVisible(false);
69  ui->labelTitleNumberTransactions->setVisible(false);
70  ui->labelInfoNumberTransactions->setText("0");
71  ui->labelInfoNumberTransactions->setVisible(false);
72 
73  // Information Network
74  ui->labelInfoName->setText(tr("Main"));
75  ui->labelInfoName->setProperty("cssClass", "text-main-settings");
76  ui->labelInfoConnections->setText("0 (In: 0 / Out: 0)");
77  ui->labelInfoMasternodes->setText("Total: 0 (IPv4: 0 / IPv6: 0 / Tor: 0 / Unknown: 0");
78 
79  // Information Blockchain
80  ui->labelInfoBlockNumber->setText("0");
81  ui->labelInfoBlockTime->setText("Sept 6, 2018. Thursday, 8:21:49 PM");
82  ui->labelInfoBlockTime->setProperty("cssClass", "text-main-grey");
83  ui->labelInfoBlockHash->setProperty("cssClass", "text-main-hash");
84 
85  // Buttons
86  setCssBtnSecondary(ui->pushButtonBackups);
87  setCssBtnSecondary(ui->pushButtonFile);
88  setCssBtnSecondary(ui->pushButtonNetworkMonitor);
89 
90  // Data
91 #ifdef ENABLE_WALLET
92  // Wallet data -- remove it with if it's needed
93  ui->labelInfoBerkeley->setText(DbEnv::version(0, 0, 0));
94 #else
95  ui->labelInfoBerkeley->setText(tr("No information"));
96 #endif
97 
98  connect(ui->pushButtonBackups, &QPushButton::clicked, [this](){
99  if (!GUIUtil::showBackups())
100  inform(tr("Unable to open backups folder"));
101  });
102  connect(ui->pushButtonFile, &QPushButton::clicked, [this](){
103  if (!GUIUtil::openConfigfile())
104  inform(tr("Unable to open pivx.conf with default application"));
105  });
106  connect(ui->pushButtonNetworkMonitor, &QPushButton::clicked, this, &SettingsInformationWidget::openNetworkMonitor);
107 }
108 
109 
111 {
113  // Provide initial values
114  ui->labelInfoClient->setText(clientModel->formatFullVersion());
115  ui->labelInfoAgent->setText(clientModel->clientName());
116  ui->labelInfoTime->setText(clientModel->formatClientStartupTime());
117  ui->labelInfoName->setText(QString::fromStdString(Params().NetworkIDString()));
118  ui->labelInfoDataDir->setText(clientModel->dataDir());
119 
123 
126 
128  }
129 }
130 
132 {
133  bool netActivityState = clientModel->getNetworkActive();
134 
135  QString connections;
136  if (!netActivityState && numConnections == 0) {
137  connections = tr("Network activity disabled");
138  } else {
139  connections = QString::number(numConnections) + " (";
140  connections += tr("In:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_IN)) + " / ";
141  connections += tr("Out:") + " " + QString::number(clientModel->getNumConnections(CONNECTIONS_OUT)) + ")";
142  if(!netActivityState) {
143  connections += " " + tr("Network activity disabled");
144  }
145  }
146  ui->labelInfoConnections->setText(connections);
147 }
148 
150 {
151  if (!clientModel)
152  return;
153  updateNetworkState(count);
154 }
155 
157 {
159 }
160 
162 {
163  if (!isVisible()) return;
164  ui->labelInfoBlockNumber->setText(QString::number(count));
165  if (clientModel) {
166  ui->labelInfoBlockTime->setText(clientModel->getLastBlockDate().toString());
167  ui->labelInfoBlockHash->setText(clientModel->getLastBlockHash());
168  }
169 }
170 
171 void SettingsInformationWidget::setMasternodeCount(const QString& strMasternodes)
172 {
173  ui->labelInfoMasternodes->setText(strMasternodes);
174 }
175 
177 {
178  if (!rpcConsole) {
179  rpcConsole = new RPCConsole(nullptr);
182  }
184 }
185 
187 {
188  QWidget::showEvent(event);
189  if (clientModel) {
191  // Initial masternodes count value, running in a worker thread to not lock mnmanager mutex in the main thread.
193  }
194 }
195 
196 void SettingsInformationWidget::hideEvent(QHideEvent *event) {
197  QWidget::hideEvent(event);
198  if (clientModel) {
200  }
201 }
202 
204 {
205  if (type == REQUEST_UPDATE_COUNTS) {
206  QMetaObject::invokeMethod(this, "setMasternodeCount",
207  Qt::QueuedConnection, Q_ARG(QString, clientModel->getMasternodesCountString()));
208  QMetaObject::invokeMethod(this, "setNumBlocks",
209  Qt::QueuedConnection, Q_ARG(int, clientModel->getLastBlockProcessedHeight()));
210  }
211 }
212 
214 {
215  if (type == REQUEST_UPDATE_COUNTS) {
216  setMasternodeCount(tr("No available data"));
217  }
218 }
219 
221 {
222  delete ui;
223 }
const CChainParams & Params()
Return the currently selected parameters.
QString getLastBlockHash() const
QString clientName() const
void startMasternodesTimer()
PeerTableModel * getPeerTableModel()
void numBlocksChanged(int count)
void stopMasternodesTimer()
QDateTime getLastBlockDate() const
void strMasternodesChanged(const QString &strMasternodes)
void numConnectionsChanged(int count)
int getNumBlocks()
bool getNetworkActive() const
Return true if network activity in core is enabled.
QString formatClientStartupTime() const
QString getMasternodesCountString()
Definition: clientmodel.cpp:91
int getNumConnections(unsigned int flags=CONNECTIONS_ALL) const
Return number of connections, default is in- and outbound (total)
Definition: clientmodel.cpp:63
BanTableModel * getBanTableModel()
QString dataDir() const
QString formatFullVersion() const
int getLastBlockProcessedHeight() const
void networkActiveChanged(bool networkActive)
PIVX GUI main class.
Definition: pivxgui.h:46
WalletModel * walletModel
Definition: pwidget.h:61
ClientModel * clientModel
Definition: pwidget.h:60
bool execute(int type, std::unique_ptr< WalletModel::UnlockContext > pctx=nullptr)
Definition: pwidget.cpp:94
Local Bitcoin RPC console.
Definition: rpcconsole.h:33
void setWalletModel(WalletModel *model)
Definition: rpcconsole.cpp:290
void setClientModel(ClientModel *model)
Definition: rpcconsole.cpp:173
void showNetwork()
Switch to network tab and show.
Definition: rpcconsole.cpp:610
void setMasternodeCount(const QString &strMasternodes)
void showEvent(QShowEvent *event) override
Ui::SettingsInformationWidget * ui
SettingsInformationWidget(PIVXGUI *_window, QWidget *parent=nullptr)
void updateNetworkState(int numConnections)
void onError(QString error, int type) override
void hideEvent(QHideEvent *event) override
void run(int type) override
void networkActiveChanged(bool active)
@ CONNECTIONS_IN
Definition: clientmodel.h:43
@ CONNECTIONS_OUT
Definition: clientmodel.h:44
#define REQUEST_UPDATE_COUNTS
void setCssTitleScreen(QLabel *label)
Definition: qtutils.cpp:324
void setCssProperty(std::initializer_list< QWidget * > args, const QString &value)
Definition: qtutils.cpp:334
void setCssBtnSecondary(QPushButton *btn, bool forceUpdate)
Definition: qtutils.cpp:307
bool error(const char *fmt, const Args &... args)
Definition: system.h:77