8711cc0c78
This adds functions for specifing a min/max value for a BitcoinAmountField. These options only affect user input, so it's still possible to use setValue to set values outside of the min/max range. The existing value will not be changed when calling these functions even if it's out of range. The min/max range will be reinforced when the field loses focus. This also adds `SetAllowEmpty` function which specifies if the field is allowed to be left empty by the user. If set to false the field will be set to the minimum allowed value if it's empty when focus is lost.
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
// Copyright (c) 2011-2018 The Bitcoin Core developers
|
|
// Distributed under the MIT software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef BITCOIN_QT_BITCOINAMOUNTFIELD_H
|
|
#define BITCOIN_QT_BITCOINAMOUNTFIELD_H
|
|
|
|
#include <amount.h>
|
|
|
|
#include <QWidget>
|
|
|
|
class AmountSpinBox;
|
|
|
|
QT_BEGIN_NAMESPACE
|
|
class QValueComboBox;
|
|
QT_END_NAMESPACE
|
|
|
|
/** Widget for entering bitcoin amounts.
|
|
*/
|
|
class BitcoinAmountField: public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
// ugly hack: for some unknown reason CAmount (instead of qint64) does not work here as expected
|
|
// discussion: https://github.com/bitcoin/bitcoin/pull/5117
|
|
Q_PROPERTY(qint64 value READ value WRITE setValue NOTIFY valueChanged USER true)
|
|
|
|
public:
|
|
explicit BitcoinAmountField(QWidget *parent = 0);
|
|
|
|
CAmount value(bool *value=0) const;
|
|
void setValue(const CAmount& value);
|
|
|
|
/** If allow empty is set to false the field will be set to the minimum allowed value if left empty. **/
|
|
void SetAllowEmpty(bool allow);
|
|
|
|
/** Set the minimum value in satoshis **/
|
|
void SetMinValue(const CAmount& value);
|
|
|
|
/** Set the maximum value in satoshis **/
|
|
void SetMaxValue(const CAmount& value);
|
|
|
|
/** Set single step in satoshis **/
|
|
void setSingleStep(const CAmount& step);
|
|
|
|
/** Make read-only **/
|
|
void setReadOnly(bool fReadOnly);
|
|
|
|
/** Mark current value as invalid in UI. */
|
|
void setValid(bool valid);
|
|
/** Perform input validation, mark field as invalid if entered value is not valid. */
|
|
bool validate();
|
|
|
|
/** Change unit used to display amount. */
|
|
void setDisplayUnit(int unit);
|
|
|
|
/** Make field empty and ready for new input. */
|
|
void clear();
|
|
|
|
/** Enable/Disable. */
|
|
void setEnabled(bool fEnabled);
|
|
|
|
/** Qt messes up the tab chain by default in some cases (issue https://bugreports.qt-project.org/browse/QTBUG-10907),
|
|
in these cases we have to set it up manually.
|
|
*/
|
|
QWidget *setupTabChain(QWidget *prev);
|
|
|
|
Q_SIGNALS:
|
|
void valueChanged();
|
|
|
|
protected:
|
|
/** Intercept focus-in event and ',' key presses */
|
|
bool eventFilter(QObject *object, QEvent *event);
|
|
|
|
private:
|
|
AmountSpinBox *amount;
|
|
QValueComboBox *unit;
|
|
|
|
private Q_SLOTS:
|
|
void unitChanged(int idx);
|
|
|
|
};
|
|
|
|
#endif // BITCOIN_QT_BITCOINAMOUNTFIELD_H
|