Browse Source
- move dialog code to own submodule and class - disable ok button if amount is out of bounds - add max button - add Rebalance button to channels tabpatch-4
5 changed files with 112 additions and 45 deletions
@ -0,0 +1,69 @@ |
|||||
|
from PyQt5.QtCore import pyqtSignal |
||||
|
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QGridLayout, QPushButton |
||||
|
|
||||
|
from electrum.i18n import _ |
||||
|
from .util import WindowModalDialog, Buttons, OkButton, CancelButton, WWLabel |
||||
|
from .amountedit import BTCAmountEdit |
||||
|
|
||||
|
|
||||
|
class RebalanceDialog(WindowModalDialog): |
||||
|
|
||||
|
def __init__(self, window, chan1, chan2, amount_sat): |
||||
|
WindowModalDialog.__init__(self, window, _("Rebalance channels")) |
||||
|
self.window = window |
||||
|
self.wallet = window.wallet |
||||
|
self.chan1 = chan1 |
||||
|
self.chan2 = chan2 |
||||
|
vbox = QVBoxLayout(self) |
||||
|
vbox.addWidget(WWLabel(_('Rebalance your channels in order to increase your sending or receiving capacity') + ':')) |
||||
|
grid = QGridLayout() |
||||
|
self.amount_e = BTCAmountEdit(self.window.get_decimal_point) |
||||
|
self.amount_e.setAmount(amount_sat) |
||||
|
self.amount_e.textChanged.connect(self.on_amount) |
||||
|
self.rev_button = QPushButton(u'\U000021c4') |
||||
|
self.rev_button.clicked.connect(self.on_reverse) |
||||
|
self.max_button = QPushButton('Max') |
||||
|
self.max_button.clicked.connect(self.on_max) |
||||
|
self.label1 = QLabel('') |
||||
|
self.label2 = QLabel('') |
||||
|
self.ok_button = OkButton(self) |
||||
|
self.ok_button.setEnabled(False) |
||||
|
grid.addWidget(QLabel(_("From channel")), 0, 0) |
||||
|
grid.addWidget(self.label1, 0, 1) |
||||
|
grid.addWidget(QLabel(_("To channel")), 1, 0) |
||||
|
grid.addWidget(self.label2, 1, 1) |
||||
|
grid.addWidget(QLabel(_("Amount")), 2, 0) |
||||
|
grid.addWidget(self.amount_e, 2, 1) |
||||
|
grid.addWidget(self.max_button, 2, 2) |
||||
|
grid.addWidget(self.rev_button, 0, 2) |
||||
|
vbox.addLayout(grid) |
||||
|
vbox.addLayout(Buttons(CancelButton(self), self.ok_button)) |
||||
|
self.update() |
||||
|
|
||||
|
def on_reverse(self, x): |
||||
|
a, b = self.chan1, self.chan2 |
||||
|
self.chan1, self.chan2 = b, a |
||||
|
self.amount_e.setAmount(None) |
||||
|
self.update() |
||||
|
|
||||
|
def on_amount(self, x): |
||||
|
self.update() |
||||
|
|
||||
|
def on_max(self, x): |
||||
|
n_sat = self.wallet.lnworker.num_sats_can_rebalance(self.chan1, self.chan2) |
||||
|
self.amount_e.setAmount(n_sat) |
||||
|
|
||||
|
def update(self): |
||||
|
self.label1.setText(self.chan1.short_id_for_GUI()) |
||||
|
self.label2.setText(self.chan2.short_id_for_GUI()) |
||||
|
amount_sat = self.amount_e.get_amount() |
||||
|
b = bool(amount_sat) and self.wallet.lnworker.num_sats_can_rebalance(self.chan1, self.chan2) <= amount_sat |
||||
|
self.ok_button.setEnabled(b) |
||||
|
|
||||
|
def run(self): |
||||
|
if not self.exec_(): |
||||
|
return |
||||
|
amount_msat = self.amount_e.get_amount() * 1000 |
||||
|
coro = self.wallet.lnworker.rebalance_channels(self.chan1, self.chan2, amount_msat=amount_msat) |
||||
|
self.window.run_coroutine_from_thread(coro, _('Rebalancing channels')) |
||||
|
self.window.update_current_request() # this will gray out the button |
Loading…
Reference in new issue