2018-07-27 00:36:45 +02:00
// Copyright (c) 2011-2018 The Bitcoin Core developers
2014-12-13 05:09:33 +01:00
// Distributed under the MIT software license, see the accompanying
2013-11-04 16:20:43 +01:00
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
2014-11-03 16:16:40 +01:00
# ifndef BITCOIN_QT_SENDCOINSDIALOG_H
# define BITCOIN_QT_SENDCOINSDIALOG_H
2011-05-08 22:23:31 +02:00
2017-11-10 01:57:53 +01:00
# include <qt/walletmodel.h>
2013-10-30 15:37:41 +01:00
2011-05-08 22:23:31 +02:00
# include <QDialog>
2016-05-10 04:26:57 +02:00
# include <QMessageBox>
2013-08-12 17:03:03 +02:00
# include <QString>
2016-05-10 04:26:57 +02:00
# include <QTimer>
2011-05-08 22:23:31 +02:00
2014-11-02 00:14:47 +01:00
class ClientModel ;
2015-07-28 15:20:14 +02:00
class PlatformStyle ;
2011-07-16 19:01:05 +02:00
class SendCoinsEntry ;
2011-08-07 16:04:48 +02:00
class SendCoinsRecipient ;
2013-04-13 07:13:08 +02:00
namespace Ui {
class SendCoinsDialog ;
}
2014-09-05 13:18:35 +02:00
QT_BEGIN_NAMESPACE
class QUrl ;
QT_END_NAMESPACE
2011-11-13 13:19:52 +01:00
/** Dialog for sending bitcoins */
2011-05-08 22:23:31 +02:00
class SendCoinsDialog : public QDialog
{
Q_OBJECT
2011-05-12 14:44:52 +02:00
2011-05-08 22:23:31 +02:00
public :
2018-07-30 12:37:09 +02:00
explicit SendCoinsDialog ( const PlatformStyle * platformStyle , QWidget * parent = nullptr ) ;
2011-05-12 14:44:52 +02:00
~ SendCoinsDialog ( ) ;
2011-05-08 22:23:31 +02:00
2014-11-02 00:14:47 +01:00
void setClientModel ( ClientModel * clientModel ) ;
2011-06-30 18:05:29 +02:00
void setModel ( WalletModel * model ) ;
2011-05-30 20:20:12 +02:00
2012-09-22 07:32:28 +02:00
/** Set up the tab chain manually, as Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907).
2011-11-13 13:19:52 +01:00
*/
2011-07-16 19:01:05 +02:00
QWidget * setupTabChain ( QWidget * prev ) ;
2013-01-25 18:46:53 +01:00
void setAddress ( const QString & address ) ;
2011-08-07 16:04:48 +02:00
void pasteEntry ( const SendCoinsRecipient & rv ) ;
2013-07-22 08:50:39 +02:00
bool handlePaymentRequest ( const SendCoinsRecipient & recipient ) ;
2011-08-07 16:04:48 +02:00
2015-07-14 13:59:05 +02:00
public Q_SLOTS :
2011-07-07 17:33:15 +02:00
void clear ( ) ;
void reject ( ) ;
void accept ( ) ;
2011-08-07 16:04:48 +02:00
SendCoinsEntry * addEntry ( ) ;
2013-11-22 13:53:05 +01:00
void updateTabsAndLabels ( ) ;
2018-04-07 09:42:02 +02:00
void setBalance ( const interfaces : : WalletBalances & balances ) ;
2011-07-07 17:33:15 +02:00
2018-03-01 10:40:36 +01:00
Q_SIGNALS :
void coinsSent ( const uint256 & txid ) ;
2011-05-12 14:44:52 +02:00
private :
Ui : : SendCoinsDialog * ui ;
2014-11-02 00:14:47 +01:00
ClientModel * clientModel ;
2011-06-30 18:05:29 +02:00
WalletModel * model ;
2011-12-24 05:27:12 +01:00
bool fNewRecipientAllowed ;
2014-11-02 00:14:47 +01:00
bool fFeeMinimized ;
2015-07-28 15:20:14 +02:00
const PlatformStyle * platformStyle ;
2011-05-12 17:55:24 +02:00
2013-10-30 15:37:41 +01:00
// Process WalletModel::SendCoinsReturn and generate a pair consisting
2015-07-14 13:59:05 +02:00
// of a message and message flags for use in Q_EMIT message().
2013-10-30 15:37:41 +01:00
// Additional parameter msgArg can be used via .arg(msgArg).
void processSendCoinsReturn ( const WalletModel : : SendCoinsReturn & sendCoinsReturn , const QString & msgArg = QString ( ) ) ;
2014-11-02 00:14:47 +01:00
void minimizeFeeSection ( bool fMinimize ) ;
void updateFeeMinimizedLabel ( ) ;
2017-06-29 01:24:28 +02:00
// Update the passed in CCoinControl with state from the GUI
void updateCoinControlState ( CCoinControl & ctrl ) ;
2013-10-30 15:37:41 +01:00
2015-07-14 13:59:05 +02:00
private Q_SLOTS :
2011-05-12 17:55:24 +02:00
void on_sendButton_clicked ( ) ;
2014-11-02 00:14:47 +01:00
void on_buttonChooseFee_clicked ( ) ;
void on_buttonMinimizeFee_clicked ( ) ;
2011-07-16 19:01:05 +02:00
void removeEntry ( SendCoinsEntry * entry ) ;
2017-08-20 07:04:56 +02:00
void useAvailableBalance ( SendCoinsEntry * entry ) ;
2012-06-09 15:41:21 +02:00
void updateDisplayUnit ( ) ;
2013-08-12 17:03:03 +02:00
void coinControlFeatureChanged ( bool ) ;
void coinControlButtonClicked ( ) ;
void coinControlChangeChecked ( int ) ;
void coinControlChangeEdited ( const QString & ) ;
void coinControlUpdateLabels ( ) ;
void coinControlClipboardQuantity ( ) ;
void coinControlClipboardAmount ( ) ;
void coinControlClipboardFee ( ) ;
void coinControlClipboardAfterFee ( ) ;
void coinControlClipboardBytes ( ) ;
void coinControlClipboardLowOutput ( ) ;
void coinControlClipboardChange ( ) ;
2014-11-02 00:14:47 +01:00
void updateFeeSectionControls ( ) ;
void updateSmartFeeLabel ( ) ;
2013-10-24 15:49:13 +02:00
2015-07-14 13:59:05 +02:00
Q_SIGNALS :
2013-10-24 15:49:13 +02:00
// Fired when a message should be reported to the user
void message ( const QString & title , const QString & message , unsigned int style ) ;
2011-05-08 22:23:31 +02:00
} ;
2016-05-10 04:26:57 +02:00
2017-02-03 22:04:39 +01:00
# define SEND_CONFIRM_DELAY 3
2016-05-10 04:26:57 +02:00
class SendConfirmationDialog : public QMessageBox
{
Q_OBJECT
public :
2018-07-30 12:37:09 +02:00
SendConfirmationDialog ( const QString & title , const QString & text , int secDelay = SEND_CONFIRM_DELAY , QWidget * parent = nullptr ) ;
2016-05-10 04:26:57 +02:00
int exec ( ) ;
private Q_SLOTS :
void countDown ( ) ;
void updateYesButton ( ) ;
private :
QAbstractButton * yesButton ;
QTimer countDownTimer ;
int secDelay ;
} ;
2014-11-03 16:16:40 +01:00
# endif // BITCOIN_QT_SENDCOINSDIALOG_H