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 tabmaster
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