27 #endif // ENABLE_WALLET 41 #include <validation.h> 44 #include <QApplication> 48 #include <QDragEnterEvent> 49 #include <QListWidget> 52 #include <QMessageBox> 54 #include <QProgressDialog> 58 #include <QStackedWidget> 61 #include <QSystemTrayIcon> 65 #include <QVBoxLayout> 72 #elif defined(Q_OS_WIN) 82 trayIconMenu{
new QMenu()},
83 platformStyle(_platformStyle),
84 m_network_style(networkStyle)
87 if (!restoreGeometry(settings.value(
"MainWindowGeometry").toByteArray())) {
89 move(QGuiApplication::primaryScreen()->availableGeometry().center() - frameGeometry().center());
92 setContextMenuPolicy(Qt::PreventContextMenu);
96 #endif // ENABLE_WALLET 97 QApplication::setWindowIcon(m_network_style->getTrayAndWindowIcon());
98 setWindowIcon(m_network_style->getTrayAndWindowIcon());
107 walletFrame =
new WalletFrame(_platformStyle,
this);
113 setCentralWidget(walletFrame);
115 #endif // ENABLE_WALLET 120 setCentralWidget(rpcConsole);
121 Q_EMIT consoleShown(rpcConsole);
124 modalOverlay =
new ModalOverlay(enableWallet, this->centralWidget());
127 setAcceptDrops(
true);
140 if (QSystemTrayIcon::isSystemTrayAvailable()) {
143 notificator =
new Notificator(QApplication::applicationName(), trayIcon,
this);
149 statusBar()->setSizeGripEnabled(
false);
152 QFrame *frameBlocks =
new QFrame();
153 frameBlocks->setContentsMargins(0,0,0,0);
154 frameBlocks->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
155 QHBoxLayout *frameBlocksLayout =
new QHBoxLayout(frameBlocks);
156 frameBlocksLayout->setContentsMargins(3,0,3,0);
157 frameBlocksLayout->setSpacing(3);
166 frameBlocksLayout->addStretch();
167 frameBlocksLayout->addWidget(unitDisplayControl);
168 frameBlocksLayout->addStretch();
169 frameBlocksLayout->addWidget(labelWalletEncryptionIcon);
170 frameBlocksLayout->addWidget(labelWalletHDStatusIcon);
172 frameBlocksLayout->addWidget(labelProxyIcon);
173 frameBlocksLayout->addStretch();
174 frameBlocksLayout->addWidget(connectionsControl);
175 frameBlocksLayout->addStretch();
176 frameBlocksLayout->addWidget(labelBlocksIcon);
177 frameBlocksLayout->addStretch();
180 progressBarLabel =
new QLabel();
181 progressBarLabel->setVisible(
false);
183 progressBar->setAlignment(Qt::AlignCenter);
184 progressBar->setVisible(
false);
189 QString curStyle = QApplication::style()->metaObject()->className();
190 if(curStyle ==
"QWindowsStyle" || curStyle ==
"QWindowsXPStyle")
192 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; }");
195 statusBar()->addWidget(progressBarLabel);
196 statusBar()->addWidget(progressBar);
197 statusBar()->addPermanentWidget(frameBlocks);
200 this->installEventFilter(
this);
203 setWalletActionsEnabled(
false);
206 subscribeToCoreSignals();
228 settings.setValue(
"MainWindowGeometry", saveGeometry());
232 delete m_app_nap_inhibitor;
242 QActionGroup *tabGroup =
new QActionGroup(
this);
246 overviewAction->setStatusTip(tr(
"Show general overview of wallet"));
264 receiveCoinsAction->setStatusTip(tr(
"Request payments (generates QR codes and bitcoin: URIs)"));
275 historyAction->setStatusTip(tr(
"Browse transaction history"));
278 historyAction->setShortcut(QKeySequence(Qt::ALT + Qt::Key_4));
285 connect(
overviewAction, &QAction::triggered,
this, &BitcoinGUI::gotoOverviewPage);
287 connect(
sendCoinsAction, &QAction::triggered, [
this]{ gotoSendCoinsPage(); });
291 connect(
receiveCoinsAction, &QAction::triggered,
this, &BitcoinGUI::gotoReceiveCoinsPage);
295 connect(
historyAction, &QAction::triggered,
this, &BitcoinGUI::gotoHistoryPage);
296 #endif // ENABLE_WALLET 299 quitAction->setStatusTip(tr(
"Quit application"));
300 quitAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_Q));
307 aboutQtAction->setStatusTip(tr(
"Show information about Qt"));
317 encryptWalletAction->setStatusTip(tr(
"Encrypt the private keys that belong to your wallet"));
324 signMessageAction->setStatusTip(tr(
"Sign messages with your Bitcoin addresses to prove you own them"));
326 verifyMessageAction->setStatusTip(tr(
"Verify messages to ensure they were signed with specified Bitcoin addresses"));
343 openAction =
new QAction(tr(
"Open &URI…"),
this);
344 openAction->setStatusTip(tr(
"Open a bitcoin: URI"));
370 connect(
quitAction, &QAction::triggered, qApp, QApplication::quit);
372 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);
438 #endif // ENABLE_WALLET 441 connect(
new QShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_D),
this), &QShortcut::activated,
this, &
BitcoinGUI::showDebugWindow);
455 QMenu *file =
appMenuBar->addMenu(tr(
"&File"));
462 file->addSeparator();
469 file->addSeparator();
473 QMenu *settings =
appMenuBar->addMenu(tr(
"&Settings"));
478 settings->addSeparator();
480 settings->addSeparator();
484 QMenu* window_menu =
appMenuBar->addMenu(tr(
"&Window"));
486 QAction* minimize_action = window_menu->addAction(tr(
"Minimize"));
487 minimize_action->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));
488 connect(minimize_action, &QAction::triggered, [] {
489 QApplication::activeWindow()->showMinimized();
491 connect(qApp, &QApplication::focusWindowChanged, [minimize_action] (QWindow* window) {
492 minimize_action->setEnabled(window !=
nullptr && (window->flags() & Qt::Dialog) != Qt::Dialog && window->windowState() != Qt::WindowMinimized);
496 QAction* zoom_action = window_menu->addAction(tr(
"Zoom"));
497 connect(zoom_action, &QAction::triggered, [] {
498 QWindow* window = qApp->focusWindow();
499 if (window->windowState() != Qt::WindowMaximized) {
500 window->showMaximized();
502 window->showNormal();
506 connect(qApp, &QApplication::focusWindowChanged, [zoom_action] (QWindow* window) {
507 zoom_action->setEnabled(window !=
nullptr);
513 window_menu->addSeparator();
514 QAction* main_window_action = window_menu->addAction(tr(
"Main Window"));
515 connect(main_window_action, &QAction::triggered, [
this] {
519 window_menu->addSeparator();
524 window_menu->addSeparator();
528 connect(tab_action, &QAction::triggered, [
this, tab_type] {
536 help->addSeparator();
545 QToolBar *toolbar = addToolBar(tr(
"Tabs toolbar"));
547 toolbar->setMovable(
false);
548 toolbar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
556 QWidget *spacer =
new QWidget();
557 spacer->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
558 toolbar->addWidget(spacer);
562 connect(
m_wallet_selector, qOverload<int>(&QComboBox::currentIndexChanged),
this, &BitcoinGUI::setCurrentWalletBySelectorIndex);
615 #endif // ENABLE_WALLET 641 #endif // ENABLE_WALLET 650 assert(wallet_controller);
662 addWallet(wallet_model);
671 void BitcoinGUI::addWallet(
WalletModel* walletModel)
701 void BitcoinGUI::removeWallet(
WalletModel* walletModel)
722 void BitcoinGUI::setCurrentWallet(
WalletModel* wallet_model)
735 void BitcoinGUI::setCurrentWalletBySelectorIndex(
int index)
738 if (wallet_model) setCurrentWallet(wallet_model);
741 void BitcoinGUI::removeAllWallets()
748 #endif // ENABLE_WALLET 772 assert(QSystemTrayIcon::isSystemTrayAvailable());
775 if (QSystemTrayIcon::isSystemTrayAvailable()) {
815 #ifndef Q_OS_MAC // This is built-in on macOS 824 if(reason == QSystemTrayIcon::Trigger)
831 void BitcoinGUI::macosDockIconActivated()
870 void BitcoinGUI::openClicked()
879 void BitcoinGUI::gotoOverviewPage()
885 void BitcoinGUI::gotoHistoryPage()
891 void BitcoinGUI::gotoReceiveCoinsPage()
897 void BitcoinGUI::gotoSendCoinsPage(QString addr)
903 void BitcoinGUI::gotoSignMessageTab(QString addr)
908 void BitcoinGUI::gotoVerifyMessageTab(QString addr)
912 void BitcoinGUI::gotoLoadPSBT(
bool from_clipboard)
916 #endif // ENABLE_WALLET 924 case 0: icon =
":/icons/connect_0";
break;
925 case 1:
case 2:
case 3: icon =
":/icons/connect_1";
break;
926 case 4:
case 5:
case 6: icon =
":/icons/connect_2";
break;
927 case 7:
case 8:
case 9: icon =
":/icons/connect_3";
break;
928 default: icon =
":/icons/connect_4";
break;
935 tooltip = tr(
"%n active connection(s) to Bitcoin network.",
"",
count);
938 tooltip = tr(
"Network activity disabled.");
939 icon =
":/icons/network_disabled";
943 tooltip = QLatin1String(
"<nobr>") + tooltip + QLatin1String(
"<br>") +
945 tr(
"Click for more actions.") + QLatin1String(
"</nobr>");
962 tr(
"Show Peers tab"),
970 tr(
"Disable network activity") :
972 tr(
"Enable network activity"),
982 progressBarLabel->setText(tr(
"Syncing Headers (%1%)…").arg(QString::number(100.0 / (headersTipHeight+estHeadersLeft)*headersTipHeight,
'f', 1)));
1001 m_app_nap_inhibitor->enableAppNap();
1003 m_app_nap_inhibitor->disableAppNap();
1018 statusBar()->clearMessage();
1022 switch (blockSource) {
1051 QDateTime currentDate = QDateTime::currentDateTime();
1052 qint64 secs = blockDate.secsTo(currentDate);
1054 tooltip = tr(
"Processed %n block(s) of transaction history.",
"",
count);
1058 tooltip = tr(
"Up to date") + QString(
".<br>") + tooltip;
1061 #ifdef ENABLE_WALLET 1067 #endif // ENABLE_WALLET 1077 progressBar->setFormat(tr(
"%1 behind").arg(timeBehindText));
1079 progressBar->setValue(nVerificationProgress * 1000000000.0 + 0.5);
1082 tooltip = tr(
"Catching up…") + QString(
"<br>") + tooltip;
1086 QString(
":/animation/spinner-%1").arg(
spinnerFrame, 3, 10, QChar(
'0')),
1092 #ifdef ENABLE_WALLET 1098 #endif // ENABLE_WALLET 1100 tooltip += QString(
"<br>");
1101 tooltip += tr(
"Last received block was generated %1 ago.").arg(timeBehindText);
1102 tooltip += QString(
"<br>");
1103 tooltip += tr(
"Transactions after this will not yet be visible.");
1107 tooltip = QString(
"<nobr>") + tooltip + QString(
"</nobr>");
1114 void BitcoinGUI::message(
const QString& title, QString message,
unsigned int style,
bool* ret,
const QString& detailed_message)
1119 int nMBoxIcon = QMessageBox::Information;
1123 if (!title.isEmpty()) {
1128 msgType = tr(
"Error");
1132 msgType = tr(
"Warning");
1136 msgType = tr(
"Information");
1144 if (!msgType.isEmpty()) {
1145 strTitle +=
" - " + msgType;
1149 nMBoxIcon = QMessageBox::Critical;
1152 nMBoxIcon = QMessageBox::Warning;
1158 QMessageBox::StandardButton buttons;
1160 buttons = QMessageBox::Ok;
1163 QMessageBox mBox(static_cast<QMessageBox::Icon>(nMBoxIcon), strTitle,
message, buttons,
this);
1164 mBox.setTextFormat(Qt::PlainText);
1165 mBox.setDetailedText(detailed_message);
1166 int r = mBox.exec();
1168 *ret = r == QMessageBox::Ok;
1176 if (e->type() == QEvent::PaletteChange) {
1183 QMainWindow::changeEvent(e);
1185 #ifndef Q_OS_MAC // Ignored on Mac 1186 if(e->type() == QEvent::WindowStateChange)
1190 QWindowStateChangeEvent *wsevt =
static_cast<QWindowStateChangeEvent*
>(e);
1191 if(!(wsevt->oldState() & Qt::WindowMinimized) && isMinimized())
1193 QTimer::singleShot(0,
this, &BitcoinGUI::hide);
1196 else if((wsevt->oldState() & Qt::WindowMinimized) && !isMinimized())
1198 QTimer::singleShot(0,
this, &BitcoinGUI::show);
1208 #ifndef Q_OS_MAC // Ignored on Mac 1216 QApplication::quit();
1220 QMainWindow::showMinimized();
1225 QMainWindow::closeEvent(event);
1237 #ifdef ENABLE_WALLET 1238 void BitcoinGUI::incomingTransaction(
const QString& date,
int unit,
const CAmount& amount,
const QString& type,
const QString& address,
const QString& label,
const QString& walletName)
1241 QString msg = tr(
"Date: %1\n").arg(date) +
1244 msg += tr(
"Wallet: %1\n").arg(walletName);
1246 msg += tr(
"Type: %1\n").arg(type);
1247 if (!label.isEmpty())
1248 msg += tr(
"Label: %1\n").arg(label);
1249 else if (!address.isEmpty())
1250 msg += tr(
"Address: %1\n").arg(address);
1251 message((amount)<0 ? tr(
"Sent transaction") : tr(
"Incoming transaction"),
1254 #endif // ENABLE_WALLET 1259 if(event->mimeData()->hasUrls())
1260 event->acceptProposedAction();
1265 if(event->mimeData()->hasUrls())
1267 for (
const QUrl &uri : event->mimeData()->urls())
1272 event->acceptProposedAction();
1278 if (event->type() == QEvent::StatusTip)
1284 return QMainWindow::eventFilter(
object, event);
1287 #ifdef ENABLE_WALLET 1294 gotoSendCoinsPage();
1300 void BitcoinGUI::setHDStatus(
bool privkeyDisabled,
int hdEnabled)
1303 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>"));
1309 void BitcoinGUI::setEncryptionStatus(
int status)
1338 void BitcoinGUI::updateWalletStatus()
1351 #endif // ENABLE_WALLET 1355 std::string ip_port;
1358 if (proxy_enabled) {
1360 QString ip_port_q = QString::fromStdString(ip_port);
1362 labelProxyIcon->setToolTip(tr(
"Proxy is <b>enabled</b>: %1").arg(ip_port_q));
1374 #ifdef ENABLE_WALLET 1377 if (wallet_model && !wallet_model->
getWalletName().isEmpty()) {
1385 setWindowTitle(window_title);
1417 if (nProgress == 0) {
1423 }
else if (nProgress == 100) {
1448 QString detailed_message;
1450 detailed_message = BitcoinGUI::tr(
"Original message:") +
"\n" + QString::fromStdString(message.
original);
1454 bool invoked = QMetaObject::invokeMethod(gui,
"message",
1456 Q_ARG(QString, QString::fromStdString(caption)),
1457 Q_ARG(QString, QString::fromStdString(message.
translated)),
1458 Q_ARG(
unsigned int, style),
1460 Q_ARG(QString, detailed_message));
1486 : optionsModel(nullptr),
1488 m_platform_style{platformStyle}
1490 createContextMenu();
1491 setToolTip(tr(
"Unit to show amounts in. Click to select another unit."));
1494 const QFontMetrics fm(font());
1499 setMinimumSize(max_width, 0);
1500 setAlignment(Qt::AlignRight | Qt::AlignVCenter);
1501 setStyleSheet(QString(
"QLabel { color : %1 }").arg(m_platform_style->SingleColor().name()));
1512 if (e->type() == QEvent::PaletteChange) {
1514 if (style != styleSheet()) {
1515 setStyleSheet(style);
1519 QLabel::changeEvent(e);
1525 menu =
new QMenu(
this);
1556 QPoint globalPos = mapToGlobal(point);
1557 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.
void addWallet(WalletModel *const walletModel)
WalletModel * currentWalletModel() const
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.
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)
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 setWalletActionsEnabled(bool enabled)
Enable or disable all wallet-related actions.
void networkActiveChanged(bool networkActive)
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.
Mask of all available buttons in CClientUIInterface::MessageBoxFlags This needs to be updated...
void outOfSyncWarningClicked()
Notify that the out of sync warning icon has been pressed.
bool isLayerVisible() const
HelpMessageDialog * helpMessageDialog
QLabel * progressBarLabel
QSystemTrayIcon * trayIcon
void numBlocksChanged(int count, const QDateTime &blockDate, double nVerificationProgress, bool header, SynchronizationState sync_state)
QAction * showHelpMessageAction
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
static QString longName(int unit)
Long name.
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
void openOptionsDialogWithTab(OptionsDialog::Tab tab)
Open the OptionsDialog on the specified tab index.
EncryptionStatus getEncryptionStatus() const
int getDisplayUnit() const
virtual std::unique_ptr< Handler > handleMessageBox(MessageBoxFn fn)=0
Force blocking, modal message box dialog (not just OS notification)
void showOutOfSyncWarning(bool fShow)
void gotoHistoryPage()
Switch to history (transactions) page.
QAction * usedReceivingAddressesAction
int64_t CAmount
Amount in satoshis (Can be negative)
WalletModel * getWalletModel()
const NetworkStyle *const m_network_style
WalletController * m_wallet_controller
void gotoOverviewPage()
Switch to overview (home) page.
const PlatformStyle * platformStyle
QAction * toggleHideAction
virtual bool hdEnabled()=0
void showProgress(const QString &title, int nProgress)
Show progress dialog e.g.
static MacDockIconHandler * instance()
void setDisplayUnit(const QVariant &value)
Updates current unit in memory, settings and emits displayUnitChanged(newUnit) signal.
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 setKnownBestHeight(int count, const QDateTime &blockDate)
void optionsClicked()
Show configuration dialog.
void setNumBlocks(int count, const QDateTime &blockDate, double nVerificationProgress, bool headers, 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.
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
void updateDisplayUnit(int newUnits)
When Display Units are changed on OptionsModel it will refresh the display text of the control on the...
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 message(const QString &title, const QString &message, unsigned int style)
Fired when a message should be reported to the user.
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.
void setModel(OptionsModel *model)
QAction * openRPCConsoleAction
QAction * m_close_all_wallets_action
std::vector< TabTypes > tabs() const
static QString formatWithUnit(int unit, const CAmount &amount, bool plussign=false, SeparatorStyle separators=SeparatorStyle::STANDARD)
Format as string (with unit)
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.
GUIUtil::ClickableLabel * labelBlocksIcon
void setCurrentTab(OptionsDialog::Tab tab)
GUIUtil::ClickableProgressBar * progressBar
void showHelpMessageClicked()
Show help message dialog.
QString getWalletName() const
void walletAdded(WalletModel *wallet_model)
Notificator * notificator
void displayUnitChanged(int unit)
void PolishProgressDialog(QProgressDialog *dialog)
void changePassphrase()
Change encrypted wallet passphrase.
Model for Bitcoin network client.
const QIcon & getTrayAndWindowIcon() const
void mousePressEvent(QMouseEvent *event) override
So that it responds to left-button clicks.
QAction * receiveCoinsMenuAction
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.
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.
static QList< Unit > availableUnits()
Get list of units, for drop-down box.
void trayIconActivated(QSystemTrayIcon::ActivationReason reason)
Handle tray icon clicked.
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.
std::vector< WalletModel * > getOpenWallets() const
Returns wallet models currently open.
const std::unique_ptr< QMenu > trayIconMenu
QMenu * m_network_context_menu
void setPrivacy(bool privacy)
virtual WalletClient & walletClient()=0
Get wallet client.
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.
QAction * sendCoinsMenuAction
bool eventFilter(QObject *object, QEvent *event) override
int prevBlocks
Keep track of previous number of blocks, to detect progress.
void toggleHidden()
Simply calls showNormalIfMinimized(true) for use in SLOT() macro.
interfaces::Node & m_node
void walletRemoved(WalletModel *wallet_model)
void removeWallet(WalletModel *const walletModel)
GUIUtil::ThemedLabel * labelWalletEncryptionIcon
bool addWallet(WalletModel *walletModel, WalletView *walletView)
void setNumConnections(int count)
Set number of connections shown in the UI.
QString getDisplayName() const
"Help message" dialog box
void hdEnabledStatusChanged()
HD-Enabled status of wallet changed (only possible during startup)
void backupWallet()
Backup the wallet.
void closeEvent(QCloseEvent *event) override
QComboBox * m_wallet_selector
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()
Return system time (or mocked time, if set)
static const std::string DEFAULT_UIPLATFORM
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 incomingTransaction(const QString &date, int unit, const CAmount &amount, const QString &type, const QString &address, const QString &label, const QString &walletName)
Notify that a new transaction appeared.
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)
Predefined combinations for certain default usage cases.
void dragEnterEvent(QDragEnterEvent *event) override
virtual std::vector< std::unique_ptr< Wallet > > getWallets()=0
Return interfaces for accessing wallets (if any).
bool getProxyInfo(std::string &ip_port) const