35 #include <chainparams.h>
41 #include <validation.h>
44 #include <QActionGroup>
45 #include <QApplication>
49 #include <QDragEnterEvent>
50 #include <QInputDialog>
51 #include <QKeySequence>
52 #include <QListWidget>
55 #include <QMessageBox>
57 #include <QProgressDialog>
61 #include <QStackedWidget>
64 #include <QSystemTrayIcon>
68 #include <QVBoxLayout>
73 #if defined(Q_OS_MACOS)
75 #elif defined(Q_OS_WIN)
85 trayIconMenu{new QMenu()},
86 platformStyle(_platformStyle),
87 m_network_style(networkStyle)
90 if (!restoreGeometry(settings.value(
"MainWindowGeometry").toByteArray())) {
92 move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
95 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;
250 QActionGroup *tabGroup =
new QActionGroup(
this);
254 overviewAction->setStatusTip(tr(
"Show general overview of wallet"));
257 overviewAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+1")));
268 receiveCoinsAction->setStatusTip(tr(
"Request payments (generates QR codes and bitcoin: URIs)"));
275 historyAction->setStatusTip(tr(
"Browse transaction history"));
278 historyAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+4")));
285 connect(
overviewAction, &QAction::triggered,
this, &BitcoinGUI::gotoOverviewPage);
287 connect(
sendCoinsAction, &QAction::triggered, [
this]{ gotoSendCoinsPage(); });
289 connect(
receiveCoinsAction, &QAction::triggered,
this, &BitcoinGUI::gotoReceiveCoinsPage);
291 connect(
historyAction, &QAction::triggered,
this, &BitcoinGUI::gotoHistoryPage);
295 quitAction->setStatusTip(tr(
"Quit application"));
296 quitAction->setShortcut(QKeySequence(tr(
"Ctrl+Q")));
303 aboutQtAction->setStatusTip(tr(
"Show information about Qt"));
311 encryptWalletAction->setStatusTip(tr(
"Encrypt the private keys that belong to your wallet"));
318 signMessageAction->setStatusTip(tr(
"Sign messages with your Bitcoin addresses to prove you own them"));
320 verifyMessageAction->setStatusTip(tr(
"Verify messages to ensure they were signed with specified Bitcoin addresses"));
337 openAction =
new QAction(tr(
"Open &URI…"),
this);
338 openAction->setStatusTip(tr(
"Open a bitcoin: URI"));
372 connect(
aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
386 connect(
signMessageAction, &QAction::triggered, [
this]{ gotoSignMessageTab(); });
393 connect(
openAction, &QAction::triggered,
this, &BitcoinGUI::openClicked);
397 const std::string& path = i.first;
398 QString name = path.empty() ? QString(
"["+tr(
"default wallet")+
"]") : QString::fromStdString(path);
402 name.replace(name.indexOf(QChar(
'&')), 1, QString(
"&&"));
403 QAction* action = m_open_wallet_menu->addAction(name);
407 action->setEnabled(false);
411 connect(action, &QAction::triggered, [
this, path] {
414 activity->open(path);
419 action->setEnabled(
false);
424 QString name_data_file = tr(
"Wallet Data");
427 QString title_windows = tr(
"Load Wallet Backup");
429 QString backup_file =
GUIUtil::getOpenFileName(
this, title_windows, QString(), name_data_file + QLatin1String(
" (*.dat)"),
nullptr);
430 if (backup_file.isEmpty())
return;
435 QString title = tr(
"Restore Wallet");
437 QString label = tr(
"Wallet Name");
438 QString wallet_name = QInputDialog::getText(
this, title, label, QLineEdit::Normal,
"", &wallet_name_ok);
439 if (!wallet_name_ok || wallet_name.isEmpty())
return;
445 activity->restore(backup_file_path, wallet_name.toStdString());
464 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
478 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
485 file->addSeparator();
488 file->addSeparator();
494 file->addSeparator();
498 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
503 settings->addSeparator();
505 settings->addSeparator();
509 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
511 QAction* minimize_action = window_menu->addAction(tr(
"&Minimize"));
512 minimize_action->setShortcut(QKeySequence(tr(
"Ctrl+M")));
513 connect(minimize_action, &QAction::triggered, [] {
514 QApplication::activeWindow()->showMinimized();
516 connect(qApp, &QApplication::focusWindowChanged,
this, [minimize_action] (QWindow* window) {
517 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
521 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
522 connect(zoom_action, &QAction::triggered, [] {
523 QWindow* window = qApp->focusWindow();
524 if (window->windowState() != Qt::WindowMaximized) {
525 window->showMaximized();
527 window->showNormal();
531 connect(qApp, &QApplication::focusWindowChanged,
this, [zoom_action] (QWindow* window) {
532 zoom_action->setEnabled(window !=
nullptr);
538 window_menu->addSeparator();
539 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
540 connect(main_window_action, &QAction::triggered, [
this] {
544 window_menu->addSeparator();
549 window_menu->addSeparator();
553 connect(tab_action, &QAction::triggered, [
this, tab_type] {
561 help->addSeparator();
570 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
572 toolbar->setMovable(
false);
573 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
581 QWidget *spacer =
new QWidget();
582 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
583 toolbar->addWidget(spacer);
587 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
672 void BitcoinGUI::enableHistoryAction(
bool privacy)
681 assert(wallet_controller);
692 connect(wallet_controller, &WalletController::destroyed,
this, [
this] {
706 void BitcoinGUI::addWallet(
WalletModel* walletModel)
732 enableHistoryAction(privacy);
737 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
758 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
771 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
774 if (wallet_model) setCurrentWallet(wallet_model);
777 void BitcoinGUI::removeAllWallets()
806 assert(QSystemTrayIcon::isSystemTrayAvailable());
809 if (QSystemTrayIcon::isSystemTrayAvailable()) {
824 QAction* show_hide_action{
nullptr};
831 QAction* send_action{
nullptr};
832 QAction* receive_action{
nullptr};
833 QAction* sign_action{
nullptr};
834 QAction* verify_action{
nullptr};
844 options_action->setMenuRole(QAction::PreferencesRole);
846 QAction* quit_action{
nullptr};
853 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
854 if (reason == QSystemTrayIcon::Trigger) {
873 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
874 if (show_hide_action) show_hide_action->setText(
875 (!isHidden() && !isMinimized() && !GUIUtil::isObscured(this)) ?
878 if (QApplication::activeModalWidget()) {
879 for (QAction* a : trayIconMenu.get()->actions()) {
880 a->setEnabled(false);
883 if (show_hide_action) show_hide_action->setEnabled(true);
885 send_action->setEnabled(sendCoinsAction->isEnabled());
886 receive_action->setEnabled(receiveCoinsAction->isEnabled());
887 sign_action->setEnabled(signMessageAction->isEnabled());
888 verify_action->setEnabled(verifyMessageAction->isEnabled());
892 if (quit_action) quit_action->setEnabled(
true);
929 void BitcoinGUI::openClicked()
938 void BitcoinGUI::gotoOverviewPage()
944 void BitcoinGUI::gotoHistoryPage()
950 void BitcoinGUI::gotoReceiveCoinsPage()
956 void BitcoinGUI::gotoSendCoinsPage(QString addr)
962 void BitcoinGUI::gotoSignMessageTab(QString addr)
967 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
971 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
983 case 0: icon =
":/icons/connect_0";
break;
984 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
985 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
986 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
987 default: icon =
":/icons/connect_4";
break;
994 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
997 tooltip = tr(
"Network activity disabled.");
998 icon =
":/icons/network_disabled";
1002 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
1004 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1021 tr(
"Show Peers tab"),
1029 tr(
"Disable network activity") :
1031 tr(
"Enable network activity"),
1041 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1048 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1058 dlg->setCurrentTab(tab);
1069 m_app_nap_inhibitor->enableAppNap();
1071 m_app_nap_inhibitor->disableAppNap();
1086 statusBar()->clearMessage();
1090 switch (blockSource) {
1119 QDateTime currentDate = QDateTime::currentDateTime();
1120 qint64 secs = blockDate.secsTo(currentDate);
1122 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1126 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1129 #ifdef ENABLE_WALLET
1145 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1147 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1150 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1154 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1160 #ifdef ENABLE_WALLET
1168 tooltip += QString(
"<br>");
1169 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1170 tooltip += QString(
"<br>");
1171 tooltip += tr(
"Transactions after this will not yet be visible.");
1175 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1182 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1187 int nMBoxIcon = QMessageBox::Information;
1191 if (!title.isEmpty()) {
1196 msgType = tr(
"Error");
1200 msgType = tr(
"Warning");
1204 msgType = tr(
"Information");
1212 if (!msgType.isEmpty()) {
1213 strTitle +=
" - " + msgType;
1217 nMBoxIcon = QMessageBox::Critical;
1220 nMBoxIcon = QMessageBox::Warning;
1226 QMessageBox::StandardButton buttons;
1228 buttons = QMessageBox::Ok;
1231 QMessageBox mBox(
static_cast<QMessageBox::Icon
>(nMBoxIcon), strTitle,
message, buttons,
this);
1232 mBox.setTextFormat(Qt::PlainText);
1233 mBox.setDetailedText(detailed_message);
1234 int r = mBox.exec();
1236 *
ret = r == QMessageBox::Ok;
1244 if (e->type() == QEvent::PaletteChange) {
1251 QMainWindow::changeEvent(e);
1254 if(e->type() == QEvent::WindowStateChange)
1258 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1259 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1261 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1264 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1266 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1288 QMainWindow::showMinimized();
1293 QMainWindow::closeEvent(event);
1305 #ifdef ENABLE_WALLET
1306 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1309 QString msg = tr(
"Date: %1\n").arg(date) +
1312 msg += tr(
"Wallet: %1\n").arg(walletName);
1314 msg += tr(
"Type: %1\n").arg(type);
1315 if (!label.isEmpty())
1316 msg += tr(
"Label: %1\n").arg(label);
1317 else if (!address.isEmpty())
1318 msg += tr(
"Address: %1\n").arg(address);
1319 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1327 if(event->mimeData()->hasUrls())
1328 event->acceptProposedAction();
1333 if(event->mimeData()->hasUrls())
1335 for (
const QUrl &uri : event->mimeData()->urls())
1340 event->acceptProposedAction();
1346 if (event->type() == QEvent::StatusTip)
1352 return QMainWindow::eventFilter(
object, event);
1355 #ifdef ENABLE_WALLET
1362 gotoSendCoinsPage();
1368 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1371 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>"));
1375 void BitcoinGUI::setEncryptionStatus(
int status)
1410 void BitcoinGUI::updateWalletStatus()
1426 std::string ip_port;
1429 if (proxy_enabled) {
1431 QString ip_port_q = QString::fromStdString(ip_port);
1433 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1445 #ifdef ENABLE_WALLET
1448 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1456 setWindowTitle(window_title);
1488 if (nProgress == 0) {
1494 }
else if (nProgress == 100) {
1519 QString detailed_message;
1521 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1525 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1527 Q_ARG(QString, QString::fromStdString(caption)),
1528 Q_ARG(QString, QString::fromStdString(message.
translated)),
1529 Q_ARG(
unsigned int, style),
1531 Q_ARG(QString, detailed_message));
1557 : m_platform_style{platformStyle}
1560 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1563 const QFontMetrics fm(font());
1567 setMinimumSize(max_width, 0);
1568 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1580 if (e->type() == QEvent::PaletteChange) {
1582 if (style != styleSheet()) {
1583 setStyleSheet(style);
1587 QLabel::changeEvent(e);
1593 menu =
new QMenu(
this);
1624 QPoint globalPos = mapToGlobal(point);
1625 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 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
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 ShutdownRequested() has been set
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()
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 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.