27 #endif // ENABLE_WALLET 34 #include <chainparams.h> 40 #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> 74 #if defined(Q_OS_MACOS) 76 #elif defined(Q_OS_WIN) 86 trayIconMenu{
new QMenu()},
87 platformStyle(_platformStyle),
88 m_network_style(networkStyle)
91 if (!restoreGeometry(settings.value(
"MainWindowGeometry").toByteArray())) {
93 move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
96 setContextMenuPolicy(Qt::PreventContextMenu);
100 #endif // ENABLE_WALLET 101 QApplication::setWindowIcon(m_network_style->getTrayAndWindowIcon());
102 setWindowIcon(m_network_style->getTrayAndWindowIcon());
111 walletFrame =
new WalletFrame(_platformStyle,
this);
113 connect(walletFrame, &
WalletFrame::message, [
this](
const QString& title,
const QString& message,
unsigned int style) {
114 this->message(title, message, style);
117 setCentralWidget(walletFrame);
119 #endif // ENABLE_WALLET 124 setCentralWidget(rpcConsole);
125 Q_EMIT consoleShown(rpcConsole);
128 modalOverlay =
new ModalOverlay(enableWallet, this->centralWidget());
131 setAcceptDrops(
true);
144 if (QSystemTrayIcon::isSystemTrayAvailable()) {
147 notificator =
new Notificator(QApplication::applicationName(), trayIcon,
this);
153 statusBar()->setSizeGripEnabled(
false);
156 QFrame *frameBlocks =
new QFrame();
157 frameBlocks->setContentsMargins(0,0,0,0);
158 frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
159 QHBoxLayout *frameBlocksLayout =
new QHBoxLayout(frameBlocks);
160 frameBlocksLayout->setContentsMargins(3,0,3,0);
161 frameBlocksLayout->setSpacing(3);
170 frameBlocksLayout->addStretch();
171 frameBlocksLayout->addWidget(unitDisplayControl);
172 frameBlocksLayout->addStretch();
173 frameBlocksLayout->addWidget(labelWalletEncryptionIcon);
174 labelWalletEncryptionIcon->hide();
175 frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
176 labelWalletHDStatusIcon->hide();
178 frameBlocksLayout->addWidget(labelProxyIcon);
179 frameBlocksLayout->addStretch();
180 frameBlocksLayout->addWidget(connectionsControl);
181 frameBlocksLayout->addStretch();
182 frameBlocksLayout->addWidget(labelBlocksIcon);
183 frameBlocksLayout->addStretch();
186 progressBarLabel =
new QLabel();
187 progressBarLabel->setVisible(
false);
189 progressBar->setAlignment(Qt::AlignCenter);
190 progressBar->setVisible(
false);
195 QString curStyle = QApplication::style()->metaObject()->className();
196 if(curStyle ==
"QWindowsStyle" || curStyle ==
"QWindowsXPStyle")
198 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; }");
201 statusBar()->addWidget(progressBarLabel);
202 statusBar()->addWidget(progressBar);
203 statusBar()->addPermanentWidget(frameBlocks);
206 this->installEventFilter(
this);
209 setWalletActionsEnabled(
false);
212 subscribeToCoreSignals();
234 settings.setValue(
"MainWindowGeometry", saveGeometry());
238 delete m_app_nap_inhibitor;
247 QActionGroup *tabGroup =
new QActionGroup(
this);
251 overviewAction->setStatusTip(tr(
"Show general overview of wallet"));
254 overviewAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+1")));
265 receiveCoinsAction->setStatusTip(tr(
"Request payments (generates QR codes and bitcoin: URIs)"));
272 historyAction->setStatusTip(tr(
"Browse transaction history"));
275 historyAction->setShortcut(QKeySequence(QStringLiteral(
"Alt+4")));
282 connect(
overviewAction, &QAction::triggered,
this, &BitcoinGUI::gotoOverviewPage);
284 connect(
sendCoinsAction, &QAction::triggered, [
this]{ gotoSendCoinsPage(); });
286 connect(
receiveCoinsAction, &QAction::triggered,
this, &BitcoinGUI::gotoReceiveCoinsPage);
288 connect(
historyAction, &QAction::triggered,
this, &BitcoinGUI::gotoHistoryPage);
289 #endif // ENABLE_WALLET 292 quitAction->setStatusTip(tr(
"Quit application"));
293 quitAction->setShortcut(QKeySequence(tr(
"Ctrl+Q")));
300 aboutQtAction->setStatusTip(tr(
"Show information about Qt"));
308 encryptWalletAction->setStatusTip(tr(
"Encrypt the private keys that belong to your wallet"));
315 signMessageAction->setStatusTip(tr(
"Sign messages with your Bitcoin addresses to prove you own them"));
317 verifyMessageAction->setStatusTip(tr(
"Verify messages to ensure they were signed with specified Bitcoin addresses"));
334 openAction =
new QAction(tr(
"Open &URI…"),
this);
335 openAction->setStatusTip(tr(
"Open a bitcoin: URI"));
373 connect(
aboutQtAction, &QAction::triggered, qApp, QApplication::aboutQt);
387 connect(
signMessageAction, &QAction::triggered, [
this]{ gotoSignMessageTab(); });
394 connect(
openAction, &QAction::triggered,
this, &BitcoinGUI::openClicked);
398 const std::string& path = i.first;
399 QString
name = path.empty() ? QString(
"["+tr(
"default wallet")+
"]") : QString::fromStdString(path);
403 name.replace(
name.indexOf(QChar(
'&')), 1, QString(
"&&"));
408 action->setEnabled(
false);
412 connect(action, &QAction::triggered, [
this, path] {
416 activity->open(path);
421 action->setEnabled(
false);
426 QString name_data_file = tr(
"Wallet Data");
429 QString title_windows = tr(
"Load Wallet Backup");
431 QString backup_file =
GUIUtil::getOpenFileName(
this, title_windows, QString(), name_data_file + QLatin1String(
" (*.dat)"),
nullptr);
432 if (backup_file.isEmpty())
return;
437 QString title = tr(
"Restore Wallet");
439 QString label = tr(
"Wallet Name");
440 QString wallet_name = QInputDialog::getText(
this, title, label, QLineEdit::Normal,
"", &wallet_name_ok);
441 if (!wallet_name_ok || wallet_name.isEmpty())
return;
448 activity->restore(backup_file_path, wallet_name.toStdString());
465 #endif // ENABLE_WALLET 468 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
476 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
484 file->addSeparator();
487 file->addSeparator();
493 file->addSeparator();
497 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
502 settings->addSeparator();
504 settings->addSeparator();
508 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
510 QAction* minimize_action = window_menu->addAction(tr(
"&Minimize"));
511 minimize_action->setShortcut(QKeySequence(tr(
"Ctrl+M")));
512 connect(minimize_action, &QAction::triggered, [] {
513 QApplication::activeWindow()->showMinimized();
515 connect(qApp, &QApplication::focusWindowChanged,
this, [minimize_action] (QWindow* window) {
516 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
520 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
521 connect(zoom_action, &QAction::triggered, [] {
522 QWindow* window = qApp->focusWindow();
523 if (window->windowState() != Qt::WindowMaximized) {
524 window->showMaximized();
526 window->showNormal();
530 connect(qApp, &QApplication::focusWindowChanged,
this, [zoom_action] (QWindow* window) {
531 zoom_action->setEnabled(window !=
nullptr);
537 window_menu->addSeparator();
538 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
539 connect(main_window_action, &QAction::triggered, [
this] {
543 window_menu->addSeparator();
548 window_menu->addSeparator();
552 connect(tab_action, &QAction::triggered, [
this, tab_type] {
560 help->addSeparator();
569 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
571 toolbar->setMovable(
false);
572 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
580 QWidget *spacer =
new QWidget();
581 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
582 toolbar->addWidget(spacer);
586 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
639 #endif // ENABLE_WALLET 666 #endif // ENABLE_WALLET 674 void BitcoinGUI::enableHistoryAction(
bool privacy)
680 void BitcoinGUI::setWalletController(
WalletController* wallet_controller,
bool show_loading_minimized)
683 assert(wallet_controller);
694 connect(wallet_controller, &WalletController::destroyed,
this, [
this] {
700 activity->load(show_loading_minimized);
708 void BitcoinGUI::addWallet(
WalletModel* walletModel)
734 enableHistoryAction(privacy);
739 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
760 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
774 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
777 if (wallet_model) setCurrentWallet(wallet_model);
780 void BitcoinGUI::removeAllWallets()
787 #endif // ENABLE_WALLET 810 assert(QSystemTrayIcon::isSystemTrayAvailable());
813 if (QSystemTrayIcon::isSystemTrayAvailable()) {
828 QAction* show_hide_action{
nullptr};
835 QAction* send_action{
nullptr};
836 QAction* receive_action{
nullptr};
837 QAction* sign_action{
nullptr};
838 QAction* verify_action{
nullptr};
848 options_action->setMenuRole(QAction::PreferencesRole);
850 QAction* quit_action{
nullptr};
857 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
858 if (reason == QSystemTrayIcon::Trigger) {
878 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
881 if (show_hide_action) show_hide_action->setText(
885 if (QApplication::activeModalWidget()) {
887 a->setEnabled(
false);
890 if (show_hide_action) show_hide_action->setEnabled(
true);
899 if (quit_action) quit_action->setEnabled(
true);
936 void BitcoinGUI::openClicked()
945 void BitcoinGUI::gotoOverviewPage()
951 void BitcoinGUI::gotoHistoryPage()
957 void BitcoinGUI::gotoReceiveCoinsPage()
963 void BitcoinGUI::gotoSendCoinsPage(QString addr)
969 void BitcoinGUI::gotoSignMessageTab(QString addr)
974 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
978 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
982 #endif // ENABLE_WALLET 990 case 0: icon =
":/icons/connect_0";
break;
991 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
992 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
993 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
994 default: icon =
":/icons/connect_4";
break;
1001 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
1004 tooltip = tr(
"Network activity disabled.");
1005 icon =
":/icons/network_disabled";
1009 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
1011 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1028 tr(
"Show Peers tab"),
1036 tr(
"Disable network activity") :
1038 tr(
"Enable network activity"),
1048 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1055 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1065 dlg->setCurrentTab(tab);
1076 m_app_nap_inhibitor->enableAppNap();
1078 m_app_nap_inhibitor->disableAppNap();
1093 statusBar()->clearMessage();
1097 switch (blockSource) {
1126 QDateTime currentDate = QDateTime::currentDateTime();
1127 qint64 secs = blockDate.secsTo(currentDate);
1129 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1133 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1136 #ifdef ENABLE_WALLET 1142 #endif // ENABLE_WALLET 1152 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1154 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1157 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1161 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1167 #ifdef ENABLE_WALLET 1173 #endif // ENABLE_WALLET 1175 tooltip += QString(
"<br>");
1176 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1177 tooltip += QString(
"<br>");
1178 tooltip += tr(
"Transactions after this will not yet be visible.");
1182 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1191 #ifdef ENABLE_WALLET 1194 message(tr(
"Error creating wallet"), tr(
"Cannot create new wallet, the software was compiled without sqlite support (required for descriptor wallets)"),
CClientUIInterface::MSG_ERROR);
1196 #endif // USE_SQLITE 1201 #endif // ENABLE_WALLET 1204 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1209 int nMBoxIcon = QMessageBox::Information;
1213 if (!title.isEmpty()) {
1218 msgType = tr(
"Error");
1222 msgType = tr(
"Warning");
1226 msgType = tr(
"Information");
1234 if (!msgType.isEmpty()) {
1235 strTitle +=
" - " + msgType;
1239 nMBoxIcon = QMessageBox::Critical;
1242 nMBoxIcon = QMessageBox::Warning;
1248 QMessageBox::StandardButton buttons;
1250 buttons = QMessageBox::Ok;
1253 QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle,
message, buttons,
this);
1254 mBox.setTextFormat(Qt::PlainText);
1255 mBox.setDetailedText(detailed_message);
1256 int r = mBox.exec();
1258 *
ret = r == QMessageBox::Ok;
1266 if (e->type() == QEvent::PaletteChange) {
1273 QMainWindow::changeEvent(e);
1275 #ifndef Q_OS_MACOS // Ignored on Mac 1276 if(e->type() == QEvent::WindowStateChange)
1280 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1281 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1283 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1286 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1288 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1298 #ifndef Q_OS_MACOS // Ignored on Mac 1310 QMainWindow::showMinimized();
1315 QMainWindow::closeEvent(event);
1327 #ifdef ENABLE_WALLET 1328 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1331 QString
msg = tr(
"Date: %1\n").arg(date) +
1334 msg += tr(
"Wallet: %1\n").arg(walletName);
1336 msg += tr(
"Type: %1\n").arg(type);
1337 if (!label.isEmpty())
1338 msg += tr(
"Label: %1\n").arg(label);
1339 else if (!address.isEmpty())
1340 msg += tr(
"Address: %1\n").arg(address);
1341 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1344 #endif // ENABLE_WALLET 1349 if(event->mimeData()->hasUrls())
1350 event->acceptProposedAction();
1355 if(event->mimeData()->hasUrls())
1357 for (
const QUrl &uri : event->mimeData()->urls())
1362 event->acceptProposedAction();
1368 if (event->type() == QEvent::StatusTip)
1374 return QMainWindow::eventFilter(
object, event);
1377 #ifdef ENABLE_WALLET 1384 gotoSendCoinsPage();
1390 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1393 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>"));
1397 void BitcoinGUI::setEncryptionStatus(
int status)
1432 void BitcoinGUI::updateWalletStatus()
1444 #endif // ENABLE_WALLET 1448 std::string ip_port;
1451 if (proxy_enabled) {
1453 QString ip_port_q = QString::fromStdString(ip_port);
1455 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1467 #ifdef ENABLE_WALLET 1470 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1478 setWindowTitle(window_title);
1510 if (nProgress == 0) {
1516 }
else if (nProgress == 100) {
1541 QString detailed_message;
1543 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1547 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1549 Q_ARG(QString, QString::fromStdString(caption)),
1550 Q_ARG(QString, QString::fromStdString(message.
translated)),
1551 Q_ARG(
unsigned int, style),
1553 Q_ARG(QString, detailed_message));
1579 : m_platform_style{platformStyle}
1581 createContextMenu();
1582 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1585 const QFontMetrics fm(font());
1589 setMinimumSize(max_width, 0);
1590 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1591 setStyleSheet(QString(
"QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
1602 if (e->type() == QEvent::PaletteChange) {
1604 if (style != styleSheet()) {
1605 setStyleSheet(style);
1609 QLabel::changeEvent(e);
1615 menu =
new QMenu(
this);
1646 QPoint globalPos = mapToGlobal(point);
1647 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.
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
virtual bool isLegacy()=0
Return whether is a legacy wallet.
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)
std::map< std::string, bool > listWalletDir() const
Returns all wallet names in the wallet dir mapped to whether the wallet is loaded.
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 ShutdownRequested() has been set
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.
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
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).
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