36 #include <chainparams.h>
42 #include <validation.h>
47 #include <QActionGroup>
48 #include <QApplication>
52 #include <QDragEnterEvent>
53 #include <QInputDialog>
54 #include <QKeySequence>
55 #include <QListWidget>
58 #include <QMessageBox>
60 #include <QProgressDialog>
64 #include <QStackedWidget>
67 #include <QSystemTrayIcon>
71 #include <QVBoxLayout>
76 #if defined(Q_OS_MACOS)
78 #elif defined(Q_OS_WIN)
88 trayIconMenu{new QMenu()},
89 platformStyle(_platformStyle),
90 m_network_style(networkStyle)
93 if (!restoreGeometry(settings.value(
"MainWindowGeometry").toByteArray())) {
95 move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
98 setContextMenuPolicy(Qt::PreventContextMenu);
133 setAcceptDrops(
true);
146 if (QSystemTrayIcon::isSystemTrayAvailable()) {
155 statusBar()->setSizeGripEnabled(
false);
158 QFrame *frameBlocks =
new QFrame();
159 frameBlocks->setContentsMargins(0,0,0,0);
160 frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
161 QHBoxLayout *frameBlocksLayout =
new QHBoxLayout(frameBlocks);
162 frameBlocksLayout->setContentsMargins(3,0,3,0);
163 frameBlocksLayout->setSpacing(3);
172 frameBlocksLayout->addStretch();
174 frameBlocksLayout->addStretch();
181 frameBlocksLayout->addStretch();
183 frameBlocksLayout->addStretch();
185 frameBlocksLayout->addStretch();
197 QString curStyle = QApplication::style()->metaObject()->className();
198 if(curStyle ==
"QWindowsStyle" || curStyle ==
"QWindowsXPStyle")
200 progressBar->setStyleSheet(
"QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }");
205 statusBar()->addPermanentWidget(frameBlocks);
208 this->installEventFilter(
this);
236 settings.setValue(
"MainWindowGeometry", saveGeometry());
240 delete m_app_nap_inhibitor;
249 QActionGroup *tabGroup =
new QActionGroup(
this);
253 overviewAction->setStatusTip(tr(
"Show general overview of wallet"));
256 overviewAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+1")));
267 receiveCoinsAction->setStatusTip(tr(
"Request payments (generates QR codes and bitcoin: URIs)"));
274 historyAction->setStatusTip(tr(
"Browse transaction history"));
277 historyAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+4")));
284 connect(
overviewAction, &QAction::triggered,
this, &BitcoinGUI::gotoOverviewPage);
286 connect(
sendCoinsAction, &QAction::triggered, [
this]{ gotoSendCoinsPage(); });
288 connect(
receiveCoinsAction, &QAction::triggered,
this, &BitcoinGUI::gotoReceiveCoinsPage);
290 connect(
historyAction, &QAction::triggered,
this, &BitcoinGUI::gotoHistoryPage);
294 quitAction->setStatusTip(tr(
"Quit application"));
295 quitAction->setShortcut(QKeySequence(tr(
"Ctrl+Q")));
302 aboutQtAction->setStatusTip(tr(
"Show information about Qt"));
310 encryptWalletAction->setStatusTip(tr(
"Encrypt the private keys that belong to your wallet"));
317 signMessageAction->setStatusTip(tr(
"Sign messages with your Bitcoin addresses to prove you own them"));
319 verifyMessageAction->setStatusTip(tr(
"Verify messages to ensure they were signed with specified Bitcoin addresses"));
336 openAction =
new QAction(tr(
"Open &URI…"),
this);
337 openAction->setStatusTip(tr(
"Open a bitcoin: URI"));
375 connect(
aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
389 connect(
signMessageAction, &QAction::triggered, [
this]{ gotoSignMessageTab(); });
396 connect(
openAction, &QAction::triggered,
this, &BitcoinGUI::openClicked);
400 const std::string& path = i.first;
401 QString name = path.empty() ? QString(
"["+tr(
"default wallet")+
"]") : QString::fromStdString(path);
405 name.replace(name.indexOf(QChar(
'&')), 1, QString(
"&&"));
406 QAction* action = m_open_wallet_menu->addAction(name);
410 action->setEnabled(false);
414 connect(action, &QAction::triggered, [
this, path] {
418 activity->open(path);
423 action->setEnabled(
false);
428 QString name_data_file = tr(
"Wallet Data");
431 QString title_windows = tr(
"Load Wallet Backup");
433 QString backup_file =
GUIUtil::getOpenFileName(
this, title_windows, QString(), name_data_file + QLatin1String(
" (*.dat)"),
nullptr);
434 if (backup_file.isEmpty())
return;
439 QString title = tr(
"Restore Wallet");
441 QString label = tr(
"Wallet Name");
442 QString wallet_name = QInputDialog::getText(
this, title, label, QLineEdit::Normal,
"", &wallet_name_ok);
443 if (!wallet_name_ok || wallet_name.isEmpty())
return;
450 activity->restore(backup_file_path, wallet_name.toStdString());
470 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
478 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
486 file->addSeparator();
489 file->addSeparator();
495 file->addSeparator();
499 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
504 settings->addSeparator();
506 settings->addSeparator();
510 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
512 QAction* minimize_action = window_menu->addAction(tr(
"&Minimize"));
513 minimize_action->setShortcut(QKeySequence(tr(
"Ctrl+M")));
514 connect(minimize_action, &QAction::triggered, [] {
515 QApplication::activeWindow()->showMinimized();
517 connect(qApp, &QApplication::focusWindowChanged,
this, [minimize_action] (QWindow* window) {
518 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
522 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
523 connect(zoom_action, &QAction::triggered, [] {
524 QWindow* window = qApp->focusWindow();
525 if (window->windowState() != Qt::WindowMaximized) {
526 window->showMaximized();
528 window->showNormal();
532 connect(qApp, &QApplication::focusWindowChanged,
this, [zoom_action] (QWindow* window) {
533 zoom_action->setEnabled(window !=
nullptr);
539 window_menu->addSeparator();
540 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
541 connect(main_window_action, &QAction::triggered, [
this] {
545 window_menu->addSeparator();
550 window_menu->addSeparator();
554 connect(tab_action, &QAction::triggered, [
this, tab_type] {
562 help->addSeparator();
571 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
573 toolbar->setMovable(
false);
574 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
582 QWidget *spacer =
new QWidget();
583 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
584 toolbar->addWidget(spacer);
588 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
676 void BitcoinGUI::enableHistoryAction(
bool privacy)
684 void BitcoinGUI::setWalletController(
WalletController* wallet_controller,
bool show_loading_minimized)
687 assert(wallet_controller);
698 connect(wallet_controller, &WalletController::destroyed,
this, [
this] {
704 activity->load(show_loading_minimized);
712 void BitcoinGUI::addWallet(
WalletModel* walletModel)
738 enableHistoryAction(privacy);
743 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
764 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
778 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
781 if (wallet_model) setCurrentWallet(wallet_model);
784 void BitcoinGUI::removeAllWallets()
814 assert(QSystemTrayIcon::isSystemTrayAvailable());
817 if (QSystemTrayIcon::isSystemTrayAvailable()) {
832 QAction* show_hide_action{
nullptr};
839 QAction* send_action{
nullptr};
840 QAction* receive_action{
nullptr};
841 QAction* sign_action{
nullptr};
842 QAction* verify_action{
nullptr};
852 options_action->setMenuRole(QAction::PreferencesRole);
854 QAction* quit_action{
nullptr};
861 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
862 if (reason == QSystemTrayIcon::Trigger) {
882 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
883 if (m_node.shutdownRequested()) return;
885 if (show_hide_action) show_hide_action->setText(
886 (!isHidden() && !isMinimized() && !GUIUtil::isObscured(this)) ?
889 if (QApplication::activeModalWidget()) {
890 for (QAction* a : trayIconMenu.get()->actions()) {
891 a->setEnabled(false);
894 if (show_hide_action) show_hide_action->setEnabled(true);
896 send_action->setEnabled(sendCoinsAction->isEnabled());
897 receive_action->setEnabled(receiveCoinsAction->isEnabled());
898 sign_action->setEnabled(signMessageAction->isEnabled());
899 verify_action->setEnabled(verifyMessageAction->isEnabled());
903 if (quit_action) quit_action->setEnabled(
true);
940 void BitcoinGUI::openClicked()
949 void BitcoinGUI::gotoOverviewPage()
955 void BitcoinGUI::gotoHistoryPage()
961 void BitcoinGUI::gotoReceiveCoinsPage()
967 void BitcoinGUI::gotoSendCoinsPage(QString addr)
973 void BitcoinGUI::gotoSignMessageTab(QString addr)
978 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
982 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
995 case 0: icon =
":/icons/connect_0";
break;
996 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
997 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
998 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
999 default: icon =
":/icons/connect_4";
break;
1006 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
1009 tooltip = tr(
"Network activity disabled.");
1010 icon =
":/icons/network_disabled";
1014 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
1016 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1033 tr(
"Show Peers tab"),
1041 tr(
"Disable network activity") :
1043 tr(
"Enable network activity"),
1053 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1060 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1070 dlg->setCurrentTab(tab);
1081 m_app_nap_inhibitor->enableAppNap();
1083 m_app_nap_inhibitor->disableAppNap();
1098 statusBar()->clearMessage();
1102 switch (blockSource) {
1131 QDateTime currentDate = QDateTime::currentDateTime();
1132 qint64 secs = blockDate.secsTo(currentDate);
1134 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1138 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1141 #ifdef ENABLE_WALLET
1157 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1159 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1162 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1166 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1172 #ifdef ENABLE_WALLET
1180 tooltip += QString(
"<br>");
1181 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1182 tooltip += QString(
"<br>");
1183 tooltip += tr(
"Transactions after this will not yet be visible.");
1187 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1196 #ifdef ENABLE_WALLET
1199 message(tr(
"Error creating wallet"), tr(
"Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets)"),
CClientUIInterface::MSG_ERROR);
1209 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1214 int nMBoxIcon = QMessageBox::Information;
1218 if (!title.isEmpty()) {
1223 msgType = tr(
"Error");
1227 msgType = tr(
"Warning");
1231 msgType = tr(
"Information");
1239 if (!msgType.isEmpty()) {
1240 strTitle +=
" - " + msgType;
1244 nMBoxIcon = QMessageBox::Critical;
1253 QMessageBox::StandardButton buttons;
1255 buttons = QMessageBox::Ok;
1258 QMessageBox mBox(
static_cast<QMessageBox::Icon
>(nMBoxIcon), strTitle,
message, buttons,
this);
1259 mBox.setTextFormat(Qt::PlainText);
1260 mBox.setDetailedText(detailed_message);
1261 int r = mBox.exec();
1263 *
ret = r == QMessageBox::Ok;
1271 if (e->type() == QEvent::PaletteChange) {
1278 QMainWindow::changeEvent(e);
1281 if(e->type() == QEvent::WindowStateChange)
1285 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1286 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1288 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1291 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1293 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1315 QMainWindow::showMinimized();
1320 QMainWindow::closeEvent(event);
1332 #ifdef ENABLE_WALLET
1333 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1336 QString
msg = tr(
"Date: %1\n").arg(date) +
1339 msg += tr(
"Wallet: %1\n").arg(walletName);
1341 msg += tr(
"Type: %1\n").arg(type);
1342 if (!label.isEmpty())
1343 msg += tr(
"Label: %1\n").arg(label);
1344 else if (!address.isEmpty())
1345 msg += tr(
"Address: %1\n").arg(address);
1346 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1354 if(event->mimeData()->hasUrls())
1355 event->acceptProposedAction();
1360 if(event->mimeData()->hasUrls())
1362 for (
const QUrl &uri : event->mimeData()->urls())
1367 event->acceptProposedAction();
1373 if (event->type() == QEvent::StatusTip)
1379 return QMainWindow::eventFilter(
object, event);
1382 #ifdef ENABLE_WALLET
1389 gotoSendCoinsPage();
1395 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1398 labelWalletHDStatusIcon->setToolTip(privkeyDisabled ? tr(
"Private key <b>disabled</b>") : hdEnabled ? tr(
"HD key generation is <b>enabled</b>") : tr(
"HD key generation is <b>disabled</b>"));
1402 void BitcoinGUI::setEncryptionStatus(
int status)
1437 void BitcoinGUI::updateWalletStatus()
1453 std::string ip_port;
1456 if (proxy_enabled) {
1458 QString ip_port_q = QString::fromStdString(ip_port);
1460 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1472 #ifdef ENABLE_WALLET
1475 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1483 setWindowTitle(window_title);
1515 if (nProgress == 0) {
1521 }
else if (nProgress == 100) {
1546 QString detailed_message;
1548 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1552 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1554 Q_ARG(QString, QString::fromStdString(caption)),
1555 Q_ARG(QString, QString::fromStdString(message.
translated)),
1556 Q_ARG(
unsigned int, style),
1558 Q_ARG(QString, detailed_message));
1584 : m_platform_style{platformStyle}
1587 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1590 const QFontMetrics fm(font());
1594 setMinimumSize(max_width, 0);
1595 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1607 if (e->type() == QEvent::PaletteChange) {
1609 if (style != styleSheet()) {
1610 setStyleSheet(style);
1614 QLabel::changeEvent(e);
1620 menu =
new QMenu(
this);
1651 QPoint globalPos = mapToGlobal(point);
1652 menu->exec(globalPos);
int64_t CAmount
Amount in satoshis (Can be negative)
static bool ThreadSafeMessageBox(BitcoinGUI *gui, const bilingual_str &message, const std::string &caption, unsigned int style)
static constexpr int64_t MAX_BLOCK_TIME_GAP
Maximum gap between node time and block time used for the "Catching up..." mode in GUI.
const CChainParams & Params()
Return the currently selected parameters.
void updateHeadersPresyncProgressLabel(int64_t height, const QDateTime &blockDate)
GUIUtil::ClickableProgressBar * progressBar
QAction * m_close_all_wallets_action
void showEvent(QShowEvent *event) override
QLabel * progressBarLabel
QAction * m_open_wallet_action
static const std::string DEFAULT_UIPLATFORM
void createWallet()
Launch the wallet creation modal (no-op if wallet is not compiled)
void setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, SyncType synctype, SynchronizationState sync_state)
Set number of blocks and last block date shown in the UI.
void setClientModel(ClientModel *clientModel=nullptr, interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)
Set the client model.
GUIUtil::ClickableLabel * connectionsControl
void receivedURI(const QString &uri)
Signal raised when a URI was entered or dragged to the GUI.
ModalOverlay * modalOverlay
GUIUtil::ThemedLabel * labelWalletEncryptionIcon
QAction * changePassphraseAction
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
int prevBlocks
Keep track of previous number of blocks, to detect progress.
QAction * openRPCConsoleAction
const NetworkStyle *const m_network_style
void changeEvent(QEvent *e) override
GUIUtil::ClickableLabel * labelProxyIcon
void optionsClicked()
Show configuration dialog.
bool eventFilter(QObject *object, QEvent *event) override
QMenu * m_open_wallet_menu
void createTrayIcon()
Create system tray icon and notification.
QAction * m_load_psbt_clipboard_action
void setNetworkActive(bool network_active)
Set network state shown in the UI.
void setPrivacy(bool privacy)
QProgressDialog * progressDialog
BitcoinGUI(interfaces::Node &node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent=nullptr)
std::unique_ptr< interfaces::Handler > m_handler_message_box
WalletFrame * walletFrame
void updateProxyIcon()
Set the proxy-enabled icon as shown in the UI.
QAction * m_restore_wallet_action
QAction * receiveCoinsAction
const std::unique_ptr< QMenu > trayIconMenu
QAction * usedSendingAddressesAction
void unsubscribeFromCoreSignals()
Disconnect core signals from GUI client.
void closeEvent(QCloseEvent *event) override
QAction * verifyMessageAction
QAction * m_migrate_wallet_action
void createTrayIconMenu()
Create system tray menu (or setup the dock menu)
HelpMessageDialog * helpMessageDialog
void aboutClicked()
Show about dialog.
void toggleHidden()
Simply calls showNormalIfMinimized(true)
QAction * encryptWalletAction
void updateNetworkState()
Update UI with latest network info from model.
void createActions()
Create the main UI actions.
void showDebugWindow()
Show debug window.
QAction * m_mask_values_action
void consoleShown(RPCConsole *console)
Signal raised when RPC console shown.
bool isPrivacyModeActivated() const
void showDebugWindowActivateConsole()
Show debug window and set focus to the console.
void dropEvent(QDropEvent *event) override
void showProgress(const QString &title, int nProgress)
Show progress dialog e.g.
QAction * usedReceivingAddressesAction
void subscribeToCoreSignals()
Connect core signals to GUI client.
void createToolBars()
Create the toolbars.
QAction * m_wallet_selector_action
UnitDisplayStatusBarControl * unitDisplayControl
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
const PlatformStyle * platformStyle
void dragEnterEvent(QDragEnterEvent *event) override
QAction * m_close_wallet_action
GUIUtil::ClickableLabel * labelBlocksIcon
interfaces::Node & m_node
QAction * m_create_wallet_action
QAction * m_load_psbt_action
void detectShutdown()
called by a timer to check if shutdown has been requested
QAction * m_wallet_selector_label_action
WalletController * m_wallet_controller
QMenu * m_network_context_menu
QAction * backupWalletAction
QAction * showHelpMessageAction
QComboBox * m_wallet_selector
QLabel * m_wallet_selector_label
void showNormalIfMinimized()
Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHid...
ClientModel * clientModel
void updateHeadersSyncProgressLabel()
void createMenuBar()
Create the menu bar and sub-menus.
QSystemTrayIcon * trayIcon
void message(const QString &title, QString message, unsigned int style, bool *ret=nullptr, const QString &detailed_message=QString())
Notify the user of an event from the core network or transaction handling code.
void showHelpMessageClicked()
Show help message dialog.
QAction * sendCoinsAction
void setNumConnections(int count)
Set number of connections shown in the UI.
QAction * signMessageAction
GUIUtil::ThemedLabel * labelWalletHDStatusIcon
Notificator * notificator
std::unique_ptr< interfaces::Handler > m_handler_question
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
static QString longName(Unit unit)
Long name.
static QString formatWithUnit(Unit unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
const Consensus::Params & GetConsensus() const
Signals for UI communication.
@ BTN_MASK
Mask of all available buttons in CClientUIInterface::MessageBoxFlags This needs to be updated,...
@ MSG_INFORMATION
Predefined combinations for certain default usage cases.
@ MODAL
Force blocking, modal message box dialog (not just OS notification)
Model for Bitcoin network client.
void showProgress(const QString &title, int nProgress)
int getHeaderTipHeight() const
void message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
void numConnectionsChanged(int count)
BlockSource getBlockSource() const
Returns the block source of the current importing/syncing state.
int64_t getHeaderTipTime() const
int getNumConnections(unsigned int flags=CONNECTIONS_ALL) const
Return number of connections, default is in- and outbound (total)
void numBlocksChanged(int count, const QDateTime &blockDate, double nVerificationProgress, SyncType header, SynchronizationState sync_state)
OptionsModel * getOptionsModel()
bool getProxyInfo(std::string &ip_port) const
void networkActiveChanged(bool networkActive)
void created(WalletModel *wallet_model)
void clicked(const QPoint &point)
Emitted when the label is clicked.
void clicked(const QPoint &point)
Emitted when the progressbar is clicked.
void setThemedPixmap(const QString &image_filename, int width, int height)
"Help message" dialog box
macOS-specific Dock icon handler.
static MacDockIconHandler * instance()
void migrated(WalletModel *wallet_model)
Modal overlay to display information about the chain-sync state.
void showHide(bool hide=false, bool userRequested=false)
void tipUpdate(int count, const QDateTime &blockDate, double nVerificationProgress)
void triggered(bool hidden)
bool isLayerVisible() const
void setKnownBestHeight(int count, const QDateTime &blockDate, bool presync)
const QString & getTitleAddText() const
const QIcon & getTrayAndWindowIcon() const
Cross-platform desktop notification client.
@ Information
Informational message.
@ Critical
An error occurred.
@ Warning
Notify user of potential problem.
void notify(Class cls, const QString &title, const QString &text, const QIcon &icon=QIcon(), int millisTimeout=10000)
Show notification message.
void opened(WalletModel *wallet_model)
Interface from Qt to configuration data structure for Bitcoin client.
void displayUnitChanged(BitcoinUnit unit)
void showTrayIconChanged(bool)
bool getMinimizeToTray() const
BitcoinUnit getDisplayUnit() const
bool getShowTrayIcon() const
QVariant getOption(OptionID option, const std::string &suffix="") const
bool getMinimizeOnClose() const
void setDisplayUnit(const QVariant &new_unit)
Updates current unit in memory, settings and emits displayUnitChanged(new_unit) signal.
Local Bitcoin RPC console.
QString tabTitle(TabTypes tab_type) const
std::vector< TabTypes > tabs() const
QKeySequence tabShortcut(TabTypes tab_type) const
void setClientModel(ClientModel *model=nullptr, int bestblock_height=0, int64_t bestblock_date=0, double verification_progress=0.0)
void setTabFocus(enum TabTypes tabType)
set which tab has the focus (is visible)
void restored(WalletModel *wallet_model)
void changeEvent(QEvent *e) override
void mousePressEvent(QMouseEvent *event) override
So that it responds to left-button clicks.
void createContextMenu()
Creates context menu, its actions, and wires up all the relevant signals for mouse events.
void updateDisplayUnit(BitcoinUnit newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
OptionsModel * optionsModel
UnitDisplayStatusBarControl(const PlatformStyle *platformStyle)
void onMenuSelection(QAction *action)
Tells underlying optionsModel to update its current display unit.
const PlatformStyle * m_platform_style
void setOptionsModel(OptionsModel *optionsModel)
Lets the control know about the Options Model (and its signals)
void onDisplayUnitsClicked(const QPoint &point)
Shows context menu with Display Unit options by the mouse coordinates.
Controller between interfaces::Node, WalletModel instances and the GUI.
void walletAdded(WalletModel *wallet_model)
void closeAllWallets(QWidget *parent=nullptr)
std::map< std::string, bool > listWalletDir() const
Returns all wallet names in the wallet dir mapped to whether the wallet is loaded.
void walletRemoved(WalletModel *wallet_model)
void closeWallet(WalletModel *wallet_model, QWidget *parent=nullptr)
A container for embedding all wallet-related controls into BitcoinGUI.
bool addView(WalletView *walletView)
void changePassphrase()
Change encrypted wallet passphrase.
WalletModel * currentWalletModel() const
void gotoHistoryPage()
Switch to history (transactions) page.
void gotoSignMessageTab(QString addr="")
Show Sign/Verify Message dialog and switch to sign message tab.
WalletView * currentWalletView() const
void gotoOverviewPage()
Switch to overview (home) page.
void gotoSendCoinsPage(QString addr="")
Switch to send coins page.
void removeWallet(WalletModel *wallet_model)
void setClientModel(ClientModel *clientModel)
void backupWallet()
Backup the wallet.
void usedSendingAddresses()
Show used sending addresses.
void createWalletButtonClicked()
void encryptWallet()
Encrypt the wallet.
void usedReceivingAddresses()
Show used receiving addresses.
void message(const QString &title, const QString &message, unsigned int style)
void setCurrentWallet(WalletModel *wallet_model)
bool handlePaymentRequest(const SendCoinsRecipient &recipient)
void gotoLoadPSBT(bool from_clipboard=false)
Load Partially Signed Bitcoin Transaction.
void showOutOfSyncWarning(bool fShow)
void gotoReceiveCoinsPage()
Switch to receive coins page.
void gotoVerifyMessageTab(QString addr="")
Show Sign/Verify Message dialog and switch to verify message tab.
Interface to Bitcoin wallet from Qt view code.
interfaces::Wallet & wallet() const
EncryptionStatus getEncryptionStatus() const
QString getDisplayName() const
static bool isWalletEnabled()
QString getWalletName() const
void outOfSyncWarningClicked()
Notify that the out of sync warning icon has been pressed.
void message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
void incomingTransaction(const QString &date, BitcoinUnit unit, const CAmount &amount, const QString &type, const QString &address, const QString &label, const QString &walletName)
Notify that a new transaction appeared.
WalletModel * getWalletModel() const noexcept
void transactionClicked()
void setPrivacy(bool privacy)
void encryptionStatusChanged()
Encryption status of wallet changed.
Top-level interface for a bitcoin node (bitcoind process).
virtual void setNetworkActive(bool active)=0
Set network active.
virtual std::unique_ptr< Handler > handleQuestion(QuestionFn fn)=0
virtual bool getNetworkActive()=0
Get network active.
virtual std::unique_ptr< Handler > handleMessageBox(MessageBoxFn fn)=0
virtual WalletLoader & walletLoader()=0
Get wallet loader.
virtual bool shutdownRequested()=0
Return whether shutdown was requested.
virtual bool isLegacy()=0
Return whether is a legacy wallet.
virtual bool hdEnabled()=0
virtual bool privateKeysDisabled()=0
virtual std::vector< std::unique_ptr< Wallet > > getWallets()=0
Return interfaces for accessing wallets (if any).
static const int STATUSBAR_ICONSIZE
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...
bool isObscured(QWidget *w)
Qt::ConnectionType blockingGUIThreadConnection()
Get connection type to call object slot in GUI thread with invokeMethod.
void PopupMenu(QMenu *menu, const QPoint &point, QAction *at_action)
Call QMenu::popup() only on supported QT_QPA_PLATFORM.
void ShowModalDialogAsynchronously(QDialog *dialog)
Shows a QDialog instance asynchronously, and deletes it on close.
void handleCloseWindowShortcut(QWidget *w)
void PolishProgressDialog(QProgressDialog *dialog)
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get open filename, convenience wrapper for QFileDialog::getOpenFileName.
ClickableProgressBar ProgressBar
void bringToFront(QWidget *w)
bool HasPixmap(const QLabel *label)
Returns true if pixmap has been set.
QString formatNiceTimeOffset(qint64 secs)
auto ExceptionSafeConnect(Sender sender, Signal signal, Receiver receiver, Slot method, Qt::ConnectionType type=Qt::AutoConnection)
A drop-in replacement of QObject::connect function (see: https://doc.qt.io/qt-5/qobject....
int TextWidth(const QFontMetrics &fm, const QString &text)
Returns the distance in pixels appropriate for drawing a subsequent character after text.
static path PathFromString(const std::string &string)
Convert byte string to path object.
int64_t nPowTargetSpacing
Block and header tip information.
double verification_progress
SynchronizationState
Current sync state passed to tip changed callbacks.