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