5 #include <bitcoin-build-config.h> 29 #endif // ENABLE_WALLET 36 #include <chainparams.h> 42 #include <validation.h> 45 #include <QActionGroup> 46 #include <QApplication> 50 #include <QDragEnterEvent> 51 #include <QInputDialog> 52 #include <QKeySequence> 53 #include <QListWidget> 56 #include <QMessageBox> 58 #include <QProgressDialog> 62 #include <QStackedWidget> 65 #include <QSystemTrayIcon> 69 #include <QVBoxLayout> 82 #if defined(Q_OS_MACOS) 84 #elif defined(Q_OS_WIN) 94 trayIconMenu{
new QMenu()},
95 platformStyle(_platformStyle),
96 m_network_style(networkStyle)
99 if (!restoreGeometry(settings.value(
"MainWindowGeometry").toByteArray())) {
101 move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
104 setContextMenuPolicy(Qt::PreventContextMenu);
108 #endif // ENABLE_WALLET 109 QApplication::setWindowIcon(m_network_style->getTrayAndWindowIcon());
110 setWindowIcon(m_network_style->getTrayAndWindowIcon());
119 walletFrame =
new WalletFrame(_platformStyle,
this);
121 connect(walletFrame, &
WalletFrame::message, [
this](
const QString& title,
const QString& message,
unsigned int style) {
122 this->message(title, message, style);
125 setCentralWidget(walletFrame);
127 #endif // ENABLE_WALLET 132 setCentralWidget(rpcConsole);
133 Q_EMIT consoleShown(rpcConsole);
136 modalOverlay =
new ModalOverlay(enableWallet, this->centralWidget());
139 setAcceptDrops(
true);
152 if (QSystemTrayIcon::isSystemTrayAvailable()) {
155 notificator =
new Notificator(QApplication::applicationName(), trayIcon,
this);
161 statusBar()->setSizeGripEnabled(
false);
164 QFrame *frameBlocks =
new QFrame();
165 frameBlocks->setContentsMargins(0,0,0,0);
166 frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
167 QHBoxLayout *frameBlocksLayout =
new QHBoxLayout(frameBlocks);
168 frameBlocksLayout->setContentsMargins(3,0,3,0);
169 frameBlocksLayout->setSpacing(3);
178 frameBlocksLayout->addStretch();
179 frameBlocksLayout->addWidget(unitDisplayControl);
180 frameBlocksLayout->addStretch();
181 frameBlocksLayout->addWidget(labelWalletEncryptionIcon);
182 labelWalletEncryptionIcon->hide();
183 frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
184 labelWalletHDStatusIcon->hide();
186 frameBlocksLayout->addWidget(labelProxyIcon);
187 frameBlocksLayout->addStretch();
188 frameBlocksLayout->addWidget(connectionsControl);
189 frameBlocksLayout->addStretch();
190 frameBlocksLayout->addWidget(labelBlocksIcon);
191 frameBlocksLayout->addStretch();
194 progressBarLabel =
new QLabel();
195 progressBarLabel->setVisible(
false);
197 progressBar->setAlignment(Qt::AlignCenter);
198 progressBar->setVisible(
false);
203 QString curStyle = QApplication::style()->metaObject()->className();
204 if(curStyle ==
"QWindowsStyle" || curStyle ==
"QWindowsXPStyle")
206 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; }");
209 statusBar()->addWidget(progressBarLabel);
210 statusBar()->addWidget(progressBar);
211 statusBar()->addPermanentWidget(frameBlocks);
214 this->installEventFilter(
this);
217 setWalletActionsEnabled(
false);
220 subscribeToCoreSignals();
242 settings.setValue(
"MainWindowGeometry", saveGeometry());
246 delete m_app_nap_inhibitor;
255 QActionGroup *tabGroup =
new QActionGroup(
this);
259 overviewAction->setStatusTip(tr(
"Show general overview of wallet"));
262 overviewAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+1")));
273 receiveCoinsAction->setStatusTip(tr(
"Request payments (generates QR codes and bitcoin: URIs)"));
280 historyAction->setStatusTip(tr(
"Browse transaction history"));
283 historyAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+4")));
290 connect(
overviewAction, &QAction::triggered,
this, &BitcoinGUI::gotoOverviewPage);
292 connect(
sendCoinsAction, &QAction::triggered, [
this]{ gotoSendCoinsPage(); });
294 connect(
receiveCoinsAction, &QAction::triggered,
this, &BitcoinGUI::gotoReceiveCoinsPage);
296 connect(
historyAction, &QAction::triggered,
this, &BitcoinGUI::gotoHistoryPage);
297 #endif // ENABLE_WALLET 300 quitAction->setStatusTip(tr(
"Quit application"));
301 quitAction->setShortcut(QKeySequence(tr(
"Ctrl+Q")));
303 aboutAction =
new QAction(tr(
"&About %1").arg(CLIENT_NAME),
this);
304 aboutAction->setStatusTip(tr(
"Show information about %1").arg(CLIENT_NAME));
308 aboutQtAction->setStatusTip(tr(
"Show information about Qt"));
311 optionsAction->setStatusTip(tr(
"Modify configuration options for %1").arg(CLIENT_NAME));
316 encryptWalletAction->setStatusTip(tr(
"Encrypt the private keys that belong to your wallet"));
323 signMessageAction->setStatusTip(tr(
"Sign messages with your Bitcoin addresses to prove you own them"));
325 verifyMessageAction->setStatusTip(tr(
"Verify messages to ensure they were signed with specified Bitcoin addresses"));
342 openAction =
new QAction(tr(
"Open &URI…"),
this);
343 openAction->setStatusTip(tr(
"Open a bitcoin: URI"));
373 showHelpMessageAction->setStatusTip(tr(
"Show the %1 help message to get a list with possible Bitcoin command-line options").arg(CLIENT_NAME));
382 connect(
aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
396 connect(
signMessageAction, &QAction::triggered, [
this]{ gotoSignMessageTab(); });
403 connect(
openAction, &QAction::triggered,
this, &BitcoinGUI::openClicked);
407 const auto& [loaded,
format] = info;
411 name.replace(QChar(
'&'), QString(
"&&"));
412 bool is_legacy =
format ==
"bdb";
414 name +=
" (needs migration)";
418 if (loaded || is_legacy) {
420 action->setEnabled(
false);
424 connect(action, &QAction::triggered, [
this, path] {
428 activity->open(path);
433 action->setEnabled(
false);
438 QString name_data_file = tr(
"Wallet Data");
441 QString title_windows = tr(
"Load Wallet Backup");
443 QString backup_file =
GUIUtil::getOpenFileName(
this, title_windows, QString(), name_data_file + QLatin1String(
" (*.dat)"),
nullptr);
444 if (backup_file.isEmpty())
return;
449 QString title = tr(
"Restore Wallet");
451 QString label = tr(
"Wallet Name");
452 QString wallet_name = QInputDialog::getText(
this, title, label, QLineEdit::Normal,
"", &wallet_name_ok);
453 if (!wallet_name_ok)
return;
454 if (wallet_name.isEmpty()) {
455 QMessageBox::critical(
nullptr, tr(
"Invalid Wallet Name"), tr(
"Wallet name cannot be empty"));
464 activity->restore(backup_file_path, wallet_name.toStdString());
476 const auto& [loaded,
format] = info;
485 name.replace(QChar(
'&'), QString(
"&&"));
488 connect(action, &QAction::triggered, [
this, wallet_name] {
491 activity->migrate(wallet_name);
496 action->setEnabled(
false);
499 QAction* restore_migrate_file_action =
m_migrate_wallet_menu->addAction(tr(
"Restore and Migrate Wallet File…"));
500 restore_migrate_file_action->setEnabled(
true);
502 connect(restore_migrate_file_action, &QAction::triggered, [
this] {
503 QString name_data_file = tr(
"Wallet Data");
504 QString title_windows = tr(
"Restore and Migrate Wallet Backup");
506 QString backup_file =
GUIUtil::getOpenFileName(
this, title_windows, QString(), name_data_file + QLatin1String(
" (*.dat)"),
nullptr);
507 if (backup_file.isEmpty())
return;
512 QString title = tr(
"Restore and Migrate Wallet");
514 QString label = tr(
"Wallet Name");
515 QString wallet_name = QInputDialog::getText(
this, title, label, QLineEdit::Normal,
"", &wallet_name_ok);
516 if (!wallet_name_ok || wallet_name.isEmpty())
return;
522 activity->restore_and_migrate(backup_file_path, wallet_name.toStdString());
528 #endif // ENABLE_WALLET 531 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
539 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
547 file->addSeparator();
550 file->addSeparator();
556 file->addSeparator();
560 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
565 settings->addSeparator();
567 settings->addSeparator();
571 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
573 QAction* minimize_action = window_menu->addAction(tr(
"&Minimize"));
574 minimize_action->setShortcut(QKeySequence(tr(
"Ctrl+M")));
575 connect(minimize_action, &QAction::triggered, [] {
576 QApplication::activeWindow()->showMinimized();
578 connect(qApp, &QApplication::focusWindowChanged,
this, [minimize_action] (QWindow* window) {
579 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
583 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
584 connect(zoom_action, &QAction::triggered, [] {
585 QWindow* window = qApp->focusWindow();
586 if (window->windowState() != Qt::WindowMaximized) {
587 window->showMaximized();
589 window->showNormal();
593 connect(qApp, &QApplication::focusWindowChanged,
this, [zoom_action] (QWindow* window) {
594 zoom_action->setEnabled(window !=
nullptr);
600 window_menu->addSeparator();
601 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
602 connect(main_window_action, &QAction::triggered, [
this] {
606 window_menu->addSeparator();
611 window_menu->addSeparator();
615 connect(tab_action, &QAction::triggered, [
this, tab_type] {
623 help->addSeparator();
632 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
634 toolbar->setMovable(
false);
635 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
643 QWidget *spacer =
new QWidget();
644 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
645 toolbar->addWidget(spacer);
649 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
702 #endif // ENABLE_WALLET 729 #endif // ENABLE_WALLET 737 void BitcoinGUI::enableHistoryAction(
bool privacy)
745 void BitcoinGUI::setWalletController(
WalletController* wallet_controller,
bool show_loading_minimized)
748 assert(wallet_controller);
761 connect(wallet_controller, &WalletController::destroyed,
this, [
this] {
767 activity->load(show_loading_minimized);
775 void BitcoinGUI::addWallet(
WalletModel* walletModel)
804 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
825 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
838 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
841 if (wallet_model) setCurrentWallet(wallet_model);
844 void BitcoinGUI::removeAllWallets()
851 #endif // ENABLE_WALLET 873 assert(QSystemTrayIcon::isSystemTrayAvailable());
876 if (QSystemTrayIcon::isSystemTrayAvailable()) {
891 QAction* show_hide_action{
nullptr};
898 QAction* send_action{
nullptr};
899 QAction* receive_action{
nullptr};
900 QAction* sign_action{
nullptr};
901 QAction* verify_action{
nullptr};
911 options_action->setMenuRole(QAction::PreferencesRole);
913 QAction* quit_action{
nullptr};
920 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
921 if (reason == QSystemTrayIcon::Trigger) {
941 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
944 if (show_hide_action) show_hide_action->setText(
948 if (QApplication::activeModalWidget()) {
950 a->setEnabled(
false);
953 if (show_hide_action) show_hide_action->setEnabled(
true);
962 if (quit_action) quit_action->setEnabled(
true);
999 void BitcoinGUI::openClicked()
1008 void BitcoinGUI::gotoOverviewPage()
1014 void BitcoinGUI::gotoHistoryPage()
1020 void BitcoinGUI::gotoReceiveCoinsPage()
1026 void BitcoinGUI::gotoSendCoinsPage(QString addr)
1032 void BitcoinGUI::gotoSignMessageTab(QString addr)
1037 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
1041 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
1045 #endif // ENABLE_WALLET 1054 case 0: icon =
":/icons/connect_0";
break;
1055 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
1056 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
1057 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
1058 default: icon =
":/icons/connect_4";
break;
1065 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
1068 tooltip = tr(
"Network activity disabled.");
1069 icon =
":/icons/network_disabled";
1073 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
1075 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1092 tr(
"Show Peers tab"),
1100 tr(
"Disable network activity") :
1102 tr(
"Enable network activity"),
1112 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1119 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1129 dlg->setCurrentTab(tab);
1140 m_app_nap_inhibitor->enableAppNap();
1142 m_app_nap_inhibitor->disableAppNap();
1157 statusBar()->clearMessage();
1161 switch (blockSource) {
1190 QDateTime currentDate = QDateTime::currentDateTime();
1191 qint64 secs = blockDate.secsTo(currentDate);
1193 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1197 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1200 #ifdef ENABLE_WALLET 1206 #endif // ENABLE_WALLET 1216 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1218 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1221 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1225 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1231 #ifdef ENABLE_WALLET 1237 #endif // ENABLE_WALLET 1239 tooltip += QString(
"<br>");
1240 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1241 tooltip += QString(
"<br>");
1242 tooltip += tr(
"Transactions after this will not yet be visible.");
1246 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1255 #ifdef ENABLE_WALLET 1260 #endif // ENABLE_WALLET 1263 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1266 QString strTitle{CLIENT_NAME};
1268 int nMBoxIcon = QMessageBox::Information;
1272 if (!title.isEmpty()) {
1277 msgType = tr(
"Error");
1281 msgType = tr(
"Warning");
1285 msgType = tr(
"Information");
1293 if (!msgType.isEmpty()) {
1294 strTitle +=
" - " + msgType;
1298 nMBoxIcon = QMessageBox::Critical;
1307 QMessageBox::StandardButton buttons;
1309 buttons = QMessageBox::Ok;
1312 QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle,
message, buttons,
this);
1313 mBox.setTextFormat(Qt::PlainText);
1314 mBox.setDetailedText(detailed_message);
1315 int r = mBox.exec();
1317 *
ret = r == QMessageBox::Ok;
1325 if (e->type() == QEvent::PaletteChange) {
1332 QMainWindow::changeEvent(e);
1334 #ifndef Q_OS_MACOS // Ignored on Mac 1335 if(e->type() == QEvent::WindowStateChange)
1339 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1340 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1342 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1345 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1347 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1357 #ifndef Q_OS_MACOS // Ignored on Mac 1369 QMainWindow::showMinimized();
1374 QMainWindow::closeEvent(event);
1386 #ifdef ENABLE_WALLET 1387 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1390 QString
msg = tr(
"Date: %1\n").arg(date) +
1393 msg += tr(
"Wallet: %1\n").arg(walletName);
1395 msg += tr(
"Type: %1\n").arg(type);
1396 if (!label.isEmpty())
1397 msg += tr(
"Label: %1\n").arg(label);
1398 else if (!address.isEmpty())
1399 msg += tr(
"Address: %1\n").arg(address);
1400 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1403 #endif // ENABLE_WALLET 1408 if(event->mimeData()->hasUrls())
1409 event->acceptProposedAction();
1414 if(event->mimeData()->hasUrls())
1416 for (
const QUrl &uri : event->mimeData()->urls())
1421 event->acceptProposedAction();
1427 if (event->type() == QEvent::StatusTip)
1433 return QMainWindow::eventFilter(
object, event);
1436 #ifdef ENABLE_WALLET 1443 gotoSendCoinsPage();
1449 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1452 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>"));
1456 void BitcoinGUI::setEncryptionStatus(
int status)
1491 void BitcoinGUI::updateWalletStatus()
1503 #endif // ENABLE_WALLET 1507 std::string ip_port;
1510 if (proxy_enabled) {
1512 QString ip_port_q = QString::fromStdString(ip_port);
1514 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1525 QString window_title = CLIENT_NAME;
1526 #ifdef ENABLE_WALLET 1529 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1537 setWindowTitle(window_title);
1569 if (nProgress == 0) {
1575 }
else if (nProgress == 100) {
1600 QString detailed_message;
1602 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1606 const QString title{};
1609 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1611 Q_ARG(QString, title),
1612 Q_ARG(QString, QString::fromStdString(message.
translated)),
1613 Q_ARG(
unsigned int, style),
1615 Q_ARG(QString, detailed_message));
1645 : m_platform_style{platformStyle}
1647 createContextMenu();
1648 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1651 const QFontMetrics fm(font());
1655 setMinimumSize(max_width, 0);
1656 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1657 setStyleSheet(QString(
"QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
1668 if (e->type() == QEvent::PaletteChange) {
1670 if (style != styleSheet()) {
1671 setStyleSheet(style);
1675 QLabel::changeEvent(e);
1681 menu =
new QMenu(
this);
1712 QPoint globalPos = mapToGlobal(point);
1713 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
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
int64_t GetTime()
DEPRECATED, see GetTime.
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
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
static constexpr int64_t MAX_BLOCK_TIME_GAP
Maximum gap between node time and block time used for the "Catching up..." mode in GUI...
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
static bool ThreadSafeMessageBox(BitcoinGUI *gui, const bilingual_str &message, unsigned int style)
"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)
static path PathFromString(const std::string &string)
Convert byte string to path object.
void removeWallet(WalletModel *wallet_model)
int getHeaderTipHeight() const
void updateHeadersSyncProgressLabel()
void gotoLoadPSBT(bool from_clipboard=false)
Load Partially Signed Bitcoin Transaction.
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).
void transactionClicked()
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