27 #endif // ENABLE_WALLET 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);
99 #endif // ENABLE_WALLET 100 QApplication::setWindowIcon(m_network_style->getTrayAndWindowIcon());
101 setWindowIcon(m_network_style->getTrayAndWindowIcon());
110 walletFrame =
new WalletFrame(_platformStyle,
this);
115 connect(walletFrame, &
WalletFrame::message, [
this](
const QString& title,
const QString& message,
unsigned int style) {
116 this->message(title, message, style);
119 setCentralWidget(walletFrame);
121 #endif // ENABLE_WALLET 126 setCentralWidget(rpcConsole);
127 Q_EMIT consoleShown(rpcConsole);
130 modalOverlay =
new ModalOverlay(enableWallet, this->centralWidget());
133 setAcceptDrops(
true);
146 if (QSystemTrayIcon::isSystemTrayAvailable()) {
149 notificator =
new Notificator(QApplication::applicationName(), trayIcon,
this);
155 statusBar()->setSizeGripEnabled(
false);
158 QFrame *frameBlocks =
new QFrame();
159 frameBlocks->setContentsMargins(0,0,0,0);
160 frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
161 QHBoxLayout *frameBlocksLayout =
new QHBoxLayout(frameBlocks);
162 frameBlocksLayout->setContentsMargins(3,0,3,0);
163 frameBlocksLayout->setSpacing(3);
172 frameBlocksLayout->addStretch();
173 frameBlocksLayout->addWidget(unitDisplayControl);
174 frameBlocksLayout->addStretch();
175 frameBlocksLayout->addWidget(labelWalletEncryptionIcon);
176 labelWalletEncryptionIcon->hide();
177 frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
178 labelWalletHDStatusIcon->hide();
180 frameBlocksLayout->addWidget(labelProxyIcon);
181 frameBlocksLayout->addStretch();
182 frameBlocksLayout->addWidget(connectionsControl);
183 frameBlocksLayout->addStretch();
184 frameBlocksLayout->addWidget(labelBlocksIcon);
185 frameBlocksLayout->addStretch();
188 progressBarLabel =
new QLabel();
189 progressBarLabel->setVisible(
false);
191 progressBar->setAlignment(Qt::AlignCenter);
192 progressBar->setVisible(
false);
197 QString curStyle = QApplication::style()->metaObject()->className();
198 if(curStyle ==
"QWindowsStyle" || curStyle ==
"QWindowsXPStyle")
200 progressBar->setStyleSheet(
"QProgressBar { background-color: #e8e8e8; border: 1px solid grey; border-radius: 7px; padding: 1px; text-align: center; } QProgressBar::chunk { background: QLinearGradient(x1: 0, y1: 0, x2: 1, y2: 0, stop: 0 #FF8000, stop: 1 orange); border-radius: 7px; margin: 0px; }");
203 statusBar()->addWidget(progressBarLabel);
204 statusBar()->addWidget(progressBar);
205 statusBar()->addPermanentWidget(frameBlocks);
208 this->installEventFilter(
this);
211 setWalletActionsEnabled(
false);
214 subscribeToCoreSignals();
236 settings.setValue(
"MainWindowGeometry", saveGeometry());
240 delete m_app_nap_inhibitor;
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);
292 #endif // ENABLE_WALLET 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(
"&&"));
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());
460 #endif // ENABLE_WALLET 463 connect(
new QShortcut(QKeySequence(Qt::CTRL | Qt::SHIFT | Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
477 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 663 #endif // ENABLE_WALLET 672 assert(wallet_controller);
693 void BitcoinGUI::addWallet(
WalletModel* walletModel)
722 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
743 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
756 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
759 if (wallet_model) setCurrentWallet(wallet_model);
762 void BitcoinGUI::removeAllWallets()
769 #endif // ENABLE_WALLET 791 assert(QSystemTrayIcon::isSystemTrayAvailable());
794 if (QSystemTrayIcon::isSystemTrayAvailable()) {
809 QAction* show_hide_action{
nullptr};
816 QAction* send_action{
nullptr};
817 QAction* receive_action{
nullptr};
818 QAction* sign_action{
nullptr};
819 QAction* verify_action{
nullptr};
829 options_action->setMenuRole(QAction::PreferencesRole);
831 QAction* quit_action{
nullptr};
838 connect(
trayIcon, &QSystemTrayIcon::activated, [
this](QSystemTrayIcon::ActivationReason reason) {
839 if (reason == QSystemTrayIcon::Trigger) {
858 [
this, show_hide_action, send_action, receive_action, sign_action, verify_action, options_action, node_window_action, quit_action] {
859 if (show_hide_action) show_hide_action->setText(
863 if (QApplication::activeModalWidget()) {
865 a->setEnabled(
false);
868 if (show_hide_action) show_hide_action->setEnabled(
true);
877 if (quit_action) quit_action->setEnabled(
true);
914 void BitcoinGUI::openClicked()
923 void BitcoinGUI::gotoOverviewPage()
929 void BitcoinGUI::gotoHistoryPage()
935 void BitcoinGUI::gotoReceiveCoinsPage()
941 void BitcoinGUI::gotoSendCoinsPage(QString addr)
947 void BitcoinGUI::gotoSignMessageTab(QString addr)
952 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
956 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
960 #endif // ENABLE_WALLET 968 case 0: icon =
":/icons/connect_0";
break;
969 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
970 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
971 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
972 default: icon =
":/icons/connect_4";
break;
979 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
982 tooltip = tr(
"Network activity disabled.");
983 icon =
":/icons/network_disabled";
987 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
989 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
1006 tr(
"Show Peers tab"),
1014 tr(
"Disable network activity") :
1016 tr(
"Enable network activity"),
1026 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1033 progressBarLabel->setText(tr(
"Pre-syncing Headers (%1%)…").arg(QString::number(100.0 / (height+estHeadersLeft)*height,
'f', 1)));
1043 dlg->setCurrentTab(tab);
1054 m_app_nap_inhibitor->enableAppNap();
1056 m_app_nap_inhibitor->disableAppNap();
1071 statusBar()->clearMessage();
1075 switch (blockSource) {
1107 QDateTime currentDate = QDateTime::currentDateTime();
1108 qint64 secs = blockDate.secsTo(currentDate);
1110 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1114 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1117 #ifdef ENABLE_WALLET 1123 #endif // ENABLE_WALLET 1133 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1135 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1138 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1142 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1148 #ifdef ENABLE_WALLET 1154 #endif // ENABLE_WALLET 1156 tooltip += QString(
"<br>");
1157 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1158 tooltip += QString(
"<br>");
1159 tooltip += tr(
"Transactions after this will not yet be visible.");
1163 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1170 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool*
ret,
const QString& detailed_message)
1175 int nMBoxIcon = QMessageBox::Information;
1179 if (!title.isEmpty()) {
1184 msgType = tr(
"Error");
1188 msgType = tr(
"Warning");
1192 msgType = tr(
"Information");
1200 if (!msgType.isEmpty()) {
1201 strTitle +=
" - " + msgType;
1205 nMBoxIcon = QMessageBox::Critical;
1208 nMBoxIcon = QMessageBox::Warning;
1214 QMessageBox::StandardButton buttons;
1216 buttons = QMessageBox::Ok;
1219 QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle,
message, buttons,
this);
1220 mBox.setTextFormat(Qt::PlainText);
1221 mBox.setDetailedText(detailed_message);
1222 int r = mBox.exec();
1224 *
ret = r == QMessageBox::Ok;
1232 if (e->type() == QEvent::PaletteChange) {
1239 QMainWindow::changeEvent(e);
1241 #ifndef Q_OS_MACOS // Ignored on Mac 1242 if(e->type() == QEvent::WindowStateChange)
1246 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1247 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1249 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1252 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1254 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1264 #ifndef Q_OS_MACOS // Ignored on Mac 1276 QMainWindow::showMinimized();
1281 QMainWindow::closeEvent(event);
1293 #ifdef ENABLE_WALLET 1294 void BitcoinGUI::incomingTransaction(
const QString& date,
BitcoinUnit unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1297 QString msg = tr(
"Date: %1\n").arg(date) +
1300 msg += tr(
"Wallet: %1\n").arg(walletName);
1302 msg += tr(
"Type: %1\n").arg(type);
1303 if (!label.isEmpty())
1304 msg += tr(
"Label: %1\n").arg(label);
1305 else if (!address.isEmpty())
1306 msg += tr(
"Address: %1\n").arg(address);
1307 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1310 #endif // ENABLE_WALLET 1315 if(event->mimeData()->hasUrls())
1316 event->acceptProposedAction();
1321 if(event->mimeData()->hasUrls())
1323 for (
const QUrl &uri : event->mimeData()->urls())
1328 event->acceptProposedAction();
1334 if (event->type() == QEvent::StatusTip)
1340 return QMainWindow::eventFilter(
object, event);
1343 #ifdef ENABLE_WALLET 1350 gotoSendCoinsPage();
1356 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1359 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>"));
1363 void BitcoinGUI::setEncryptionStatus(
int status)
1398 void BitcoinGUI::updateWalletStatus()
1410 #endif // ENABLE_WALLET 1414 std::string ip_port;
1417 if (proxy_enabled) {
1419 QString ip_port_q = QString::fromStdString(ip_port);
1421 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1433 #ifdef ENABLE_WALLET 1436 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1444 setWindowTitle(window_title);
1476 if (nProgress == 0) {
1482 }
else if (nProgress == 100) {
1507 QString detailed_message;
1509 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1513 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1515 Q_ARG(QString, QString::fromStdString(caption)),
1516 Q_ARG(QString, QString::fromStdString(message.
translated)),
1517 Q_ARG(
unsigned int, style),
1519 Q_ARG(QString, detailed_message));
1545 : optionsModel(nullptr),
1547 m_platform_style{platformStyle}
1549 createContextMenu();
1550 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1553 const QFontMetrics fm(font());
1557 setMinimumSize(max_width, 0);
1558 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1559 setStyleSheet(QString(
"QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
1570 if (e->type() == QEvent::PaletteChange) {
1572 if (style != styleSheet()) {
1573 setStyleSheet(style);
1577 QLabel::changeEvent(e);
1583 menu =
new QMenu(
this);
1614 QPoint globalPos = mapToGlobal(point);
1615 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
void opened(WalletModel *wallet_model)
QAction * verifyMessageAction
void setPrivacy(bool privacy)
static constexpr int HEADER_HEIGHT_DELTA_SYNC
The required delta of headers to the estimated number of available headers until we show the IBD prog...
QAction * m_open_wallet_action
void triggered(bool hidden)
void usedReceivingAddresses()
Show used receiving addresses.
QAction * m_close_wallet_action
static bool ThreadSafeMessageBox(BitcoinGUI *gui, const bilingual_str &message, const std::string &caption, unsigned int style)
Mask of all available buttons in CClientUIInterface::MessageBoxFlags This needs to be updated...
void tipUpdate(int count, const QDateTime &blockDate, double nVerificationProgress)
Qt::ConnectionType blockingGUIThreadConnection()
Get connection type to call object slot in GUI thread with invokeMethod.
void updateHeadersPresyncProgressLabel(int64_t height, const QDateTime &blockDate)
void setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
void networkActiveChanged(bool networkActive)
BitcoinUnit getDisplayUnit() const
void setClientModel(ClientModel *clientModel=nullptr, interfaces::BlockAndHeaderTipInfo *tip_info=nullptr)
Set the client model.
Controller between interfaces::Node, WalletModel instances and the GUI.
OptionsModel * getOptionsModel()
bool getShowTrayIcon() const
QMenu * m_open_wallet_menu
macOS-specific Dock icon handler.
void outOfSyncWarningClicked()
Notify that the out of sync warning icon has been pressed.
bool isLayerVisible() const
HelpMessageDialog * helpMessageDialog
QLabel * progressBarLabel
QSystemTrayIcon * trayIcon
QAction * showHelpMessageAction
void ShowModalDialogAsynchronously(QDialog *dialog)
Shows a QDialog instance asynchronously, and deletes it on close.
Notify user of potential problem.
Modal overlay to display information about the chain-sync state.
bool isPrivacyModeActivated() const
void changeEvent(QEvent *e) override
const QString & getTitleAddText() const
void changeEvent(QEvent *e) override
void numConnectionsChanged(int count)
void setNetworkActive(bool network_active)
Set network state shown in the UI.
Signals for UI communication.
GUIUtil::ClickableLabel * connectionsControl
QAction * backupWalletAction
QAction * m_load_psbt_clipboard_action
void setOptionsModel(OptionsModel *optionsModel)
Lets the control know about the Options Model (and its signals)
void dropEvent(QDropEvent *event) override
void bringToFront(QWidget *w)
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.
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
enum BlockSource getBlockSource() const
Returns enum BlockSource of the current importing/syncing state.
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)
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
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 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