add explicit 'max' button to send tab. fixes #1428

This commit is contained in:
ThomasV 2016-05-20 20:14:21 +02:00
parent 3314b3acc7
commit fff8462f36
1 changed files with 30 additions and 17 deletions

View File

@ -174,6 +174,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
# set initial message
self.console.showMessage(self.network.banner)
self.is_max = False
self.payment_request = None
self.checking_accounts = False
self.qr_window = None
@ -1004,6 +1005,12 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
grid.addWidget(amount_label, 4, 0)
grid.addWidget(self.amount_e, 4, 1)
max_button = EnterButton(_("Max"), self.spend_max)
hbox = QHBoxLayout()
hbox.addWidget(max_button)
hbox.addStretch(1)
grid.addLayout(hbox, 4, 3)
msg = _('Bitcoin transactions are in general not free. A transaction fee is paid by the sender of the funds.') + '\n\n'\
+ _('The amount of fee can be decided freely by the sender. However, transactions with low fees take more time to be processed.') + '\n\n'\
+ _('A suggested fee is automatically added to this field. You may override it. The suggested fee increases with the size of the transaction.')
@ -1011,8 +1018,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
self.fee_slider = QSlider(Qt.Horizontal, self)
self.fee_slider.setRange(0, 4)
self.fee_slider.setTickInterval(1)
self.fee_slider.setTickPosition(QSlider.TicksBelow)
self.fee_slider.setToolTip(_(''))
self.fee_description = QLabel('')
def slider_moved():
@ -1020,7 +1025,11 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
self.fee_description.setText(['slow','','medium','','fast'][i])
def slider_released():
self.config.set_key('fee_level', self.fee_slider.sliderPosition(), False)
self.update_fee()
if self.is_max:
self.spend_max()
else:
self.update_fee()
self.fee_slider.valueChanged.connect(slider_moved)
self.fee_slider.sliderReleased.connect(slider_released)
self.fee_slider.setValue(self.config.get('fee_level', 2))
@ -1044,20 +1053,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
buttons.addWidget(self.clear_button)
grid.addLayout(buttons, 6, 1, 1, 2)
def on_shortcut():
inputs = self.get_coins()
sendable = sum(map(lambda x:x['value'], inputs))
fee = self.fee_e.get_amount() if self.fee_e.isModified() else None
addr = self.get_payto_or_dummy()
amount, fee = self.wallet.get_max_amount(self.config, inputs, addr, fee)
if not self.fee_e.isModified():
self.fee_e.setAmount(fee)
self.amount_e.setAmount(amount)
self.not_enough_funds = (fee + amount > sendable)
# emit signal for fiat_amount update
self.amount_e.textEdited.emit("")
self.amount_e.shortcut.connect(on_shortcut)
self.amount_e.shortcut.connect(self.spend_max)
self.payto_e.textChanged.connect(self.update_fee)
self.amount_e.textEdited.connect(self.update_fee)
@ -1110,6 +1106,22 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
run_hook('create_send_tab', grid)
return w
def spend_max(self):
inputs = self.get_coins()
sendable = sum(map(lambda x:x['value'], inputs))
fee = self.fee_e.get_amount() if self.fee_e.isModified() else None
addr = self.get_payto_or_dummy()
amount, fee = self.wallet.get_max_amount(self.config, inputs, addr, fee)
if not self.fee_e.isModified():
self.fee_e.setAmount(fee)
self.amount_e.setAmount(amount)
self.not_enough_funds = (fee + amount > sendable)
# emit signal for fiat_amount update
self.amount_e.textEdited.emit("")
self.is_max = True
def update_fee(self):
self.require_fee_update = True
@ -1460,6 +1472,7 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, PrintError):
def do_clear(self):
self.is_max = False
self.not_enough_funds = False
self.payment_request = None
self.payto_e.is_pr = False