29 #endif // ENABLE_WALLET 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);
102 #endif // ENABLE_WALLET 103 QApplication::setWindowIcon(m_network_style->getTrayAndWindowIcon());
104 setWindowIcon(m_network_style->getTrayAndWindowIcon());
113 walletFrame =
new WalletFrame(_platformStyle,
this);
115 connect(walletFrame, &
WalletFrame::message, [
this](
const QString& title,
const QString& message,
unsigned int style) {
116 this->message(title, message, style);
119 setCentralWidget(walletFrame);
121 #endif // ENABLE_WALLET 126 setCentralWidget(rpcConsole);
127 Q_EMIT consoleShown(rpcConsole);
130 modalOverlay =
new ModalOverlay(enableWallet, this->centralWidget());
133 setAcceptDrops(
true);
146 if (QSystemTrayIcon::isSystemTrayAvailable()) {
149 notificator =
new Notificator(QApplication::applicationName(), trayIcon,
this);
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();
173 frameBlocksLayout->addWidget(unitDisplayControl);
174 frameBlocksLayout->addStretch();
175 frameBlocksLayout->addWidget(labelWalletEncryptionIcon);
176 labelWalletEncryptionIcon->hide();
177 frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
178 labelWalletHDStatusIcon->hide();
180 frameBlocksLayout->addWidget(labelProxyIcon);
181 frameBlocksLayout->addStretch();
182 frameBlocksLayout->addWidget(connectionsControl);
183 frameBlocksLayout->addStretch();
184 frameBlocksLayout->addWidget(labelBlocksIcon);
185 frameBlocksLayout->addStretch();
188 progressBarLabel =
new QLabel();
189 progressBarLabel->setVisible(
false);
191 progressBar->setAlignment(Qt::AlignCenter);
192 progressBar->setVisible(
false);
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; }");
203 statusBar()->addWidget(progressBarLabel);
204 statusBar()->addWidget(progressBar);
205 statusBar()->addPermanentWidget(frameBlocks);
208 this->installEventFilter(
this);
211 setWalletActionsEnabled(
false);
214 subscribeToCoreSignals();
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);
291 #endif // ENABLE_WALLET 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"));
376 connect(
aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
390 connect(
signMessageAction, &QAction::triggered, [
this]{ gotoSignMessageTab(); });
397 connect(
openAction, &QAction::triggered,
this, &BitcoinGUI::openClicked);
401 const auto& [loaded,
_] = info;
405 name.replace(QChar(
'&'), QString(
"&&"));
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());
462 const auto& [loaded,
format] = info;
471 name.replace(QChar(
'&'), QString(
"&&"));
474 connect(action, &QAction::triggered, [
this, wallet_name] {
477 activity->migrate(wallet_name);
482 action->setEnabled(
false);
488 #endif // ENABLE_WALLET 491 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
499 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
507 file->addSeparator();
510 file->addSeparator();
516 file->addSeparator();
520 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
525 settings->addSeparator();
527 settings->addSeparator();
531 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
533 QAction* minimize_action = window_menu->addAction(tr(
"&Minimize"));
534 minimize_action->setShortcut(QKeySequence(tr(
"Ctrl+M")));
535 connect(minimize_action, &QAction::triggered, [] {
536 QApplication::activeWindow()->showMinimized();
538 connect(qApp, &QApplication::focusWindowChanged,
this, [minimize_action] (QWindow* window) {
539 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
543 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
544 connect(zoom_action, &QAction::triggered, [] {
545 QWindow* window = qApp->focusWindow();
546 if (window->windowState() != Qt::WindowMaximized) {
547 window->showMaximized();
549 window->showNormal();
553 connect(qApp, &QApplication::focusWindowChanged,
this, [zoom_action] (QWindow* window) {
554 zoom_action->setEnabled(window !=
nullptr);
560 window_menu->addSeparator();
561 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
562 connect(main_window_action, &QAction::triggered, [
this] {
566 window_menu->addSeparator();
571 window_menu->addSeparator();
575 connect(tab_action, &QAction::triggered, [
this, tab_type] {
583 help->addSeparator();
592 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
594 toolbar->setMovable(
false);
595 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
603 QWidget *spacer =
new QWidget();
604 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
605 toolbar->addWidget(spacer);
609 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
662 #endif // ENABLE_WALLET 689 #endif // ENABLE_WALLET 697 void BitcoinGUI::enableHistoryAction(
bool privacy)
705 void BitcoinGUI::setWalletController(
WalletController* wallet_controller,
bool show_loading_minimized)
708 assert(wallet_controller);
721 connect(wallet_controller, &WalletController::destroyed,
this, [
this] {
727 activity->load(show_loading_minimized);
735 void BitcoinGUI::addWallet(
WalletModel* walletModel)
761 enableHistoryAction(privacy);
766 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
787 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
800 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
803 if (wallet_model) setCurrentWallet(wallet_model);
806 void BitcoinGUI::removeAllWallets()
813 #endif // ENABLE_WALLET 835 assert(QSystemTrayIcon::isSystemTrayAvailable());
838 if (QSystemTrayIcon::isSystemTrayAvailable()) {
853 QAction* show_hide_action{
nullptr};
860 QAction* send_action{
nullptr};
861 QAction* receive_action{
nullptr};
862 QAction* sign_action{
nullptr};
863 QAction* verify_action{
nullptr};
873 options_action->setMenuRole(QAction::PreferencesRole);
875 QAction* quit_action{
nullptr};
882 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
883 if (reason == QSystemTrayIcon::Trigger) {
903 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
906 if (show_hide_action) show_hide_action->setText(
910 if (QApplication::activeModalWidget()) {
912 a->setEnabled(
false);
915 if (show_hide_action) show_hide_action->setEnabled(
true);
924 if (quit_action) quit_action->setEnabled(
true);
961 void BitcoinGUI::openClicked()
970 void BitcoinGUI::gotoOverviewPage()
976 void BitcoinGUI::gotoHistoryPage()
982 void BitcoinGUI::gotoReceiveCoinsPage()
988 void BitcoinGUI::gotoSendCoinsPage(QString addr)
994 void BitcoinGUI::gotoSignMessageTab(QString addr)
999 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
1003 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
1007 #endif // ENABLE_WALLET 1016 case 0: icon =
":/icons/connect_0";
break;
1017 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
1018 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
1019 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
1020 default: icon =
":/icons/connect_4";
break;
1027 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
1030 tooltip = tr(
"Network activity disabled.");
1031 icon =
":/icons/network_disabled";
1035 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
1037 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1054 tr(
"Show Peers tab"),
1062 tr(
"Disable network activity") :
1064 tr(
"Enable network activity"),
1074 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1081 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1091 dlg->setCurrentTab(tab);
1102 m_app_nap_inhibitor->enableAppNap();
1104 m_app_nap_inhibitor->disableAppNap();
1119 statusBar()->clearMessage();
1123 switch (blockSource) {
1152 QDateTime currentDate = QDateTime::currentDateTime();
1153 qint64 secs = blockDate.secsTo(currentDate);
1155 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1159 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1162 #ifdef ENABLE_WALLET 1168 #endif // ENABLE_WALLET 1178 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1180 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1183 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1187 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1193 #ifdef ENABLE_WALLET 1199 #endif // ENABLE_WALLET 1201 tooltip += QString(
"<br>");
1202 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1203 tooltip += QString(
"<br>");
1204 tooltip += tr(
"Transactions after this will not yet be visible.");
1208 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1217 #ifdef ENABLE_WALLET 1220 message(tr(
"Error creating wallet"), tr(
"Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets)"),
CClientUIInterface::MSG_ERROR);
1222 #endif // USE_SQLITE 1227 #endif // ENABLE_WALLET 1230 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1235 int nMBoxIcon = QMessageBox::Information;
1239 if (!title.isEmpty()) {
1244 msgType = tr(
"Error");
1248 msgType = tr(
"Warning");
1252 msgType = tr(
"Information");
1260 if (!msgType.isEmpty()) {
1261 strTitle +=
" - " + msgType;
1265 nMBoxIcon = QMessageBox::Critical;
1274 QMessageBox::StandardButton buttons;
1276 buttons = QMessageBox::Ok;
1279 QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle,
message, buttons,
this);
1280 mBox.setTextFormat(Qt::PlainText);
1281 mBox.setDetailedText(detailed_message);
1282 int r = mBox.exec();
1284 *
ret = r == QMessageBox::Ok;
1292 if (e->type() == QEvent::PaletteChange) {
1299 QMainWindow::changeEvent(e);
1301 #ifndef Q_OS_MACOS // Ignored on Mac 1302 if(e->type() == QEvent::WindowStateChange)
1306 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1307 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1309 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1312 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1314 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1324 #ifndef Q_OS_MACOS // Ignored on Mac 1336 QMainWindow::showMinimized();
1341 QMainWindow::closeEvent(event);
1353 #ifdef ENABLE_WALLET 1354 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1357 QString
msg = tr(
"Date: %1\n").arg(date) +
1360 msg += tr(
"Wallet: %1\n").arg(walletName);
1362 msg += tr(
"Type: %1\n").arg(type);
1363 if (!label.isEmpty())
1364 msg += tr(
"Label: %1\n").arg(label);
1365 else if (!address.isEmpty())
1366 msg += tr(
"Address: %1\n").arg(address);
1367 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1370 #endif // ENABLE_WALLET 1375 if(event->mimeData()->hasUrls())
1376 event->acceptProposedAction();
1381 if(event->mimeData()->hasUrls())
1383 for (
const QUrl &uri : event->mimeData()->urls())
1388 event->acceptProposedAction();
1394 if (event->type() == QEvent::StatusTip)
1400 return QMainWindow::eventFilter(
object, event);
1403 #ifdef ENABLE_WALLET 1410 gotoSendCoinsPage();
1416 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1419 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>"));
1423 void BitcoinGUI::setEncryptionStatus(
int status)
1458 void BitcoinGUI::updateWalletStatus()
1470 #endif // ENABLE_WALLET 1474 std::string ip_port;
1477 if (proxy_enabled) {
1479 QString ip_port_q = QString::fromStdString(ip_port);
1481 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1493 #ifdef ENABLE_WALLET 1496 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1504 setWindowTitle(window_title);
1536 if (nProgress == 0) {
1542 }
else if (nProgress == 100) {
1567 QString detailed_message;
1569 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1573 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1575 Q_ARG(QString, QString::fromStdString(caption)),
1576 Q_ARG(QString, QString::fromStdString(message.
translated)),
1577 Q_ARG(
unsigned int, style),
1579 Q_ARG(QString, detailed_message));
1605 : m_platform_style{platformStyle}
1607 createContextMenu();
1608 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1611 const QFontMetrics fm(font());
1615 setMinimumSize(max_width, 0);
1616 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1617 setStyleSheet(QString(
"QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
1628 if (e->type() == QEvent::PaletteChange) {
1630 if (style != styleSheet()) {
1631 setStyleSheet(style);
1635 QLabel::changeEvent(e);
1641 menu =
new QMenu(
this);
1672 QPoint globalPos = mapToGlobal(point);
1673 menu->exec(globalPos);
virtual bool privateKeysDisabled()=0
void subscribeToCoreSignals()
Connect core signals to GUI client.
void unsubscribeFromCoreSignals()
Disconnect core signals from GUI client.
void showEvent(QShowEvent *event) override
bool handlePaymentRequest(const SendCoinsRecipient &recipient)
void message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
QMenu * m_migrate_wallet_menu
static path PathFromString(const std::string &string)
Convert byte string to path object.
WalletModel * currentWalletModel() const
Predefined combinations for certain default usage cases.
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
QAction * receiveCoinsAction
UnitDisplayStatusBarControl * unitDisplayControl
Local Bitcoin RPC console.
interfaces::Wallet & wallet() const
QAction * m_mask_values_action
QAction * signMessageAction
void setThemedPixmap(const QString &image_filename, int width, int height)
void receivedURI(const QString &uri)
Signal raised when a URI was entered or dragged to the GUI.
SynchronizationState
Current sync state passed to tip changed callbacks.
QString getOpenFileName(QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedSuffixOut)
Get open filename, convenience wrapper for QFileDialog::getOpenFileName.
virtual bool getNetworkActive()=0
Get network active.
void updateNetworkState()
Update UI with latest network info from model.
void showNormalIfMinimized()
Show window if hidden, unminimize when minimized, rise when obscured or show if hidden and fToggleHid...
UnitDisplayStatusBarControl(const PlatformStyle *platformStyle)
void createWalletButtonClicked()
QProgressDialog * progressDialog
static bool isWalletEnabled()
void consoleShown(RPCConsole *console)
Signal raised when RPC console shown.
void createTrayIcon()
Create system tray icon and notification.
void showDebugWindow()
Show debug window.
GUIUtil::ClickableLabel * labelProxyIcon
void PopupMenu(QMenu *menu, const QPoint &point, QAction *at_action)
Call QMenu::popup() only on supported QT_QPA_PLATFORM.
ClientModel * clientModel
void createToolBars()
Create the toolbars.
int TextWidth(const QFontMetrics &fm, const QString &text)
Returns the distance in pixels appropriate for drawing a subsequent character after text...
void setCurrentWallet(WalletModel *wallet_model)
QAction * m_load_psbt_action
void closeAllWallets(QWidget *parent=nullptr)
void setClientModel(ClientModel *model=nullptr, int bestblock_height=0, int64_t bestblock_date=0, double verification_progress=0.0)
ModalOverlay * modalOverlay
void createTrayIconMenu()
Create system tray menu (or setup the dock menu)
QAction * m_wallet_selector_action
QAction * m_migrate_wallet_action
void opened(WalletModel *wallet_model)
QAction * verifyMessageAction
void setPrivacy(bool privacy)
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...
QAction * m_open_wallet_action
void triggered(bool hidden)
void usedReceivingAddresses()
Show used receiving addresses.
QAction * m_close_wallet_action
static bool ThreadSafeMessageBox(BitcoinGUI *gui, const bilingual_str &message, const std::string &caption, unsigned int style)
Mask of all available buttons in CClientUIInterface::MessageBoxFlags This needs to be updated...
void tipUpdate(int count, const QDateTime &blockDate, double nVerificationProgress)
Qt::ConnectionType blockingGUIThreadConnection()
Get connection type to call object slot in GUI thread with invokeMethod.
void updateHeadersPresyncProgressLabel(int64_t height, const QDateTime &blockDate)
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
void networkActiveChanged(bool networkActive)
BitcoinUnit getDisplayUnit() const
void setClientModel(ClientModel *clientModel=nullptr, interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)
Set the client model.
Controller between interfaces::Node, WalletModel instances and the GUI.
OptionsModel * getOptionsModel()
bool getShowTrayIcon() const
QMenu * m_open_wallet_menu
macOS-specific Dock icon handler.
void outOfSyncWarningClicked()
Notify that the out of sync warning icon has been pressed.
bool isLayerVisible() const
HelpMessageDialog * helpMessageDialog
QLabel * progressBarLabel
QSystemTrayIcon * trayIcon
QAction * showHelpMessageAction
void ShowModalDialogAsynchronously(QDialog *dialog)
Shows a QDialog instance asynchronously, and deletes it on close.
Notify user of potential problem.
Modal overlay to display information about the chain-sync state.
bool isPrivacyModeActivated() const
void changeEvent(QEvent *e) override
const QString & getTitleAddText() const
void changeEvent(QEvent *e) override
void numConnectionsChanged(int count)
void setNetworkActive(bool network_active)
Set network state shown in the UI.
Signals for UI communication.
GUIUtil::ClickableLabel * connectionsControl
QAction * backupWalletAction
QAction * m_load_psbt_clipboard_action
void setOptionsModel(OptionsModel *optionsModel)
Lets the control know about the Options Model (and its signals)
void dropEvent(QDropEvent *event) override
void bringToFront(QWidget *w)
QString tabTitle(TabTypes tab_type) const
static QString formatWithUnit(Unit unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
Force blocking, modal message box dialog (not just OS notification)
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
EncryptionStatus getEncryptionStatus() const
virtual std::unique_ptr< Handler > handleMessageBox(MessageBoxFn fn)=0
void showOutOfSyncWarning(bool fShow)
void gotoHistoryPage()
Switch to history (transactions) page.
QAction * usedReceivingAddressesAction
int64_t CAmount
Amount in satoshis (Can be negative)
const NetworkStyle *const m_network_style
WalletController * m_wallet_controller
void gotoOverviewPage()
Switch to overview (home) page.
BlockSource getBlockSource() const
Returns the block source of the current importing/syncing state.
const PlatformStyle * platformStyle
void displayUnitChanged(BitcoinUnit unit)
virtual bool hdEnabled()=0
void showProgress(const QString &title, int nProgress)
Show progress dialog e.g.
static MacDockIconHandler * instance()
void setClientModel(ClientModel *clientModel)
bool isObscured(QWidget *w)
QAction * m_wallet_selector_label_action
int getNumConnections(unsigned int flags=CONNECTIONS_ALL) const
Return number of connections, default is in- and outbound (total)
OptionsModel * optionsModel
void created(WalletModel *wallet_model)
QLabel * m_wallet_selector_label
void optionsClicked()
Show configuration dialog.
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 closeWallet(WalletModel *wallet_model, QWidget *parent=nullptr)
void gotoVerifyMessageTab(QString addr="")
Show Sign/Verify Message dialog and switch to verify message tab.
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.
bool HasPixmap(const QLabel *label)
Returns true if pixmap has been set.
void handleCloseWindowShortcut(QWidget *w)
void notify(Class cls, const QString &title, const QString &text, const QIcon &icon=QIcon(), int millisTimeout=10000)
Show notification message.
WalletFrame * walletFrame
WalletView * currentWalletView() const
QAction * usedSendingAddressesAction
void setTabFocus(enum TabTypes tabType)
set which tab has the focus (is visible)
int64_t nPowTargetSpacing
BitcoinGUI(interfaces::Node &node, const PlatformStyle *platformStyle, const NetworkStyle *networkStyle, QWidget *parent=nullptr)
void updateDisplayUnit(BitcoinUnit newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
void message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
void numBlocksChanged(int count, const QDateTime &blockDate, double nVerificationProgress, SyncType header, SynchronizationState sync_state)
QVariant getOption(OptionID option, const std::string &suffix="") const
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.html#connect-3), that guaranties that all exceptions are handled within the slot.
QAction * openRPCConsoleAction
QAction * m_close_all_wallets_action
std::vector< TabTypes > tabs() const
void detectShutdown()
called by a timer to check if shutdown has been requested
void migrated(WalletModel *wallet_model)
Cross-platform desktop notification client.
void clicked(const QPoint &point)
Emitted when the label is clicked.
Block and header tip information.
void setKnownBestHeight(int count, const QDateTime &blockDate, bool presync)
GUIUtil::ClickableLabel * labelBlocksIcon
GUIUtil::ClickableProgressBar * progressBar
void showHelpMessageClicked()
Show help message dialog.
QString getWalletName() const
void walletAdded(WalletModel *wallet_model)
void message(const QString &title, const QString &message, unsigned int style)
Notificator * notificator
void PolishProgressDialog(QProgressDialog *dialog)
void changePassphrase()
Change encrypted wallet passphrase.
Model for Bitcoin network client.
void restored(WalletModel *wallet_model)
const QIcon & getTrayAndWindowIcon() const
void mousePressEvent(QMouseEvent *event) override
So that it responds to left-button clicks.
ClickableProgressBar ProgressBar
void gotoSignMessageTab(QString addr="")
Show Sign/Verify Message dialog and switch to sign message tab.
virtual bool shutdownRequested()=0
Return whether shutdown was requested.
virtual std::vector< std::unique_ptr< Wallet > > getWallets()=0
Return interfaces for accessing wallets (if any).
QAction * sendCoinsAction
void showHide(bool hide=false, bool userRequested=false)
QAction * m_create_wallet_action
QKeySequence tabShortcut(TabTypes tab_type) const
static const int STATUSBAR_ICONSIZE
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 encryptionStatusChanged()
Encryption status of wallet changed.
double verification_progress
bool getMinimizeOnClose() const
void updateProxyIcon()
Set the proxy-enabled icon as shown in the UI.
QAction * changePassphraseAction
void gotoSendCoinsPage(QString addr="")
Switch to send coins page.
virtual std::unique_ptr< Handler > handleQuestion(QuestionFn fn)=0
void encryptWallet()
Encrypt the wallet.
QString WalletDisplayName(const QString &name)
void gotoReceiveCoinsPage()
Switch to receive coins page.
const std::unique_ptr< QMenu > trayIconMenu
QMenu * m_network_context_menu
void setPrivacy(bool privacy)
Interface from Qt to configuration data structure for Bitcoin client.
std::unique_ptr< interfaces::Handler > m_handler_question
const CChainParams & Params()
Return the currently selected parameters.
bool getMinimizeToTray() const
Interface to Bitcoin wallet from Qt view code.
virtual WalletLoader & walletLoader()=0
Get wallet loader.
QAction * m_restore_wallet_action
std::map< std::string, std::pair< bool, std::string > > listWalletDir() const
Returns all wallet names in the wallet dir mapped to whether the wallet is loaded.
bool eventFilter(QObject *object, QEvent *event) override
WalletModel * getWalletModel() const noexcept
int prevBlocks
Keep track of previous number of blocks, to detect progress.
void toggleHidden()
Simply calls showNormalIfMinimized(true)
interfaces::Node & m_node
void walletRemoved(WalletModel *wallet_model)
GUIUtil::ThemedLabel * labelWalletEncryptionIcon
void setNumConnections(int count)
Set number of connections shown in the UI.
QString getDisplayName() const
"Help message" dialog box
void backupWallet()
Backup the wallet.
void closeEvent(QCloseEvent *event) override
QComboBox * m_wallet_selector
bool addView(WalletView *walletView)
void clicked(const QPoint &point)
Emitted when the progressbar is clicked.
QString formatNiceTimeOffset(qint64 secs)
void createContextMenu()
Creates context menu, its actions, and wires up all the relevant signals for mouse events...
void showDebugWindowActivateConsole()
Show debug window and set focus to the console.
void createActions()
Create the main UI actions.
QAction * encryptWalletAction
void aboutClicked()
Show about dialog.
const Consensus::Params & GetConsensus() const
const PlatformStyle * m_platform_style
void createWallet()
Launch the wallet creation modal (no-op if wallet is not compiled)
void removeWallet(WalletModel *wallet_model)
int getHeaderTipHeight() const
void updateHeadersSyncProgressLabel()
void gotoLoadPSBT(bool from_clipboard=false)
Load Partially Signed Bitcoin Transaction.
int64_t GetTime()
DEPRECATED, see GetTime.
static const std::string DEFAULT_UIPLATFORM
static QString longName(Unit unit)
Long name.
virtual void setNetworkActive(bool active)=0
Set network active.
int64_t getHeaderTipTime() const
GUIUtil::ThemedLabel * labelWalletHDStatusIcon
Top-level interface for a bitcoin node (bitcoind process).
bilingual_str _(ConstevalStringLiteral str)
Translation function.
void transactionClicked()
static constexpr int64_t MAX_BLOCK_TIME_GAP
Maximum gap between node time and block time used for the "Catching up..." mode in GUI...
A container for embedding all wallet-related controls into BitcoinGUI.
void showProgress(const QString &title, int nProgress)
void usedSendingAddresses()
Show used sending addresses.
void setDisplayUnit(const QVariant &new_unit)
Updates current unit in memory, settings and emits displayUnitChanged(new_unit) signal.
void onDisplayUnitsClicked(const QPoint &point)
Shows context menu with Display Unit options by the mouse coordinates.
void createMenuBar()
Create the menu bar and sub-menus.
void onMenuSelection(QAction *action)
Tells underlying optionsModel to update its current display unit.
std::unique_ptr< interfaces::Handler > m_handler_message_box
void showTrayIconChanged(bool)
void dragEnterEvent(QDragEnterEvent *event) override
bool getProxyInfo(std::string &ip_port) const